繁体   English   中英

带有事件监听器的Android多线程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM