Question

J'ai une classe qui va chercher des données en réponse aux pressions de boutons dans l'activité principale. Malheureusement, je continue à avoir des problèmes parce que cette classe n'est pas une activité ou un service. Par exemple, sans contexte, je ne peux pas traduire un identifiant de ressource dans une chaîne:

getString(R.string.example_string); // Doesn't work

Dois-je faire de cette classe en service et ont l'activité principale arrête la classe quand il est fermé? Dois-je passer le contexte de l'activité dans cette classe comme ça?

MyClass c = new MyClass(this);

Ou est-il une meilleure façon de gérer ce problème?

Cette question se pose aussi lorsque je tente d'envoyer un toast de cette classe.

Mise à jour: Erich et Janusz m'a orienté dans la direction de la classe AsyncTask qui fonctionne parfaitement, sauf qu'il crée un nouveau thread et ne tue jamais ce fil. Cela signifie que jamais lorsque l'utilisateur appuie sur un bouton, un autre thread est ajouté et les anciens assis juste là.

Était-ce utile?

La solution

Si vous avez une action de fond dont le cycle de vie est découplé de votre activité, je voudrais utiliser un Service. Dans ce cas, le Service aura son propre Context, vous aurez donc pas besoin de passer. Si, cependant, vous devez d'effectuer une action de fond en réponse à un événement de l'interface utilisateur (et après le cas échéant les résultats dans l'interface utilisateur fil), je vous recommande d'utiliser un AsyncTask.

Autres conseils

Je suis d'accord avec Erich, si vous avez seulement un petit quelque chose comme l'affichage d'un changement à un back-end Web ou le chargement quelque chose de la mémoire du téléphone pour l'afficher sur l'écran d'utiliser un Async Tâche . Si la tâche sortira très « rapide » (quelques secondes), vous pouvez faire une classe anonyme à l'intérieur de votre activité. Cela vous permettra d'utiliser une référence implicite à l'activité extérieure à l'intérieur de la tâche et vous pouvez obtenir votre contexte à partir de là.

Si la tâche est en cours pour une période plus longue, vous pouvez transmettre le contexte. Si vous passez sur le contexte essayer de passer pas de l'activité utiliser this.getApplicationContext (), ce qui réduira le nombre de références à votre activité et permettre au collecteur d'ordures pour nettoyer correctement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top