Pourquoi AsyncTask s'exécute-t-il dans le thread principal d'une application?
dans mon application, j'ai une classe pour les trucs de l'INTERFACE utilisateur, le nom de ce qui est "SettingActivity".
Alors pour faire quelques travaux dans le fond, je la lie cette INTERFACE utilisateur de la classe(SettingActivity) à un Service.
Il existe deux méthodes prédéfinies dans ce Service(défini .aidl fichier), on est startTask(), l'autre est stopTask().
Dans startTask(), j'ai fait un appel à un AsyncTask. Mais quand j'ai vérifié le nom de l'Arpenteuse de cette AsyncTask. Il est "main". À mon avis, une AsyncTask devrait commencer un autre Thread autre que le Thread principal.
N'a donc quelqu'un sait pourquoi cela se produit?
Les codes sont comme suit:
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.d(TAG, "onPreExecute "+Looper.myLooper().getThread().getName());
}
Alors j'aurai principal de la sortie.
source d'informationauteur Mathieu
Vous devez vous connecter pour publier un commentaire.
Une AsyncTask a plusieurs parties: une
doInBackground
méthode qui n'est, en fait, exécuté sur un thread séparé, et uneonPostExecute
méthode qui s'exécute sur le thread de l'INTERFACE utilisateur. Le but deonPostExecute
est de publier les résultats (comme la mise à jour de la vue de la hiérarchie, ou de la mise en texte en mode texte) qui doit être faite sur le thread d'INTERFACE utilisateur. Il peut aussi poster des progrès mises à jour. Pour cela, tout fonctionne correctement, l'AsyncTask doit être créé, et laexecute
méthode appelée, sur le thread d'INTERFACE utilisateur.Vous ne devez pas appeler de l'INTERFACE utilisateur les actions à partir de
doInBackground
-- cela permettra de planter votre application.En fait, j'ai vérifié la doc d'android,
onPreExecute(), onProgressUpdate(le Progrès...) et onPostExecute(Suite) sont tous "invoquée sur le thread d'INTERFACE utilisateur".
Seulement la doInBackground(Params...) méthode est "appelée par le thread d'arrière-plan".