Langue

AsyncTask Classe

Définition

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

[Android.Runtime.Register("android/os/AsyncTask", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "Params", "Progress", "Result" })]
public abstract class AsyncTask : Java.Lang.Object
[<Android.Runtime.Register("android/os/AsyncTask", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "Params", "Progress", "Result" })>]
type AsyncTask = class
    inherit Object
Héritage
Dérivé
Attributs

Remarques

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur. Toutefois, le cas d’usage le plus courant était l’intégration dans l’interface utilisateur et cela entraînerait des fuites de contexte, des rappels manqués ou des blocages sur les modifications de configuration. Il a également un comportement incohérent sur différentes versions de la plateforme, avale les exceptions de doInBackground, et ne fournit pas beaucoup d’utilitaire sur l’utilisation Executordirecte de s.

AsyncTask est conçu pour être une classe d’assistance autour Thread et Handler ne constitue pas une infrastructure de threading générique. AsyncTasks doit idéalement être utilisé pour les opérations courtes (quelques secondes au maximum).) Si vous devez conserver les threads en cours d’exécution pendant de longues périodes, il est vivement recommandé d’utiliser les différentes API fournies par le java.util.concurrent package, par Executorexemple , ThreadPoolExecutor et FutureTask.

Une tâche asynchrone est définie par un calcul qui s’exécute sur un thread d’arrière-plan et dont le résultat est publié sur le thread d’interface utilisateur. Une tâche asynchrone est définie par 3 types génériques, appelés Params, et Progress4 étapes, appelées Result, onPreExecutedoInBackground et onProgressUpdate. onPostExecute

<div class="special reference"><h3>Developer Guides</h3>

Pour plus d’informations sur l’utilisation des tâches et des threads, consultez le guide des processus et des threads pour les développeurs.

<Commande /div>

<Utilisation> h2</h2>

AsyncTask doit être sous-classé pour être utilisé. La sous-classe remplacera au moins une méthode (#doInBackground), et la plupart du temps remplacera une seconde (#onPostExecute.)

Voici un exemple de sous-classe :

private class DownloadFilesTask extends AsyncTask&lt;URL, Integer, Long&gt; {
                protected Long doInBackground(URL... urls) {
                    int count = urls.length;
                    long totalSize = 0;
                    for (int i = 0; i &lt; count; i++) {
                        totalSize += Downloader.downloadFile(urls[i]);
                        publishProgress((int) ((i / (float) count) * 100));
                        // Escape early if cancel() is called
                        if (isCancelled()) break;
                    }
                    return totalSize;
                }

                protected void onProgressUpdate(Integer... progress) {
                    setProgressPercent(progress[0]);
                }

                protected void onPostExecute(Long result) {
                    showDialog("Downloaded " + result + " bytes");
                }
            }

Une fois créée, une tâche est exécutée très simplement :

new DownloadFilesTask().execute(url1, url2, url3);

<Types> génériques d’AsyncTask h2<>

Les trois types utilisés par une tâche asynchrone sont les suivants :

<ol><li>Params, le type des paramètres envoyés à la tâche lors de l’exécution.</li li><>Progress, le type des unités de progression publiées pendant le calcul en arrière-plan.</li li><>Result, le type du résultat du calcul en arrière-plan.</li></ol>

Tous les types ne sont pas toujours utilisés par une tâche asynchrone. Pour marquer un type comme inutilisé, utilisez simplement le type Void:

private class MyTask extends AsyncTask&lt;Void, Void, Void&gt; { ... }

<h2>Les 4 étapes</h2>

Lorsqu’une tâche asynchrone est exécutée, la tâche passe par 4 étapes :

<ol><li>#onPreExecute(), appelé sur le thread d’interface utilisateur avant l’exécution de la tâche. Cette étape est normalement utilisée pour configurer la tâche, par exemple en affichant une barre de progression dans l’interface utilisateur.</li li><>#doInBackground, appelé sur le thread d’arrière-plan immédiatement après #onPreExecute() l’exécution. Cette étape est utilisée pour effectuer un calcul en arrière-plan qui peut prendre beaucoup de temps. Les paramètres de la tâche asynchrone sont passés à cette étape. Le résultat du calcul doit être retourné par cette étape et sera repassé à la dernière étape. Cette étape peut également être utilisée #publishProgress pour publier une ou plusieurs unités de progression. Ces valeurs sont publiées sur le thread d’interface utilisateur, à l’étape#onProgressUpdate.</li li><>#onProgressUpdate, appelé sur le thread d’interface utilisateur après un appel à .#publishProgress Le minutage de l’exécution n’est pas défini. Cette méthode est utilisée pour afficher toute forme de progression dans l’interface utilisateur pendant que le calcul en arrière-plan est toujours en cours d’exécution. Par exemple, il peut être utilisé pour animer une barre de progression ou afficher les journaux d’activité dans un champ de texte.</li li><>#onPostExecute, appelé sur le thread d’interface utilisateur une fois le calcul en arrière-plan terminé. Le résultat du calcul en arrière-plan est passé à cette étape en tant que paramètre.</li></ol>

<h2>Annulation d’une tâche</h2>

Une tâche peut être annulée à tout moment en appelant #cancel(boolean). L’appel de cette méthode entraîne le #isCancelled() retour de true par les appels suivants. Après l’appel de cette méthode, #onCancelled(Object)au lieu d’être #onPostExecute(Object) appelé après #doInBackground(Object[]) retour. Pour vous assurer qu’une tâche est annulée le plus rapidement possible, vous devez toujours vérifier la valeur de retour à partir #isCancelled()de #doInBackground(Object[]) , si possible (à l’intérieur d’une boucle par exemple).)

<Règles> de thread h2</h2>

Il existe quelques règles de thread qui doivent être suivies pour que cette classe fonctionne correctement :

<ul><li>La classe AsyncTask doit être chargée sur le thread d’interface utilisateur. Cette opération est effectuée automatiquement à partir de android.os.Build.VERSION_CODES#JELLY_BEAN.</li li><>L’instance de tâche doit être créée sur le thread d’interface utilisateur.</li li><>#execute doit être appelé sur le thread d’interface utilisateur.</li li><>Ne pas appeler #onPreExecute(), #onPostExecute, #doInBackground, #onProgressUpdate manuellement.</li li><>La tâche ne peut être exécutée qu’une seule fois (une exception est levée si une deuxième exécution est tentée.)</li></ul>

<observabilité> de la mémoire h2</h2>

AsyncTask garantit que tous les appels de rappel sont synchronisés pour garantir les opérations suivantes sans synchronisations explicites.

<ul><li>Les effets de mémoire de #onPreExecute, et tout autre chose exécuté avant l’appel à #execute, y compris la construction de l’objet AsyncTask, sont visibles par #doInBackground. <li>Les effets de la mémoire de #doInBackground sont visibles par #onPostExecute. <li>Tous les effets de #doInBackground la mémoire précédant un appel sont #publishProgress visibles par l’appel correspondant #onProgressUpdate . (Mais #doInBackground continue à s’exécuter, et vous devez prendre soin que les mises à jour ultérieures dans #doInBackground n’interfèrent pas avec un appel en cours #onProgressUpdate .) <Li>Tous les effets de mémoire précédant un appel #cancel sont visibles après un appel à #isCancelled qui retourne true en conséquence, ou pendant et après un appel obtenu à #onCancelled. </ul>

<h2>Ordre d’exécution</h2>

Lors de la première introduction, les AsyncTasks ont été exécutés en série sur un thread d’arrière-plan unique. À compter de android.os.Build.VERSION_CODES#DONUT, cela a été remplacé par un pool de threads permettant à plusieurs tâches de fonctionner en parallèle. À compter de android.os.Build.VERSION_CODES#HONEYCOMB, les tâches sont exécutées sur un thread unique pour éviter les erreurs courantes d’application provoquées par l’exécution parallèle.

Si vous souhaitez vraiment l’exécution parallèle, vous pouvez appeler #executeOnExecutor(java.util.concurrent.Executor, Object[]) avec #THREAD_POOL_EXECUTOR.

Ce membre est déconseillé. Utilisez plutôt les utilitaires de concurrence Standard java.util.concurrent ou Kotlin .

Java documentation pour android.os.AsyncTask.

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

Constructeurs

Nom Description
AsyncTask()

Crée une tâche asynchrone.

AsyncTask(IntPtr, JniHandleOwnership)

Constructeur utilisé lors de la création de représentations managées d’objets JNI ; appelée par le runtime.

Propriétés

Nom Description
Class

Retourne la classe runtime de ce Object.

(Hérité de Object)
Handle

Handle de l’instance Android sous-jacente.

(Hérité de Object)
IsCancelled

Retourne true si cette tâche a été annulée avant qu’elle ne soit terminée normalement.

JniIdentityHashCode

Obtient le code de hachage d’identité affecté à cet homologue Java par le runtime d’interopérabilité.

(Hérité de Object)
JniManagedPeerState

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)
JniPeerMembers

Fournit des métadonnées de membre homologue JNI pour ce type.

PeerReference

Obtient la référence d’objet JNI pour cet homologue Java.

(Hérité de Object)
SerialExecutor

Qui Executor exécute des tâches une par une fois dans l’ordre série.

ThreadPoolExecutor

Qui Executor peut être utilisé pour exécuter des tâches en parallèle.

ThresholdClass

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

ThresholdType

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

Méthodes

Nom Description
Cancel(Boolean)

Tente d’annuler l’exécution de cette tâche.

Clone()

Crée et retourne une copie de cet objet.

(Hérité de Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)
Dispose()

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
Dispose(Boolean)

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
DisposeUnlessReferenced()

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)
DoInBackground(Object[])

Remplacez cette méthode pour effectuer un calcul sur un thread d’arrière-plan.

Equals(Object)

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)
Equals(Object)

Indique si un autre objet est « égal à » celui-ci.

(Hérité de Object)
Execute(IRunnable)

Version pratique de l’utilisation #execute(Object...) avec un objet Runnable simple.

Execute(Object[])

Exécute la tâche avec les paramètres spécifiés.

ExecuteOnExecutor(IExecutor, Object[])

Exécute la tâche avec les paramètres spécifiés.

Get()

Attend si nécessaire que le calcul se termine, puis récupère son résultat.

Get(Int64, TimeUnit)

Attend si nécessaire pour que le calcul se termine au maximum, puis récupère son résultat.

GetAsync()

Effectue de façon asynchrone l’opération correspondante.

GetAsync(Int64, TimeUnit)

Effectue de façon asynchrone l’opération correspondante.

GetHashCode()

Retourne une valeur de code de hachage pour l’objet.

(Hérité de Object)
GetStatus()

Retourne l’état actuel de cette tâche.

JavaFinalize()
Obsolète.

Appelé par le garbage collector sur un objet lorsque le garbage collection détermine qu’il n’y a plus de références à l’objet.

(Hérité de Object)
Notify()

Réveille un thread unique qui attend le moniteur de cet objet.

(Hérité de Object)
NotifyAll()

Réveille tous les threads qui attendent le moniteur de cet objet.

(Hérité de Object)
OnCancelled()

Les applications doivent de préférence remplacer #onCancelled(Object).

OnCancelled(Object)

S’exécute sur le thread d’interface utilisateur une fois #cancel(boolean) appelé et #doInBackground(Object[]) terminé.

OnPostExecute(Object)

S’exécute sur le thread d’interface utilisateur après #doInBackground.

OnPreExecute()

S’exécute sur le thread d’interface utilisateur avant #doInBackground.

OnProgressUpdate(Object[])

S’exécute sur le thread d’interface utilisateur après #publishProgress l’appel.

PublishProgress(Object[])

Cette méthode peut être appelée pour #doInBackground publier des mises à jour sur le thread d’interface utilisateur pendant que le calcul en arrière-plan est toujours en cours d’exécution.

SetHandle(IntPtr, JniHandleOwnership)

Définit la propriété Handle.

(Hérité de Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)
ToArray<T>()

Crée un tableau managé à partir de ce wrapper de tableau Java.

(Hérité de Object)
ToString()

Retourne une représentation sous forme de chaîne de l’objet.

(Hérité de Object)
UnregisterFromRuntime()

Annule l’inscription de cet homologue Java à partir du runtime d’interopérabilité.

(Hérité de Object)
Wait()

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti par em ou><em>interrompu</em>.<>

(Hérité de Object)
Wait(Int64, Int32)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)
Wait(Int64)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)

Implémentations d’interfaces explicites

Nom Description
IJavaPeerable.Disposed()

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)
IJavaPeerable.Finalized()

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

(Hérité de JavaObject)

Méthodes d’extension

Nom Description
GetJniTypeName(IJavaPeerable)

Obtient le nom JNI du type de l’instance self.

JavaAs<TResult>(IJavaPeerable)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

JavaCast<TResult>(IJavaObject)

Effectue une conversion de type vérifiée par le runtime Android.

JavaCast<TResult>(IJavaObject)

AsyncTask a été conçu pour permettre une utilisation appropriée et facile du thread d’interface utilisateur.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

S’applique à