2017-01-02 1 views
0

Le travail en arrière-plan dans mon application Android est fait en communiquant des processus séquentiels, ce qui signifie que les threads qui écoutent les commandes sur un BlockingQueue.Android onPause: Pourquoi arrêter les threads du tout?

Les threads/acteurs sont initialisés dans MainApplication.

Arrêter ces fils au cours d'une Activity.onPause apporte une complication, par exemple des commandes sur le BlockingQueue peuvent arriver avantonResume est appelé.

Question 1: Pourquoi prendre la peine d'arrêter ces threads pendant ? Ils sont dans un état bloqué, ne font aucun travail, donc ils ne devraient pas avoir d'impact sur les performances.

Question 2: Lorsque puis onDestroy est appelé, ce qui se passe à ces discussions? L'ART va-t-il les tuer? .interrupt() eux? Y a-t-il un temps mort?

+0

* ne fait aucun travail * ne vérifie-t-il pas s'il y a du travail à faire? –

+0

Les threads sont en attente. –

Répondre

2
  1. Votre question est basée sur l'opinion, mais ne pas les arrêter ne coûte probablement pas cher. En règle générale, vous devez arrêter tout travail lorsque l'interface utilisateur n'est pas montrée à l'utilisateur (après onStop). C'est à vous de décider si les garder en attente est suffisant. Seulement "détruit" votre instance Activity et non votre instance (ou processus) de machine virtuelle. Les autres objets ou objets singleton qui ne sont pas récupérés resteront en vie, y compris les fils de fond.

+0

Il ne détruit pas mon MainApplication, ou le fait? Les discussions sont démarrées à partir de là. –

+0

Nope n'est pas. Mais vous devez comprendre que dès que votre application n'a plus aucun composant actif (Activity, BroadcastReceiver, Service, etc.) Android peut tuer votre application/processus complètement sans aucun avertissement pour nettoyer la mémoire RAM afin que d'autres applications puissent l'utiliser. Ainsi, dans des cas extrêmes (dispositifs à mémoire faible), vos threads pourraient être arrêtés éventuellement. –