6

cuando uso AsyncTasks comprobando en el DDMS, el hilo persiste en la memoria como hilo de espera después del método onPostExecute(), ¿es eso normal ?. Aquí es una actividad simplificada que reproduce mi problema:AsyncTask hilo todavía allí después de la ejecución, ¿es eso normal?

package com.example.async; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 

public class ASyncTaskExampleActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    new ExampleAsyncTask().execute(); 
} 


private class ExampleAsyncTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     for (int i =0; i<50000;i++){ 
      int j=i*2; 
     } 
     return null; 
    } 

    protected void onPostExecute(Void result) { 
     Log.d("Test","End onPostExecute"); 
    } 

} 

}

Respuesta

3

sip esto evita la sobrecarga de matar y reiniciar el hilo al momento de enviar la siguiente AsyncTask

si presenta otra AsyncTask después de la primero se completa, se reutilizará el mismo subproceso

7

AsyncTask utiliza la técnica de "agrupación de subprocesos". Cada AsyncTask que inicie entra en una cola; hay algunos subprocesos inactivos en el "grupo" (o se crean según sea necesario hasta cierto límite) esperando las tareas. Un hilo inactivo del grupo toma su AsyncTask y lo ejecuta, luego regresa al grupo. Luego, el proceso se repite hasta que no haya más tareas en la cola.

Este enfoque tiene 2 características importantes:

  1. ninguna sobrecarga para la creación de un hilo cada vez que
  2. en caso de enorme número de rendimiento del sistema tareas degrada gracia: la mayor parte de las tareas será esperar en la cola y solo algunos de ellos se ejecutarán a la vez ; eventualmente todos serán ejecutados. De lo contrario, si se inició un subproceso diferente para cada tarea, el sistema probablemente se quedaría sin memoria o subprocesos, o las tareas tomarán para siempre.

El subproceso que ve en DDMS después de terminar su AsyncTask es el subproceso inactivo en el grupo.

0

Ambas respuestas son correctas. Además de eso, el estado de tales subprocesos en el grupo será "esperar". Este fenómeno también se puede observar cuando se usan bibliotecas como Okhttp que usan el grupo de conexiones para operaciones de red.

Cuestiones relacionadas