Depuis Honeycomb
et le v4 Compatibility Library
il est possible d'utiliser AsyncTaskLoader
. D'après ce que je comprends, leAsyncTaskLoader
peut survivre grâce à des changements de configuration comme des retournements d'écran.
Est-il recommandé d'utiliser à la AsyncTaskLoader
place de AsyncTask
? Est-ce LoaderManager
que ça rentre aussi dans l'image?
Mais je n'ai trouvé aucun bon exemple sur la façon d'utiliser correctement le AsyncTaskLoader
. La documentation ne fournit également aucun exemple. Quelqu'un peut-il donner de bons exemples.
AsyncTaskLoader
, et lorsque plus de développeurs commenceront à l'utiliser, d'autres exemples viendront.Quand comparer AsyncTaskLoader et AsyncTask , comme vous le savez peut - être lorsque vous faites pivoter l' écran de votre appareil, il peut détruire et recréer votre activité, pour le rendre l' image claire de faire pivoter votre appareil pendant la transaction en réseau est en cours:
AsyncTask sera à nouveau exécuté en tant que thread d'arrière-plan, et le traitement précédent des threads d'arrière-plan était juste redondant et zombie.
AsyncTaskLoader sera simplement réutilisé en se basant sur l'ID de chargeur précédemment enregistré dans Loader Manager, évitez donc de réexécuter la transaction réseau.
En résumé, AsyncTaskLoader empêche la duplication des threads d'arrière-plan et élimine la duplication des activités zombies.
la source
AsyncTaskLoader exécute la même fonction que AsyncTask , mais un peu mieux. Il peut gérer plus facilement les modifications de configuration des activités et se comporte dans les cycles de vie des fragments et des activités. La bonne chose est que l'AsyncTaskLoader peut être utilisé dans n'importe quelle situation où l'AsyncTask est utilisé. Chaque fois que les données doivent être chargées en mémoire pour que l'activité / le fragment puisse être géré, AsyncTaskLoader peut mieux faire le travail.
Il y a cependant quelques problèmes avec l'utilisation d'AsyncTasks:
Documentation AsyncTaskLoader
la source
Quelques différences autres que celles décrites dans d'autres réponses:
Lors de l'utilisation d' AsyncTaskLoader sur AsyncTask :
AsyncTaskLoader nous donne la liberté de charger les anciennes données mises en cache jusqu'à ce que de nouvelles données soient renvoyées par
forceLoad()
Nous pouvons définir des retards à AsyncTaskLoader par ce
setUpdateThrottle()
qui peut empêcher les mises à jour consécutives au client (activité / Fragment)AsyncTaskLoader peut être partagé avec plusieurs fragments s'ils ont une activité parent commune et si elle a été démarrée à partir de
getActivity().getSupportLoaderManager()
AsyncTaskLoader est détruit
LoaderManger
lorsque son activité liée n'est plus disponible. tandis que nous devons détruire manuellement AsyncTasks si son activité d'appel détruit. Cela nous fait gagner du temps en écrivant toutes les choses de compensation. AsyncTaskLoader fonctionne bien avec leurs cycles de vie respectifs.Donc, AsyncTaskLoader est bien meilleur que AsyncTask.
la source