我在我的Android應用程序我有UI線程(顯然),還有一些其他線程我用來做一些工作。在我的UI線程中有聽衆在等待工作在其他線程中完成(我們稱之爲workComplete
事件)。Android多線程與事件監聽器
我在那裏面臨一個問題。當我的監聽器接收到調用時,當前線程是工作線程,而不是UI線程。所以,如果我嘗試做一些應該來自UI線程的東西(修改視圖等),它會打破或給出警告。
我的問題是:這是最好的方法是什麼?當工作人員完成工作並調用監聽器的事件時,我想回到UI線程中。
謝謝!
我在我的Android應用程序我有UI線程(顯然),還有一些其他線程我用來做一些工作。在我的UI線程中有聽衆在等待工作在其他線程中完成(我們稱之爲workComplete
事件)。Android多線程與事件監聽器
我在那裏面臨一個問題。當我的監聽器接收到調用時,當前線程是工作線程,而不是UI線程。所以,如果我嘗試做一些應該來自UI線程的東西(修改視圖等),它會打破或給出警告。
我的問題是:這是最好的方法是什麼?當工作人員完成工作並調用監聽器的事件時,我想回到UI線程中。
謝謝!
的方法找回常用的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...
}
}
您可以在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)
。
根據我你必須使用線程池執行程序,甚至谷歌有示例代碼,它將描述如何提交圖像提交給多個線程如何提交任務時下載和解碼完成並更新UI線程的一切線程這是我最好的例子學習,它對我有很大的幫助。
https://developer.android.com/training/multiple-threads/create-threadpool.html
處理
https://developer.android.com/training/multiple-threads/communicate-ui.html
一個方法是使用處理器。您還可以使用易於使用的綠色機器人的EventBus。 https://github.com/greenrobot/EventBus – Raghunandan 2014-08-31 04:59:59