2011-03-07 4 views
21

Je pense que je connais la réponse à cette question, mais un AsyncTask continue-t-il de fonctionner une fois que son activité d'appel a été finish() ed?Si une activité est supprimée, l'AsyncTask est-elle active?

protected void onPreExecute() { 
     Toast.makeText(getApplicationContext(), "Your data is processing.", Toast.LENGTH_LONG); 
     finish(); 
    } 

Edit: Jusqu'à présent, deux réponses différentes :)

Répondre

13

La tâche asynchrone est liée à un thread d'interface utilisateur et si l'activité est terminée, la tâche asynchrone est annulée.

[mise à jour] - Le commentaire de Hackbod ci-dessous est correct. Il convient de noter que les asyncTasks sont censés être de courte durée et, en tant que tels, ne pas trop s'inquiéter de ce problème. Un AsycTask n'est vraiment parti quand il est terminé OU le processus est tué ce qui peut ou ne peut pas arriver après l'appel de finish.

+0

Je pense que vous avez raison (comme indiqué dans les documents): http://developer.android.com/reference/android/os/AsyncTask.html#Class_Overview –

+41

Ce phrasé n'est pas si bon. AsyncTask est complètement indépendant d'une activité; vous devez les gérer ensemble. Une activité étant * terminée * ne fait rien à aucun AsyncTasks, sauf si vous les nettoyez de onDestroy(). D'un autre côté, si le processus d'une activité est en train d'être tué alors qu'il est en arrière-plan, alors la tâche AsyncTask sera également également supprimée, dans le cadre de la disparition du processus entier. – hackbod

+0

alors devons-nous vérifier si l'activité est encore vivante avant de faire des changements d'interface utilisateur dans _onPostExecute() _? – Reek

1

Il continue à courir jusqu'à ce que les onPostExecute finitions.

1

J'ai éprouvé quelque chose de bizarre avec les tâches asynchrones où si une activité est tuée par le système d'exploitation et quand l'application reprend, les asyncTasks ne fonctionnent pas du tout. Je ne suis pas sûr pourquoi ils entrent dans cet état. Si vous exécutez vos AsyncTasks dans votre propre thread exécuteur, cela ne se produit pas. Je pourrais courir dans des circonstances étranges. Pensé qu'il pourrait être utile de poster ici de toute façon :).

+0

J'ai le même problème. quand je reprends l'asynkTask ne fonctionne pas. comment résoudre ce problème – dmSherazi

+0

Désolé pour la réponse tardive. Ma solution, comme je l'ai mentionné ci-dessus, était d'utiliser un exécuteur et de lui passer le AsyncTask. La méthode que vous recherchez est AsyncTask.executeOnExecutor() - Hope that helps? – dineth

0

La tâche asynchrone continue à fonctionner jusqu'à ce que la fonction onPostExecute() soit terminée. Essayez-le en mettant un toast sur finish() et onPostExecute() pour voir quel pain est montré en premier.

0

Les tâches asynchrones ne sont liées à aucune méthode d'activité ou de service du cycle de vie.

Il continue de s'exécuter dans un thread distinct jusqu'à ce que onPostExecute() soit exécuté dans le thread principal.

0

Les tâches asynchrones n'ont aucun effet sur le cycle de vie de l'activité ni sur les modifications de configuration. Ils continuent de fonctionner jusqu'à ce que la méthode onPostExecute() soit appelée.

Il est préférable d'utiliser les services pour les opérations longues.

Questions connexes