2012-04-15 68 views
0

我有2個問題在android開發和線程方面Android和線程

1)你認爲我應該在android開發中使用線程? 2)如果我有主UI線程等待某個變量被設置,然後它顯示一個吐司,那麼我想在sperate線程中有一個while(true)循環來檢查這個變量。現在,如果變量設置,我該怎麼稱呼的第一個線程(UI線程),將顯示舉杯

的方法,太感謝你了

回答

2

使用線程並不能直接使用在大多數情況下必要的。用於線程編程的android工具非常棒,易於使用。

您有關於三個選項從另一個線程中調用UI線程:

  • Handler - 設置從UI線程另一個線程上的處理程序,並在需要時將其發送的消息。
  • AsyncTask - 在後臺執行主任務,但在完成之前,期間和之後修改UI。
  • PerformOnUiThread - 使用可運行的方法調用此方法以修改UI線程上的UI。

要閱讀的好文章是Painless Threading

+0

謝謝你的回答言簡意賅 – Snake 2012-04-15 05:23:38

+0

但是可以threasds份額變量我想在UI線程從處理線程 – Snake 2012-04-15 05:32:24

+0

你可以分享服用它的值變量和值與我的答案中的三種方法中的每一種。 – MByD 2012-04-15 05:52:07

1

永遠不會有連續運行的while(true)循環。它會燒燬大量的資源,在你的情況下,完成很少。

線程適合(主要)後臺任務和資源密集型任務運行(以免阻塞UI線程)。要創建一個新線程,請使用以下內容:

new Thread(new Runnable(){ 
    public void run(){ 
     //do stuff here. 
     } 
    } 
).start(); 

您還可以查看Android AsyncTask以避免直接使用線程。

+0

感謝您的回答+ 1 – Snake 2012-04-15 05:28:28

1

根據您正在使用的應用程序類型,正確使用Theads可能是創建快速響應用戶界面的關鍵。

主要規則:
如果您需要到任何訪問,需要比簡單的值或狀態檢查的更多的文件系統,網絡,圖像加載,或任何東西,立即啓動,並在一個線程執行這一努力。如這裏已經指出,一些選項可供選擇,雖然我自己我通常使用:

change_UI_if_needed_to_indicate_click_response(); 
new Thread(new Runnable(){ 
    do stuff here ; 
}).start() 

您也可以使用標準像這樣的(非內聯)線程對象。

這可能是不好的做法,我不知道。無論如何,它適用於我,並不是真正的問題。

如果你想運行的,而不是專門的Android對象,特別允許這樣的事情用標準的Java UI線程上的東西,有連接到每一個觀點後(Runnable接口)方法。對我而言,這是將代碼返回到UI線程的最簡單方法。

myView.post(new Runnable{ 
    codeForUI(); 
}); 

我的一般規則是試圖永遠不會在UI線程上運行任何不需要在那裏的東西。希望有所幫助。

+0

您有一個非常好的點+1 – Snake 2012-04-15 05:29:08