Répondre: relation entre le cycle de vie d'un AsyncTask et un Activity

Nom
Sujet
Message

Historique du sujet :

Max. affiche le(s) dernier(s) 6 message(s) - (Dernier message affiché en premier)
il y a 5 ans 2 mois #15

Anonymes

Portrait de

Comment obtenir IMEI / PAYS et Type de l'appareil par programmation dans Android?
il y a 5 ans 3 mois #14

Android Corpo

Portrait de

Un AsyncTask n'est pas lié au cycle de vie de l'activité qui le contient. Ainsi, par exemple, si vous démarrez une tâche AsyncTask dans une activité et que l'utilisateur fait tourner l'appareil, l'activité sera détruite (et une nouvelle instance d'activité sera créée) mais la tâche AsyncTask ne mourra pas mais continuera à vivre jusqu'à ce qu'elle se termine.

Ensuite, lorsque la tâche AsyncTask se termine, plutôt que de mettre à jour l'interface utilisateur de la nouvelle activité, elle met à jour l'ancienne instance de l'activité (c'est-à-dire celle dans laquelle elle a été créée mais qui n'est plus affichée!). Cela peut entraîner une exception (du type java.lang.IllegalArgumentException: vue non attachée au gestionnaire de fenêtres si vous utilisez, par exemple, findViewById pour récupérer une vue à l'intérieur de l'activité).

Il peut également en résulter une fuite de mémoire, car l'AsyncTask conserve une référence à l'Activté, ce qui empêche l'activité d'être récupérée tant que l'AsyncTask reste en vie.

Pour ces raisons, l'utilisation d'AsyncTasks pour des tâches d'arrière-plan de longue durée est généralement une mauvaise idée. Au contraire, pour les tâches d'arrière-plan de longue durée, un mécanisme différent (tel qu'un service) doit être utilisé.
il y a 5 ans 3 mois #13

Anonymes

Portrait de

Quelle est la relation entre le cycle de vie d'un AsyncTask et un Activity? Quels problèmes cela peut-il entraîner? Comment éviter ces problèmes?
Temps de génération de la page : 0.091 secondes