2013-10-02 46 views
0

假如我用以下AsycTask(稱爲一個)用於通過互聯網發送數據:的AsyncTask嵌套調用

private class A extends AsyncTask<Void, Void, Void>{ 
    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     pd = ProgressDialog.show(context, "Notification", "Sending message..."); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     sendMessage(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     if(pd!=null && pd.isShowing()) 
      pd.dismiss();   
    } 
} 

doInbackground內部被稱爲我的方法的sendMessage()。我不會詳細介紹這種方法,只是想象一下這種方法執行Thread(假定它被稱爲B)。

所以,問題是:

AsyncTaskonPostExecute()中的代碼的Thread結束後,將執行?

如果不是,那麼只有在sendMessage()中的AsyncTask將被終止時,如何才能使onPostExecute被執行?

回答

1

,你可以讓sendMessage()返回Thread對象,然後調用

Thread.join() 

這將導致doInBackground等到線程完成。

+0

你是對的,我只是sperimienting加入()方法,它適用於我。 – GVillani82

1

好吧,這很簡單。請撥打電話AsyncTaskBonPostExecuteAsyncTaskA

編輯:線程內部線程不可能從ICS開始。它不會給你任何錯誤,但它不會工作太多,你的應用程序將停留在那裏。

+0

明顯@Ravi,但我的理論問題是 – GVillani82

+0

,你可以發表一個鏈接或者一些思考。我想知道它的細節。提前致謝。 – guness

+0

@bluebrain我沒有鏈接,但如果你看看AsyncTask的工作風格,那麼你會得到答案很簡單。 –