View.post(Runnable action):主要用于在视图完成布局之后执行任务,确保视图树已经准备就绪。 Handler.post(Runnable r):更通用,用于将任务调度到特定的 Handler 关联的线程,可以是主线程或其他工作线程。 在处理视图相关的任务时,使用View.post可以确保视图已经完成布局和绘制。而在调度各种线程任务时,Handler.post更加灵...
虽然View.post和Handler.post在功能上有一些重叠,但它们背后的实现机制是不同的。View.post实际上是利用了View内部的Handler来实现的。当你调用View.post方法时,View会将其内部的Handler(这个Handler已经与UI线程的Looper绑定)用于将Runnable对象排队到消息队列中。内部实现原理:View.post:View内部维护了一个Handler(称为...
从上面的源码,我们大概可以看出mAttachInfo字段在这里比较关键,当其有值时,其实和普通的Handler.post就没区别了,但有时它是没值的,比如我们上面示例代码里的onCreate阶段,那么这时执行到了getRunQueue().post(action);这行代码,从这段注释也大概可以看出来真正的执行会被延迟(这里的Postpone注释);我们接着往下看看...
而Handler是非UI线程向UI线程传递消息的桥梁。 除了非常常用sendMessage之外,Handler也提供了post(Runnable...),postDelayed等 风骚犀利的方法,利于我们使用“闭包式编程”。 View作为UI的一部分,也无例外的提供了一个淫荡的View.post(Runnable)方法,让我们在 UI线程中doSomeThing。灵活使用View.post。神马Handler,Activi...
其次,是View.post()的调用时机和整个View的绘制和渲染有着千丝万缕的联系。而这一切的基础,正是主线程的Handler.post(),理清这二者的关系,能够加深我们对View渲染、绘制的流程的理解。 View的渲染起点 宏观上来说,当DecorView被”attach“到Window之上后,程序能够收到系统分配给各个Activity的同步信号时,View就会开...
View.post() 方法,在不同版本的差异,根本原因还是在于 Api23 和 Api24 中,executeActions() 方法的调用时机不同,导致 View 在没有 mAttachInfo 对象的时候,表现不一样了。 序 这篇文章之前发过一遍,但是有读者指出来有些地方描述的有问题,我后来再看的时候也觉得有问题,所以把之前的文章删掉(主线是没有问题...
view的dispatchAttachedToWindow方法有没有执行,如果已经执行过了,那么他们是没啥区别的,都是利用Handler来发送Message到MessageQueue,如果dispatchAttachedToWindow还没有执行,那么他们是有区别的,最直观的判断就是我们可以在onCreate方法中利用view.post(runnable)来获取view的宽高,但是无法利用handler.post(runnable)来获...
android随笔之Handler.post()和View.post()区别 http://t.cn/A6bWefWW Handler.post(),它的执行时间基本是等同于onCreate里那行代码触达的时间; View.post(),则不同,它说白了执行时间一定是在Activity的onRe...
Handler的post方法 先来简单看一下Handler的post(Runnable)方法。这个方法是将一个Runnable加到消息队列中,并且会在这个handler关联的线程里执行。 下面是关联的部分源码。可以看到传入的Runnable对象,装入Message后,被添加进了queue队列中。