2014-08-31 132 views
3

我在我的Android應用程序我有UI線程(顯然),還有一些其他線程我用來做一些工作。在我的UI線程中有聽衆在等待工作在其他線程中完成(我們稱之爲workComplete事件)。Android多線程與事件監聽器

我在那裏面臨一個問題。當我的監聽器接收到調用時,當前線程是工作線程,而不是UI線程。所以,如果我嘗試做一些應該來自UI線程的東西(修改視圖等),它會打破或給出警告。

我的問題是:這是最好的方法是什麼?當工作人員完成工作並調用監聽器的事件時,我想回到UI線程中。

謝謝!

+1

一個方法是使用處理器。您還可以使用易於使用的綠色機器人的EventBus。 https://github.com/greenrobot/EventBus – Raghunandan 2014-08-31 04:59:59

回答

2

的方法找回常用的UI線程上是使用最開始的UI線程上創建的Handler發佈:

//create thread on UI Thread (associates with Looper) 
Handler handler = new Handler(); 

//then use it in a background thread 
handler.post(new Runnable(){ 
    public void run(){ 
     //back on UI thread... 
    } 
} 
1

您可以在Activity類使用runOnUiThread()方法。

從文檔:

空隙android.app.Activity.runOnUiThread(可運行動作)

運行在UI線程上的指定的操作。如果當前線程是 的UI線程,那麼該動作立即執行。如果當前 線程不是UI線程,則該操作將被髮布到UI線程的事件隊列 中。

參數:行動行動,在UI線程上

所以在你workComplete事件中運行:

runOnUiThread(new Runnable() { 
    public void run() { 
     // Do some cool UI stuff here ... 
    } 
} 

如果你是一個片段裏,你可以調用getActivity().runOnUiThread(runnable)