我阅读了有关Handler的Android SDK API。 “处理程序有两个主要用途:(1)将消息和可运行程序安排在将来的某个点上执行;以及(2)将要在不同于自己的线程上执行的操作排入队列。”
我知道第一点的含义。 但第二点的含义是什么?你能举个例子吗? 非常感谢!
答案 0 :(得分:2)
一个很好的例子是使用在后台运行的线程来执行一个长任务,因此,如果要修改View,在执行结束时,你不能从工作线程执行,在这种情况下一个处理程序可以帮助你解决这个问题,处理程序默认附加到创建它们的Thread-Loop,所以如果你确保你的处理程序是在主线程中创建的,那么你可以从工作线程发送消息到处理程序,它将在主线程中处理,让你有机会修改视图,AsyncTask实际上是线程和处理程序的组合,所以很好地理解它们可以成为一个强大的工具,作为开发人员利用你的背景/主线程同步...
希望它有所帮助!
问候!
答案 1 :(得分:1)
runOnUiThread()
使用Handler
实施。如果当前线程不是UI线程,则Runnable
将发布到UI线程的Handler
,并在处理UI线程的消息队列时执行。
答案 2 :(得分:0)
您可以使用它以安全的方式在线程之间发送消息。它不仅在GUI线程和工作线程之间,而且在两个工作线程之间。许多操作系统实现这种机制,即。 Windows有它的消息系统。
使用此功能的一个示例是,当您有生产者线程将作业发送到某个消费者线程进行处理时,但是消费者线程一次只能处理一个作业,处理程序允许将作业放入队列。
答案 3 :(得分:0)
这可能会有所帮助:您希望从网站下载图像 - 使用处理程序处理下载,同时用户看到微调器并仍然可以在页面上阅读文本。或者,如果您想转换图像(例如将照片调整为MMS发送),调整大小过程可能需要一段时间,因此您的用户可以在处理器处理后台图像大小调整时在UI上输入消息文本。
处理程序将仅使用可用的CPU周期,因此UI线程可以是处理器“hog”,并且设备仍然响应用户。在多处理器设备上,由于Android架构,这仍然是一个问题。