2012-08-15 151 views
0

我正在UI線程中執行一些任務,並創建了一個爲我執行網絡任務的工作線程。不過,一旦工作線程完成,我需要執行一些重要的事情。任何人都可以給我一個解決方案嗎?Android ::在主線程中執行其他任務之前阻止主線程完成主線程

{ 
    Main thread... 
    worker thread created..and executed.. 
    //I need to wait here for the worker thread to finish// 
    some useful task to be done 
} 

在此先感謝!

回答

3

你需要在工作完成後在UI線程上做些什麼?在工人末端使用runOnUiThread或使用AsyncTaskonPostExecute()。在工作人員運行時阻塞UI線程沒有任何意義。

+0

感謝哥們!我瞭解你提到的方法。但是,如果我有多個工作線程,我將如何處理?我的意思是我有3個工作線程,比如A,B,C,它們正在執行不同的任務。我的主線程需要等待所有這些線程完成,以便它可以繼續並在主線程中執行新的任務T.請建議。 – user1601533 2012-08-15 19:56:06

+0

@ user1601533:讓三個後臺線程阻塞某些內容(例如'CountDownLatch')。一旦閂鎖被釋放,三個線程中的兩個只是終止,而第三個使用'runOnUiThread()'或等價的方式將工作發佈到主應用程序線程。 – CommonsWare 2012-08-15 20:00:32

+0

是的。或者讓主線程在完成每個工作人員後更新某個狀態變量,並在某個狀態下啓動另一個任務。 – ekholm 2012-08-15 20:04:18

0

你不知道。阻止UI線程違反了Android中線程的關鍵規則。 這樣做會導致那些煩人的「應用程序未響應」對話框以及其他問題。

Processes and Threads頁面開發文檔的:

所以,你不能操縱從一個工人的UI線程,你必須做的所有操作,以從UI線程的用戶界面。因此,有簡單的兩個規則Android的單線程模型:

不要阻塞UI線程

不要從UI線程外部訪問Android的UI工具包

您應該探索其他解決方案到你需要完成的事情。您無需針對您的問題提供具體信息,但ekholm的解決方案可以工作,就像只需在工作線程中調用Activity中的方法一樣。

相關問題