2011-12-01 14 views
5

Quiero ejecutar una asynctask después de terminar la primera tarea. Pero al imprimir el estado de la primera tarea, siempre muestra RUNNING. Si ejecuta ambas tareas en paralelo, solo se ejecutará una tarea más pequeña. Estoy ejecutando ambos en actividad en el método de creación. ¿Alguna idea?Asynctask estado que muestra siempre ejecutando

aquí es mi ejemplo de código

public class test extends Activity 
{ 

    ExecuteTask1 task1; 
    ExecuteTask2 task2; 
@Override 
public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

      task1 = new ExecuteTask1(); 
      task1.execute(token); 
      System.out.println(task1.getStatus()); 
      if(task1.getStatus() ==AsyncTask.Status.FINISHED) 
      { 
       task2 = new ExecuteTask2(); 
       task2.execute(token); 
      } 

    } 
} 

Respuesta

4

En su código en este momento, usted no está dando tiempo para terminar Task1. Inicie task2 desde el método onPostExecute de task1. (Tendrá que modificar el código en la clase ExecuteTask1 para que esto funcione.)

Como alternativa, haga que task1 vuelva a llamar a su actividad (o publique un mensaje o algo) en onPostExecute para que su actividad pueda iniciar task2 .

+0

Gracias Ted está funcionando bien. – Reji

+1

Puede estar ligeramente fuera de tema, pero ¿puede ser que getStatus() devuelva la ejecución si una AsyncTask se canceló antes de oO? Al menos eso es lo que estoy recibiendo en este momento, a pesar de haber cancelado mi AsyncTask (a menos que la misma tarea esté de alguna manera siendo revivida automáticamente xD). – AgentKnopf

+0

@Zainodis - 'AsyncTask.getStatus()' puede devolver 'RUNNING' después de que se haya llamado a' cancel() 'y devuelve' true'. La llamada a 'cancel()' puede, por ejemplo, invocar 'interrupt()' en el hilo subyacente o simplemente establecer el indicador 'isCancelled()' para 'AsyncTask', pero el estado del' AsyncTask' won ' t cambiar hasta que el hilo subyacente advierta la interrupción o cambie el valor del indicador y salga realmente. Es por eso que los documentos recomiendan que 'doInBackground()' compruebe periódicamente el valor de 'isCancelled()' y "finalice la tarea lo antes posible". –

1

Eso es debido a que obtiene el estado de task1 justo después de empezar a ella - es necesario llamar a la segunda AsyncTask del primero de onPostExecute(), utilizando handler o de alguna otra manera.

+0

Gracias Vladimir funciona bien – Reji

+2

Como onPostExecute se ejecuta en el hilo del evento, no es necesario utilizar un controlador. –

0

El método AsyncTask get está bloqueando. Luego también puede escribir task1.get() y luego task2.execute(). De modo que elimine la dependencia de la tarea1 con la tarea2 en la implementación AsyncTask

Cuestiones relacionadas