6
votes

sur Android, Onstopjob a-t-il toujours appelé?

J'essaie de mettre en œuvre mon premier demandeur de travail de travail. Je comprends qu'un appel à onstartjob 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 ? Est-il garanti d'être 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é.

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.s. Quelque chose à considérer cela pourrait aider (je le considère aussi): si mon Onstartjob retourne true, comment le système sache-t-il lorsque mon travail s'arrête en s'exécutant, à moins qu'il appelle Onstopjob ? < / p>


0 commentaires

3 Réponses :


4
votes

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.

Je suggère d'envoyer un message de diffusion sous forme de signal d'achèvement lorsque votre travail finit.


0 commentaires

8
votes

Situation:

(1) onstartjob () renvoie false.
(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;

garder à l'esprit:
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é ().

expliquer: de
(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.

(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).

(5) Système appellera ONSTOPJOB () pour vous.

Votre question:
(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? Vous pouvez appeler JobFineheished () ou renvoyer false in Onstartjob () pour laisser le système savoir que vous avez terminé votre travail.

(2) est-il garanti d'être appelé? Cela dépend des situations.SO Il n'est pas juste de s'appuyer sur OnstopJob () pour déterminer que le travail a fait.


0 commentaires

1
votes

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;
    }


0 commentaires