2011-12-01 16 views
5

Voglio eseguire un asynctask dopo aver terminato la prima attività. Ma quando si stampa lo stato della prima attività, viene sempre visualizzato RUNNING. Se si eseguono entrambe le attività parallelamente, verrà eseguita solo un'attività più piccola. Sto eseguendo entrambe le attività sul metodo oncreate. Qualche idea?Stato asynctask sempre in esecuzione

Ecco il mio codice di esempio

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); 
      } 

    } 
} 

risposta

4

Nel codice in questo momento, non stanno dando il tempo task1 per terminare. Avviare task2 dal metodo onPostExecute di task1. (Dovrai modificare il codice nella classe ExecuteTask1 perché funzioni.)

In alternativa, devi richiamare l'attività1 alla tua attività (o inviare un messaggio ad esso o qualcosa del genere) in onPostExecute in modo che l'attività possa quindi avviare task2 .

+0

Grazie a Ted la sua funzione di lavoro. – Reji

+1

Potrebbe essere leggermente fuori tema ma può essere che getStatus() restituisca Running se un AsyncTask è stato cancellato prima di oO? Almeno questo è quello che sto ottenendo in questo momento, nonostante abbia cancellato il mio AsyncTask (a meno che lo stesso compito non sia in qualche modo auto-ripristinato xD). – AgentKnopf

+0

@Zainodis - 'AsyncTask.getStatus()' può effettivamente restituire 'RUNNING' dopo che' cancel() 'è stato chiamato e restituisce' true'. La chiamata a 'cancel()' può, per esempio, chiamare 'interrupt()' sul thread sottostante o semplicemente impostare il flag 'isCancelled()' per 'AsyncTask', ma lo stato di' AsyncTask' ha vinto ' t cambiare fino a quando il thread sottostante rileva l'interrupt o modifica il valore del flag e in realtà esce. Ecco perché i documenti raccomandano che 'doInBackground()' controlli periodicamente il valore di 'isCancelled()' e "finisca l'attività il prima possibile". –

1

Ecco perché si ottiene lo status di task1 subito dopo si avvia - è necessario chiamare secondo AsyncTask dal primo di onPostExecute(), utilizzando handler o qualche altro modo.

+0

Grazie a Vladimir che funziona bene – Reji

+2

Poiché onPostExecute viene eseguito sul thread dell'evento, non è necessario utilizzare un gestore. –

0

Il metodo Get AsyncTask sta bloccando. Quindi è anche possibile scrivere task1.get() e quindi task2.execute(). In tal modo, si rimuove la dipendenza dell'attività1 con l'attività2 nell'implementazione AsyncTask

Problemi correlati