Dois-je utiliser AsyncTask classe à l'intérieur de la MainActivity l'extension de l'Activité?
Je me demandais si AsyncTask
était fait pour être utilisé à l'intérieur de l'activité principale (MainActivity.java
) l'exécution du thread.
Par exemple, j'ai remarqué de nombreux tutoriels lors de l'utilisation de la AsyncTask
ils déclarer une classe privée à l'intérieur de la classe principale de l'extension de la Activity
plutôt que de créer un organisme indépendant .java
fichier pour que AsyncTask
(MyAsyncTask.java
) class
.
Mais j'ai remarqué que lors de l'utilisation d'un fichier indépendant, je ne suis pas être en mesure d'exécuter le runOnUIThread
(), parce qu'il appartient à la Activity
classe, alors comment vais-je être en mesure d'utiliser cette méthode à l'intérieur d'indépendants AsyncTask
(MyAsyncTask.java) qui s'étend AsyncTask
et pas Activity
.
- pourquoi vous voulez l'appeler runOnUIThread de AsyncTask?
- pour changer TextViews, ils ne peuvent pas être modifiés à partir d'autres threads.
- Vous pouvez mettre à jour l'INTERFACE utilisateur dans onPostExecute et onPreExecute
- J'ai édité ma réponse. vous pouvez mettre à jour votre textview par la façon dont je l'ai écrit dans le code.Peut que vous aider!
- Utilisation onPreExecute() , onProgressUpdate(), et onPostExecute() pour l'Activité de l'utilisation des méthodes. onProgressUpdate() est utilisé pour la notification de progrès. Dépend de vous. Meilleur AsyncTask tutoriel
Vous devez vous connecter pour publier un commentaire.
Qui est tout à fait acceptable. Je le fais souvent, mais il dépend de la façon dont vous l'utilisez. Si elle peut être utilisée par d'othe
Activities
alors je lui donne sa propre classe ou d'une classe partagée. Mais si c'est pour un but unique, alors je voudrais faire un intérieur de classe de laMainActivity
.L'avantage de créer un intérieur de classe, c'est qu'il dispose d'un accès direct pour les classes de variables de membre. Si vous le faites dans une classe à part puis il vous suffit de créer un constructeur pour cela, si vous devez passer dans
params
comme uncontext
ou d'autres variables.Je ne sais pas exactement ce que vous faites, mais je ne suis pas sûr que vous en avez besoin
runOnUiThread()
. Vous pouvez créer un constructeur dans votreAsyncTask
fichier et de l'acceptercontext
comme un param et de tout ce dont vous avez besoin. Ensuite, vous pouvez mettre à jour leUI
dansonPostExecute()
Exemple
puis l'appeler dans votre
MainActivity
Généralement on place
AsyncTask
dans la même classe pour le rendre plus clair qu'il est utilisé par la même de l'activité.Si vous voulez que
AsyncTask
tobe réutilisés par plus d'une activité, vous pouvez simplement créer un de la catégorie des indépendants et de passer les paramètres à partir de l'activité par les constructeursVous pouvez créer une interface dans votre asyncTask d'envoyer une réponse à partir de asynctask pour votre activité comme ci-dessous et de vous appeler lister méthode chaque fois que nécessaire. J'ai appelé il
onPostExecute()
:Et dans Votre classe d'Activité, vous avez besoin pour mettre en œuvre que le port d'écoute et d'écrire votre code pour mettre à jour textview dans la mise en œuvre de la méthode:
Et vous pouvez écrire le code ci-dessous pour commencer AsyncTask dans votre activité chaque fois que nécessaire, comme l'événement clic du bouton ou autre
Cela peut être le thindg vous voulez!
Je crois que dans la plupart des tutoriels, ils choisissent ce qui est plus facile à comprendre/lire, pas ce qui est réellement le meilleur.
Avec un intérieur de classe, vous gardez vos variables de l'Activité disponibles, qui peuvent être plus simples.
En général, vous devriez encapsuler autant que possible, votre AsyncTasks, de sorte que vous pouvez ré-utiliser à partir de n'importe quel point dans votre code.
Oui. Vous pouvez créer
AsyncTask class
dans votreMainActivity.java
.