Question

J'ai un écran de connexion utilisateur. L'utilisateur appuie sur un bouton de connexion et je crée un service d'intention pour se connecter à mes services de repos et renvoyer un résultat d'authentification.

Maintenant, voici les fonctionnalités que je veux réaliser: si l'activité est interrompue (c'est-à-dire entre en arrière-plan), le service d'intention devrait toujours s'exécuter, et c'est le cas. Mais si j'utilise le gestionnaire de tâches pour tuer l'application, le service d'intention devrait s'arrêter, bien que ce ne soit pas le cas pour le moment. Il continue d'exécuter onHandleIntent jusqu'à terminer. Si j'appelle manuellement stopSelf(), onDestroy() s'appelle mais le onHandleIntent La méthode continue de s'exécuter. Comment puis-je forcer le onHandleIntent arrêter? Appeler "retour" n'est pas une option car il pourrait être pris dans un seul appel de méthode de repos.

Dois-je utiliser Intention Service pour cette fonctionnalité ou autre chose (comme Service ou AsyncTask)?

Était-ce utile?

La solution

Tout d'abord, si votre service fait quelque chose que vous voulez faire pendant que votre application s'exécute au premier plan, vous n'avez pas besoin d'un service. Votre activité ou votre boîte de dialogue peut simplement engendrer un fil pour effectuer votre tâche, et ces threads se termineront à la fin de votre application, car ils sont dans le cadre de la tâche de votre application. Sinon, pour les tâches que vous souhaitez effectuer tout le temps, lorsque l'utilisateur pourrait faire n'importe quoi sur l'appareil, utilisez certainement un service.

Je ne sais pas pourquoi "appeler un retour" n'est pas une option pour vous? Par là, je suppose que vous voulez dire vérifier une condition et sortir de la boucle ou du bloc si la condition est remplie. C'est généralement ainsi que les threads (dans les services ou ailleurs) devraient se terminer (bien qu'il y ait d'autres approches). Le fil de votre service peut écouter un événement spécifique qui s'est produit (comme si l'activité a été détruite, en définissant une propriété dans un fichier ou une base de données lorsque l'activité onDestroy s'appelle, bien que si c'est ce que vous voulez, vous ne devriez probablement pas utiliser de service), puis run() peut revenir gracieusement.

Mais s'il s'agit d'une tâche que vous voulez accomplir, peu importe ce que l'utilisateur fait sur son appareil (à l'intérieur ou à l'extérieur de votre application), alors ce devrait être une tâche qui ne devrait pas être interrompue de l'extérieur. Il devrait continuer jusqu'à ce que cela soit fait.

Peut-être que si vous pouviez mieux définir lorsque vous voulez que ce service soit arrêté?

Autres conseils

Arrêtez-le dans votre onDestroy() méthode

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top