2011-12-01 31 views
5

我想在完成第一個任務後執行一個asynctask。但是,在打印第一個任務的狀態時,它總是顯示RUNNING。如果執行兩個任務並行,則只執行較小的任務。我正在運行創建方法。任何想法?Asynctask狀態總是顯示正在運行

這裏是我的代碼示例

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

    } 
} 

回答

4

在你的代碼,現在,你是不是給TASK1的時間來完成。從task1的onPostExecute方法啓動task2。 (您必須修改ExecuteTask1類中的代碼才能使其運行。)

或者,讓task1回撥到您的活動(或發佈消息給它或某物)onPostExecute,以便您的活動可以啓動task2 。

+0

感謝泰德它的工作正常。 – Reji

+1

可能會有點偏離主題,但它可以是getStatus()返回運行,如果一個AsyncTask之前已被取消?至少這就是我現在得到的,儘管已經取消了我的AsyncTask(除非相同的任務以某種方式被自動恢復xD)。 – AgentKnopf

+0

@Zainodis - ''asyncTask.getStatus()''確實可以在'cancel()'被調用後返回'RUNNING',並返回'true'。例如,調用'cancel()'可以在底層線程上調用'interrupt()',或者簡單地設置'AsyncTask'的isCancelled()標誌,但是'AsyncTask'的狀態會贏得'直到底層線程發現中斷或標誌值發生變化並且實際退出。這就是爲什麼文檔建議'doInBackground()'應該定期檢查isCancelled()的值和「儘早完成任務」。 –

1

這是因爲您在啓動它後立即得到task1的狀態 - 您需要從第一個onPostExecute()調用第二個AsyncTask,使用handler或其他方式。

+0

感謝弗拉基米爾正常工作 – Reji

+2

因爲onPostExecute在事件線程上運行,所以不需要使用處理程序。 –

0

AsyncTask get方法被阻塞。 然後你也可以寫task1.get()然後task2.execute()。這樣,你刪除了任務1與AsyncTask實施中的task2的依賴關係

相關問題