在android中使用Activity.runOnUiThread
或Handler.post(runnable action)
有什么区别/优点/缺点?Activity.runOnUiThread(runnable action)和Handler.post()之间有什么区别?
29
A
回答
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线程调用。否则,它会将其发布到处理程序,稍后将在稍后执行。
相关问题
- 1. AsyncTask vs Activity.runOnUiThread()vs Handler.post()
- 2. form action =“”和form action =“。”有什么区别?
- 3. Runnable和Future在Scala之间有什么区别?
- 4. Android中的Thread.run()和Handler.post()和Service有什么区别?
- 5. AsyncTask和Thread/Runnable之间的区别
- 6. 新的Action()和lambda有什么区别?
- 7. “层”和“层”之间有什么区别?
- 8. Tableau和QlikView之间有什么区别
- 9. Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async之间有什么区别?
- 10. @Entity和@embeddable之间有什么区别
- 11. ContentObservable和DataSetObservable之间有什么区别?
- 12. touchmove和gesturechange之间有什么区别?
- 13. :notification.flags和notification.defaults之间有什么区别?
- 14. proc和lambda之间有什么区别?
- 15. :: after和after之间有什么区别?
- 16. read()和io.read()之间有什么区别?
- 17. Request()和Request.Form()之间有什么区别?
- 18. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之间有什么区别?
- 19. getA()和this.getA()之间有什么区别?
- 20. (int)和intval()之间有什么区别?
- 21. set_value和= pandas之间有什么区别
- 22. * zoom和zoom之间有什么区别?
- 23. {0}和“”之间有什么区别?
- 24. typedef和using之间有什么区别?
- 25. “”和“'之间有什么区别?
- 26. STDIN和tty之间有什么区别?
- 27. +和%之间有什么区别?
- 28. sysfs_create_file()和sysfs_create_group()之间有什么区别?
- 29. Lazy.Force()和Lazy.Value之间有什么区别
- 30. -existingObjectWithID:error:和-objectWithID之间有什么区别?
类似的问题: [Handler.post(Runnable r)和Activity.runOnUiThread(Runnable r)之间的区别](http://stackoverflow.com/questions/7452884/difference-between-handler-postrunnable-r-and -activity-runonuithreadrunnable) – 2012-06-27 14:37:36