J'essaie de mettre en œuvre mon premier demandeur de travail de travail. Je comprends qu'un appel à Pour être spécifique, j'ai un travail qui sera effectué en arrière-plan. Mais j'ai un moyen de savoir quand le travail est terminé (par SharedPrefs). J'espérais compter sur lorsque Onstopjob est appelé à envoyer une notification à l'utilisateur que le travail est effectué. P>
Remarque: Onstopjob est un endroit pratique pour envoyer la notification car je vérifie déjà si le travail est fait pour savoir si je devrais réessayer. P>
P.s. Quelque chose à considérer cela pourrait aider (je le considère aussi): si mon onstartjob code> est pratiquement garanti (oui, il existe des bords si je spécifie des exigences scandaleuses sans délai d'expiration). Mais que diriez-vous de
wastopjob code>? Est-il garanti d'être appelé? P>
Onstartjob Code> retourne true, comment le système sache-t-il lorsque mon travail s'arrête en s'exécutant, à moins qu'il appelle
Onstopjob code>? < / p>
3 Réponses :
Selon le document , Onstopjob est appelé lorsque le système décide d'arrêter votre travail avec force avant de finir. Vous ne pouvez pas utiliser cette API pour répondre à vos besoins. P>
Je suggère d'envoyer un message de diffusion sous forme de signal d'achèvement lorsque votre travail finit. P>
Situation: strong> (1) onstartjob () renvoie false. garder à l'esprit: strong> (4) Le système appellera ONSTOPJOB () pour vous, mais cela prendra une longue période après que les exigences ne soient pas remplies, peut-être 1min (test sur Xiaomi 4c). P>
(5) Système appellera ONSTOPJOB () pour vous. P>
Votre question: strong>
p>
(2) Système a reçu une demande d'annulation
après OnStartjob () renvoyer false. (Par exemple, invoquer
emploischeduler.cancelall (); Après Onstartjob () Return.)
(3) Invoquer
JobFineheished (paramètres, false); Peu de temps après Onstartjob () retourne vrai.
(4) OnStartJob () Return TRUE et les exigences ne sont plus remplies.
(5) Call Jobscheduler.Cancelall () Après Onstartjob () Return TRUE; P>
blockQuote>
OnStopJob () est appelé si le système a déterminé que vous
Doit arrêter l'exécution de votre travail avant même que vous ayez eu la chance d'appeler Employé (). P>
(1) (2) (3) Système n'appellera pas ONSTOPJOB () pour votre travail si vous avez le système que vous avez effectué le travail effectué par renvoyer false dans Onstartjob () ou par appel JobFineheished (), car le système ne doit pas. p>
(1) Comment le système sache-t-il lorsque mon travail s'arrête en cours d'exécution, à moins que cela n'appelle ONSTOPJOB?
code>
Vous pouvez appeler JobFineheished () ou renvoyer false in Onstartjob () pour laisser le système savoir que vous avez terminé votre travail. P>
(2) est-il garanti d'être appelé?
code>
Cela dépend des situations.SO Il n'est pas juste de s'appuyer sur OnstopJob () pour déterminer que le travail a fait. P>
Lorsque vous retournez true dans Onstartjob ()
public boolean onStartJob(JobParameters jobParameters) { Toast.makeText(getApplicationContext(), "MyJobService.onStartJob()", Toast.LENGTH_SHORT).show(); Log.d("KRN","KRANTHU: "); /* * True - if your service needs to process * the work (on a separate thread). * False - if there's no more work to be done for this job. */ return true; }