关于handler.post()的一点疑问

qq_25154819 2016-07-31 11:43:59
我们要WorkerThread处理一些耗时时间长的操作,在handler.post()这个方法中,既然把runnable对象run()方法中的代码又扔回去给MainThread处理了,那为何不直接写在MainThread里面算了?
...全文
224 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gexuehai1991 2016-08-02
  • 打赏
  • 举报
回复
二楼说得有道理
LoveWyf_ 2016-08-02
  • 打赏
  • 举报
回复
handler.post()会把当前Message放到消息队列的最后,所以你在view.post()中可以获得view的宽高,直接在你所说的mainThread去获取宽高是获取不到的。不调用handler.post()可能会因为一些并发问题导致某些方法失效。最常见的例子便是listView.setSelection()方法,有时这个方法会失效,是因为在调用这个方法的时候主线程可能在做一些其他事情,导致这个方法出现问题,而在handler.post()中调用这个方法,让他添加到消息队列的最后执行,这样就避免了一些冲突。同时,handler.post()和handlerMessage其实都是被handler的dispatchMessage()方法调用,本质是差不多的。
xjz729827161 2016-08-01
  • 打赏
  • 举报
回复
handler.post(),只是提供一种选择,如果用handler的handleMessage来处理,需要实现的东西比较多,在某些场景仅仅需要执行某个特定的操作一次就够了,这时候用post明显要方便很多。同时,正如你所说post里面处理的runnable是在主线程执行的,所以可以刷新UI(一般也只是用来刷新UI),也一定不要做耗时操作。如果看到哪里在post里面做了耗时操作,不要疑惑为什么不放在主线程,只能是用法用错了。
ESC尛蜜蜂 2016-08-01
  • 打赏
  • 举报
回复
耗时放在子线程中,结果返回给MainThread,放在MainThread执行耗时会导致应用无响应
b87936260 2016-08-01
  • 打赏
  • 举报
回复
post到mainThread是一些UI操作,这些必须在主线程中做。如果这个run里面还有耗时操作,那就是你们写得有问题

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧