[英]Android multithreading with event listeners
我在我的Android應用程序中我有UI線程(顯然)以及我用來做一些工作的其他一些線程。 在我的UI線程中有監聽器等待在其他線程中完成工作(讓我們稱之為workComplete
事件)。
我正面臨一個問題。 當我的偵聽器收到調用時,當前線程是工作線程,而不是UI線程。 因此,如果我嘗試做一些應該來自UI線程(修改視圖等)的東西,它會中斷或發出警告。
我的問題是:對此最好的方法是什么? 當工作人員完成它的工作並調用監聽器的workComplete
事件時,我想回到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()
方法。
從文檔:
void android.app.Activity.runOnUiThread(Runnable action)
在UI線程上運行指定的操作。 如果當前線程是UI線程,則立即執行該操作。 如果當前線程不是UI線程,則將操作發布到UI線程的事件隊列。
參數:action要在UI線程上運行的操作
所以在你的workComplete事件中:
runOnUiThread(new Runnable() {
public void run() {
// Do some cool UI stuff here ...
}
}
如果你在一個片段中,你可以調用getActivity().runOnUiThread(runnable)
。
根據我,你必須使用線程池Executor,甚至谷歌有示例代碼,將描述圖像提交到多個線程的一切如何提交任務下載和解碼完成和更新ui線程它是我學習的最好的例子,它的幫助我很多
https://developer.android.com/training/multiple-threads/create-threadpool.html
處理器
https://developer.android.com/training/multiple-threads/communicate-ui.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.