Est-ce un préfet moyen d'arrêter handlerthread?
J'ai toujours créer deux handler: l'un est wraping sur le thread principal, un autre est wraping sur un seul thread.
Est-ce une meilleure méthode pour démarrer et arrêter ces dans une Activité du cycle de vie?
HandlerThread safeThread = null;
Handler safeHandler = null;
Handler handler = null;
@Override
public void onStart() {
if (safeThread == null) {
safeThread = new HandlerThread("safeThread");
safeThread.start();
safeHandler = new Handler(safeThread.getLooper());
} else if (safeThread.getState() == Thread.State.NEW) {
safeThread.start();
safeHandler = new Handler(safeThread.getLooper());
} else if (safeThread.getState() == Thread.State.WAITING) {
safeHandler = new Handler(safeThread.getLooper());
} else if (safeThread.getState() == Thread.State.TERMINATED) {
safeThread = null;
safeThread = new HandlerThread("safeThread");
safeThread.start();
safeHandler = new Handler(safeThread.getLooper());
}
}
protected void onStop() {
Log.d("x", "onStop is executed");
safeHandler = null;
safeThread.quit();
safeThread.interrupt();
safeThread = null;
super.onStop();
}
safeThread.interrupt(); est le meilleur moyen d'arrêter un thread
oui , je sais, mais je pensais est ce coffre quand je après l'interruption et la valeur null.
j'ai donné la réponse..une chose que je vous suggère que vous êtes nouveau sur stackoverflow.SI vous voulez apprécier l'aide de quelqu'un, puis de lui donner un vote et si vous pensez que la réponse est meilleur puis le marquer comme réponse..:) bienvenue et bravo
oui , je sais, mais je pensais est ce coffre quand je après l'interruption et la valeur null.
j'ai donné la réponse..une chose que je vous suggère que vous êtes nouveau sur stackoverflow.SI vous voulez apprécier l'aide de quelqu'un, puis de lui donner un vote et si vous pensez que la réponse est meilleur puis le marquer comme réponse..:) bienvenue et bravo
OriginalL'auteur rex | 2012-01-18
Vous devez vous connecter pour publier un commentaire.
Vous pouvez l'utiliser comme un moyen sûr pour arrêter les threads:
pouvez-vous expliquer plus en détails ?? quelle est la raison ??
Pour la Raison, voir la question dans mon commentaire ci-dessus
OriginalL'auteur Tofeeq
Je sais c'est un peu vieille question, mais je tombe sur elle à la recherche du même réponse et d'autres recherches, je ne crois pas que la réponse actuelle s'applique très bien à HandlerThread (bien que tout à fait correcte pour la normale threads)
HandlerThread ont un builtin
quit()
etquitSafely
(API18) des méthodes pour arrêter le fil.https://developer.android.com/reference/android/os/HandlerThread.html#quit()
la différence entre les deux est que si les messages dans la file d'attente sera traitée avant qu'il s'arrête ou pas.
donc, pour répondre, c'est aussi simple que:
Quoi faire avant de l'api de 18 ans?
Ne quit() ou quitSafely() cesse de Fil ou seulement le Looper ce thread est là pour gérer les messages? Il n'explique pas si elle se termine le thread ou pas ici.
OriginalL'auteur Budius
Si vous démarrez le thread comme celui-ci:
Le plus sûr moyen de l'arrêter serait:
quitSafely garantit que tous les messages en attente sont traitées avant que le thread s'arrête.
Note: Ma réponse originale à cette question inclus un appel supplémentaire à fil.rejoignez, mais j'ai trouvé le rejoindre d'appel n'a pas communiqué de manière fiable en cas d'utilisation après quitSafely.
Je me souviens, j'observais que la jointure appel à quelques blocs de de la fil. C'était en août, donc pas sûr à 100%.
quitSafely a été la clé. Merci
OriginalL'auteur SharkAlley