2009-12-03 28 views

回答

22

Activity.runOnUiThread,就像它的名字所暗示的那样,将在当前负责UI的线程中执行Runnable。因此,如果您有一项CPU密集型任务,可能会导致界面在短时间内无响应。相反,Handler为您提供了创建线程,运行一些代码并在完成时通知UI的方式(即Handler.sendMessage)。

的处理程序状态的文档这比我好的人:

当您 应用程序创建一个进程,它的主线程 专用于运行消息队列 这需要管理 的护理顶级应用程序对象 (活动,广播接收器等) 以及它们创建的任何窗口。您可以使用 创建您自己的线程,并且 通过Handler与主要的 应用程序线程进行通信。 这是通过调用与之前相同的帖子 或sendMessage方法完成的,但是从新线程调用 。给定的 可运行或消息将在排队处理程序的消息 队列中调度,并在适当的时候处理为 。

0

Activity.runOnUiThread()是更通用的处理程序的特例。通过Handler,您可以在自己的线程中创建自己的事件查询。使用默认构造函数实例化的Handlers并不意味着“代码将在UI线程上运行”。默认情况下,处理程序绑定到从中实例化的Thread。 要创建保证绑定到UI(主)处理器线程,你应该创建Handlerobject绑定到主尺蠖是这样的:

Handler mHandler = new Handler(Looper.getMainLooper()); 

而且,如果你检查runOnuiThread()方法的实现,它是使用处理器做东西:

public final void runOnUiThread(Runnable action) { 
     if (Thread.currentThread() != mUiThread) { 
      mHandler.post(action); 
     } else { 
      action.run(); 
     } 
    } 

正如你可以从上面的代码片段看,Runnable的动作将被立即执行,如果runOnUiThread()从UI线程调用。否则,它会将其发布到处理程序,稍后将在稍后执行。

相关问题