AsyncTask Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario.
[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
- Herencia
- Derivado
- Atributos
Comentarios
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. Sin embargo, el caso de uso más común era la integración en la interfaz de usuario y eso provocaría pérdidas de contexto, devoluciones de llamada perdidas o bloqueos en los cambios de configuración. También tiene un comportamiento incoherente en diferentes versiones de la plataforma, ingiere excepciones de doInBackgroundy no proporciona mucha utilidad sobre el uso Executordirecto de s.
AsyncTask está diseñado para ser una clase auxiliar en torno Thread a y Handler no constituye un marco de subproceso genérico. Idealmente, AsyncTasks debe usarse para operaciones cortas (unos segundos como máximo). Si necesita mantener los subprocesos en ejecución durante largos períodos de tiempo, se recomienda encarecidamente usar las distintas API proporcionadas por el java.util.concurrent paquete, como Executor, ThreadPoolExecutor y FutureTask.
Una tarea asincrónica se define mediante un cálculo que se ejecuta en un subproceso en segundo plano y cuyo resultado se publica en el subproceso de interfaz de usuario. Una tarea asincrónica se define mediante 3 tipos genéricos, denominados Params, Progress y Result4 pasos, denominados onPreExecute, doInBackgroundonProgressUpdate y onPostExecute.
<div class="special reference"><h3>Developer Guides</h3>
Para obtener más información sobre el uso de tareas y subprocesos, lea la guía para desarrolladores procesos y subprocesos .
</Div>
<h2>Usage</h2>
AsyncTask debe estar subclase para usarse. La subclase invalidará al menos un método (#doInBackground) y la mayoría de las veces invalidará una segunda (#onPostExecute.)
Este es un ejemplo de subclases:
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < 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");
}
}
Una vez creada, una tarea se ejecuta muy simplemente:
new DownloadFilesTask().execute(url1, url2, url3);
<Tipos genéricos> de h2<AsyncTask/h2>
Los tres tipos usados por una tarea asincrónica son los siguientes:
<ol><li>Params, el tipo de los parámetros enviados a la tarea tras la ejecución.</li li><>Progress, el tipo de las unidades de progreso publicadas durante el cálculo en segundo plano.</li li><>Result, el tipo del resultado del cálculo en segundo plano.</li></ol>
No todos los tipos siempre se usan en una tarea asincrónica. Para marcar un tipo como sin usar, simplemente use el tipo Void:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
<h2>Los 4 pasos</h2>
Cuando se ejecuta una tarea asincrónica, la tarea pasa por 4 pasos:
<ol><li>#onPreExecute(), invocado en el subproceso de interfaz de usuario antes de ejecutar la tarea. Este paso se usa normalmente para configurar la tarea, por ejemplo, mostrando una barra de progreso en la interfaz de usuario.</li><li>#doInBackground, invocado en el subproceso en segundo plano inmediatamente después #onPreExecute() de terminar de ejecutarse. Este paso se usa para realizar cálculos en segundo plano que pueden tardar mucho tiempo. Los parámetros de la tarea asincrónica se pasan a este paso. El resultado del cálculo debe devolverse en este paso y se volverá a pasar al último paso. Este paso también puede usar #publishProgress para publicar una o varias unidades de progreso. Estos valores se publican en el subproceso de la interfaz de usuario, en el #onProgressUpdate paso .</li><li>#onProgressUpdate, invocado en el subproceso de la interfaz de usuario después de una llamada a #publishProgress. El tiempo de ejecución no está definido. Este método se usa para mostrar cualquier forma de progreso en la interfaz de usuario mientras el cálculo en segundo plano todavía se está ejecutando. Por ejemplo, se puede usar para animar una barra de progreso o mostrar registros en un campo de texto.</li><li>#onPostExecute, invocado en el subproceso de la interfaz de usuario después de que finalice el cálculo en segundo plano. El resultado del cálculo en segundo plano se pasa a este paso como parámetro.</li></ol>
<h2>Cancelación de una tarea</h2>
Una tarea se puede cancelar en cualquier momento invocando #cancel(boolean). Invocar este método hará que las llamadas posteriores devuelvan #isCancelled() true. Después de invocar este método, #onCancelled(Object), en lugar de se invocará después #onPostExecute(Object) de #doInBackground(Object[]) las devoluciones. Para asegurarse de que una tarea se cancele lo antes posible, siempre debe comprobar el valor devuelto de periódicamente desde #isCancelled(), si es posible (dentro de #doInBackground(Object[]) un bucle para la instancia).
<h2>Reglas de subproceso</h2>
Hay algunas reglas de subproceso que deben seguirse para que esta clase funcione correctamente:
<ul><li>La clase AsyncTask debe cargarse en el subproceso de la interfaz de usuario. Esto se realiza automáticamente a partir de android.os.Build.VERSION_CODES#JELLY_BEAN.</li li><>La instancia de tarea debe crearse en el subproceso de la interfaz de usuario.</li><li>#execute debe invocarse en el subproceso de la interfaz de usuario.</li li><>No llame a #onPreExecute(), #onPostExecute, , #doInBackground#onProgressUpdatemanualmente.</li li><>La tarea solo se puede ejecutar una vez (se producirá una excepción si se intenta realizar una segunda ejecución).</li></ul>
<h2>Observabilidad de< memoria/h2>
AsyncTask garantiza que todas las llamadas de devolución de llamada se sincronizan para garantizar lo siguiente sin sincronizaciones explícitas.
<ul><li>Los efectos de memoria de y cualquier otra cosa ejecutada antes de #onPreExecutela llamada a #execute, incluida la construcción del objeto AsyncTask, son visibles para #doInBackground.
<li>Los efectos de memoria de #doInBackground son visibles para #onPostExecute.
<li>Todos los efectos de memoria de #doInBackground una llamada a #publishProgress son visibles para la llamada correspondiente #onProgressUpdate . (Pero #doInBackground sigue ejecutándose y debe tenerse cuidado de que las actualizaciones posteriores de #doInBackground no interfieran con una llamada en curso #onProgressUpdate ). <li>Los efectos de memoria anteriores a una llamada a #cancel son visibles después de una llamada a #isCancelled que devuelve true como resultado, o durante y después de una llamada resultante a #onCancelled.
</ul>
<h2>Orden de ejecución</h2>
Cuando se introdujo por primera vez, AsyncTasks se ejecutó en serie en un único subproceso en segundo plano.
android.os.Build.VERSION_CODES#DONUTA partir de , esto se cambió a un grupo de subprocesos que permite que varias tareas funcionen en paralelo. A partir de android.os.Build.VERSION_CODES#HONEYCOMB, las tareas se ejecutan en un único subproceso para evitar errores comunes de aplicación causados por la ejecución en paralelo.
Si realmente desea la ejecución en paralelo, puede invocar #executeOnExecutor(java.util.concurrent.Executor, Object[]) con #THREAD_POOL_EXECUTOR.
Este miembro está en desuso. En su lugar, use las java.util.concurrent estándar o Kotlin.
Java documentación para android.os.AsyncTask.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.
Constructores
| Nombre | Description |
|---|---|
| AsyncTask() |
Crea una nueva tarea asincrónica. |
| AsyncTask(IntPtr, JniHandleOwnership) |
Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo de ejecución. |
Propiedades
| Nombre | Description |
|---|---|
| Class |
Devuelve la clase en tiempo de ejecución de este |
| Handle |
Identificador de la instancia de Android subyacente. (Heredado de Object) |
| IsCancelled |
Devuelve |
| JniIdentityHashCode |
Obtiene el código hash de identidad asignado a este Java del mismo nivel por el tiempo de ejecución de interoperabilidad. (Heredado de Object) |
| JniManagedPeerState |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
| JniPeerMembers |
Proporciona metadatos de miembro del mismo nivel de JNI para este tipo. |
| PeerReference |
Obtiene la referencia de objeto JNI para este Java del mismo nivel. (Heredado de Object) |
| SerialExecutor |
que |
| ThreadPoolExecutor |
|
| ThresholdClass |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. |
| ThresholdType |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. |
Métodos
| Nombre | Description |
|---|---|
| Cancel(Boolean) |
Intenta cancelar la ejecución de esta tarea. |
| Clone() |
Crea y devuelve una copia de este objeto. (Heredado de Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
| Dispose() |
Libera los recursos mantenidos por este Java del mismo nivel. (Heredado de Object) |
| Dispose(Boolean) |
Libera los recursos mantenidos por este Java del mismo nivel. (Heredado de Object) |
| DisposeUnlessReferenced() |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
| DoInBackground(Object[]) |
Invalide este método para realizar un cálculo en un subproceso en segundo plano. |
| Equals(Object) |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
| Equals(Object) |
Indica si algún otro objeto es "igual a" este. (Heredado de Object) |
| Execute(IRunnable) |
Versión útil de |
| Execute(Object[]) |
Ejecuta la tarea con los parámetros especificados. |
| ExecuteOnExecutor(IExecutor, Object[]) |
Ejecuta la tarea con los parámetros especificados. |
| Get() |
Espera si es necesario para que se complete el cálculo y, a continuación, recupera su resultado. |
| Get(Int64, TimeUnit) |
Espera si es necesario para que el cálculo se complete como máximo y, a continuación, recupera su resultado. |
| GetAsync() |
Realiza de forma asincrónica la operación correspondiente. |
| GetAsync(Int64, TimeUnit) |
Realiza de forma asincrónica la operación correspondiente. |
| GetHashCode() |
Devuelve un valor de código hash para el objeto . (Heredado de Object) |
| GetStatus() |
Devuelve el estado actual de esta tarea. |
| JavaFinalize() |
Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto . (Heredado de Object) |
| Notify() |
Activa un único subproceso que está esperando en el monitor de este objeto. (Heredado de Object) |
| NotifyAll() |
Activa todos los subprocesos que están esperando en el monitor de este objeto. (Heredado de Object) |
| OnCancelled() |
Las aplicaciones deben invalidar |
| OnCancelled(Object) |
Se ejecuta en el subproceso de interfaz de usuario después |
| OnPostExecute(Object) |
Se ejecuta en el subproceso de interfaz de usuario después |
| OnPreExecute() |
Se ejecuta en el subproceso de la interfaz de usuario antes de |
| OnProgressUpdate(Object[]) |
Se ejecuta en el subproceso de interfaz de usuario después |
| PublishProgress(Object[]) |
Este método se puede invocar desde |
| SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
| ToArray<T>() |
Crea una matriz administrada a partir de este contenedor de matriz Java. (Heredado de Object) |
| ToString() |
Devuelve una representación de cadena del objeto . (Heredado de Object) |
| UnregisterFromRuntime() |
Anula el registro de este Java del mismo nivel del tiempo de ejecución de interoperabilidad. (Heredado de Object) |
| Wait() |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser em notificado/em< o >em<interrumpido>/em<.><> (Heredado de Object) |
| Wait(Int64, Int32) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
| Wait(Int64) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Implementaciones de interfaz explícitas
| Nombre | Description |
|---|---|
| IJavaPeerable.Disposed() |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
| IJavaPeerable.Finalized() |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. (Heredado de JavaObject) |
Métodos de extensión
| Nombre | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Obtiene el nombre JNI del tipo de la instancia |
| JavaAs<TResult>(IJavaPeerable) |
Intente coerción |
| JavaCast<TResult>(IJavaObject) |
Realiza una conversión de tipos comprobados en tiempo de ejecución de Android. |
| JavaCast<TResult>(IJavaObject) |
AsyncTask estaba pensado para habilitar el uso adecuado y sencillo del subproceso de la interfaz de usuario. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Intente coerción |