Dois-je utiliser getcontexteapplication ou de l'Activité.ce dans une longue course AsyncTask
J'ai un long cours d'exécution Asynchrone Tâche qui envoie des données sur mon serveur, puis s'arrête. L'ensemble du processus peut impliquer quelques demandes et de réponses. J'ai à lire les données à partir de la base de données, envoyer et gérer la réponse et de la mise à jour de ma base de données en conséquence. Je suis en utilisant les fournisseurs de contenu à lire et à mettre à jour les données de la base de données.
Maintenant d'utiliser le Fournisseur de Contenu, je dois appeler le getContentResolver()
méthode sur le contexte. Donc, je me demande si je dois utiliser getApplicationContext
ou tout simplement passer le Activity.this
à mes méthodes.
J'ai vu quelques posts comme ceci d'expliquer la différence entre les deux et la plupart d'entre eux ils nous conseiller de ne pas utiliser getApplicationContext
si possible. Bien que je ne veux pas que mon AsyncTask
à perdre le contexte de Activity.this
lorsque le Activity
est détruit ou lors de changements d'orientation. Alors je me demande si je peux utiliser getApplicationContext
dans mon cas, ou le fait d'utiliser des Activity.this
l'adapter à mes besoins.
Vous devez vous connecter pour publier un commentaire.
Il y a une raison pour utiliser chacune des options.
Lorsque vous utilisez le contexte afin de modifier l'INTERFACE utilisateur, vous devrait utiliser le contexte d'Activité, puisque, dans certains cas, en utilisant le contexte de l'application peut provoquer une exception (comme décrit ici et ici). Comme dans le cas suivant:
Lorsque vous utilisez le contexte de la croix-activité d'utilisation, vous ne devriez pas lier le contexte d'Activité de l'action, depuis lors, même si l'activité est détruit, il ne sera pas de garbage collector, car il est toujours référencé à partir de la tâche en cours d'exécution. Dans ces cas, vous devez utiliser le contexte de l'Application. Voir l'article Android, site du Développeur (écrit par Romain Guy) pour encore plus de détails.
Si vous êtes seulement en utilisant le contexte de l'appel
getContentResolver
, vous devez utiliser le contexte de l'Application.as described here
.