2012-07-17 49 views
0

可能有人請告訴我有這種事情螺紋和AsynTask〜 之間的區別:機器人如何從其他線程等待結果與顯示progressdialog

class A{ 

    int nTmp; 
    ClassB BTmp = new ClassB(); 
    ClassC CTmp = new ClassC(); 

//I want to put the next two lines into a separate thread, because they will consume so much time 
//and I want to display a ProgressDialog when do this two lines 

    Method1(nTmp, BTmp); 
    CTmp = Method2(); 

    if(Method2(CTmp)){ 
     return true; 
    } 
    return false; 
} 

這裏是我的問題:

  1. 如果我使用新的線程,我不能將屬於類A的[nTmp]和[BTmp]傳遞給單獨的線程。
  2. 因爲我想使用這兩行的結果,所以當它必須顯示進度對話框時,我必須在UI線程中等待結果[CTmp]。
  3. 我試過AsynTask,但仍有問題2

我發現點對我來說如何從其他線程與顯示progressdialog等待結果。有一個班可以做那件事嗎?

+0

這裏是一個鏈接,說明你的明顯差異(個人最好的我見過)。 http://www.vogella.com/articles/AndroidPerformance/article.html – 2012-07-17 11:46:36

+0

我已經檢查過那篇文章。但是沒有關於如何等待另一個線索的介紹。 – AmyWuGo 2012-07-17 11:48:33

回答

0

你不應該等待其他任務B完成,而是任務B應該告訴任務A它完成。取決於你的方法的目的是什麼,你可以使用其他功能來開始後臺處理,比如IntentService。很可能AsyncTask會爲您提供最好的服務。

+0

謝謝。我無法用ProgressDialog等待UI線程? – AmyWuGo 2012-07-17 11:56:31

+0

因爲我不需要更新UI,所以我認爲AsyncTask對我來說不是最好的。 – AmyWuGo 2012-07-17 11:58:50

+0

不知道我是否正確理解你,但更新UI的全部訣竅是你不能在所有線程中完成此操作,而不是因爲使用AsyncTask而必須更新UI。如果我正確地理解了你,你需要同步這兩項任務,所以我還是會再說一遍:不要等待。讓其他任務通知你。只需重構代碼,後臺任務就可以通知它完成的主要任務(可以使用runnable,onPostExecute()或任何您想要的方式。 – 2012-07-17 16:04:29