Quel est le meilleur moyen d'obtenir / utilisation d'un Contexte à l'intérieur AsyncTask?
J'ai défini un thread séparé par l'extension de la AsyncTask
classe. Dans cette classe, j'ai effectuer des Toasts et des boîtes de dialogue à l'intérieur de l'AsyncTask est onPostExecute
et onCancelled
méthodes. Les toasts exigent l'application de contexte tels que tout ce que je dois faire c'est:
Toast.makeText(getApplicationContext(),"Some String",1);
Les boîtes de dialogue sont créés à l'aide de AlertDialog.Builder
qui requiert également un contexte dans son constructeur. Suis-je en droit de penser que ce contexte devrait être l'Activité du contexte? c'est à dire
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
où getActivity
pourrait être une classe définie par l'utilisateur qui renvoie à l'activité en cours. Si oui, quelle est la meilleure façon de gérer cette situation? La création d'une classe comme getActivity
ou en passant l'activité actuelle du contexte de l'AsyncTask du constructeur?
Je suppose que je suis en train d'essayer de comprendre l'utilisation de Context
- j'ai remarqué que les fuites de mémoire peut être un problème (je ne comprends pas vraiment ce encore) et comment l'utilisation de getApplicationContext()
est la meilleure approche possible.
Vous devez vous connecter pour publier un commentaire.
Il suffit de créer l'AsyncTask comme un intérieur de la classe de votre Activité, ou passer le Contexte le Constructeur de l'AsyncTask.
Intérieure: MyActivity.java
Constructeur: MyTask.java
En outre, s'il vous plaît ne pas oublier de appel .show() sur votre boîte de Dialogue.
Toast.makeText(getApplicationContext(), ...
dansMyTask
's méthodes de l'INTERFACE utilisateur,AlertDialog.Builder(getApplicationContext())
ne fonctionne pas. Je présume que c'est parce qu'il n'est pas le bon contexte? Par conséquent, il n'est pas une obligation de passer l'activité du contexte deMyTask
s'constructeur? Ou ai-je raté quelque chose?Toast
etAlertDialog
travail en passant le contexte deMyTask
s'constructeur comme vous l'avez indiqué ci-dessus, c'est à dire, l'instanciation deMyTask
à l'aide deMyTask(this)
à partir d'un événement onClick dans l'activité principale. Bon, alors j'ai juste besoin de préciser:MyTask(this)
passe à l'activité du contexte deMyTask
qui peut être utilisé par les deuxToast
etAlertDialog
. Cependant, alors queToast
pouvez utiliser le contexte des applications à l'aide degetApplicationContext()
,AlertDialog
ne peut pas, c'est à dire, il a besoin de l'activité du contexte pense que c'est là où j'allais mal.doInBackground
ne fonctionne pas sur le thread d'INTERFACE utilisateur. J'ai été appeler à partir deonCancelled
etonPostExecute
.