2012-10-08 45 views
0

我想等到我的AsynTask完成後再繼續。 但狀態始終顯示爲RUNNINGAsyncTask信號如何返回已完成? 爲什麼我的while循環是無止境的?我認爲一旦在任務 上調用,狀態就會變爲FINISHED。如何從非活動類別獲得AsyncTask完成狀態

private void methodOne(Context context) { 

MyNewTask getMyTask = null; 

    try { 


     getMyTask = new MyNewTask(context, null, null, param1); 

     getMyTask.execute(getUrl()); 

     while(getResourceTask.getStatus().equals(AsyncTask.Status.RUNNING)){ 

      Log.i("log", "STATUS : " + getMyTask.getStatus()); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

回答

2

此方法是否在UI線程中執行?如果是這樣,將沒有機會被執行(UI線程被阻止)。

您通常不會等待通過循環完成AsyncTask。這是一種嚴重的代碼味道。 你應該開始在onPostExecute()中做任何你想做的事情。

所以,與其

task.execute(); 
while(task.getStatus().equals(AsyncTask.Status.RUNNING)) {}; 
doSomeWork(); 

你應該使用:

task.execute(); 

和:

void onPostExecute(Param... params) { 
    doSomeWork(); 
} 

doSomeWork()是在類中的方法調用AsyncTask。通過這種方式,您可以獲知任務已完成。

+0

感謝Tomasz,我的AsyncTask在它自己的一個單獨的類上......它不是子類。我怎樣才能讓它回到它已完成的調用類? – user1518485

+1

這與課程無關。它與線程有關。如果while循環在主線程上運行(不在另一個'AsyncTask'或'Thread'中),它會阻塞這個主線程。 'OnPostExecute'總是在這個主線程中調用,所以它也會被阻止運行。我已經發布了你應該如何解決這個問題 –

相關問題