Android7.0 View.post与Handler.post
来源:互联网 发布:贴吧发广告软件 编辑:程序博客网 时间:2024/06/16 12:45
在获取view宽高时,在Android6.0中使用handler.post()可以正常获取,而运行在Android7.0上则无法再获取。而在7.0上改为view.post()方法则又可以正常获取view宽高。
查看源码和相关资料后知道是因为,虽然这两个都是post(new runnable(){}),但两者最终将消息发送到的消息队列并不一定相同,区别在于View是否已attach到window上。
而view.post()在 Api23 和 Api24 中,executeActions() 方法的调用时机不同,导致 View 在没有 mAttachInfo 对象的时候,表现不一样。
验证测试:
我们在自定义view的layout()方法中添加
@Overridepublic void layout(@Px int l, @Px int t, @Px int r, @Px int b) { super.layout(l, t, r, b); Log.i("Demo","================view.layout");}
在测量使用view的宽高处添加
view.post(new Runnable() { @Override public void run() { Log.i("Demo","----------------view.post"); } }); new Handler().post(new Runnable() { @Override public void run() { Log.i("Demo","----------------new Handler().post"); } });
运行后可得到结果:
Android6.0:
Android7.0:
可知Android7.0时,当handler.Post执行时,view还没有执行layout方法,所以测出的宽高是0,而view.post执行在view的layout后,可以测出正确宽高。
参考资料:(重要)
1、view.post和Handler.post区别:http://blog.csdn.net/a740169405/article/details/69668957
2、API23和API24 view.post()变化:http://www.jb51.net/article/122395.htm
阅读全文
0 0
- Android7.0 View.post与Handler.post
- android-View.post与Handler.post的区别
- 关于Handler.post与View.post的区别
- View.post()和handler.post()小结
- view.post,handler.runonUiThread详解
- handler.post 与线程
- handler.post与UI
- android多线程handler+runOnUithread+view.post+handler.post
- android多线程handler+runOnUithread+view.post+handler.post 2013-
- Android多线程之handler+runOnUithread+view.post+handler.post
- View#post与Handler#post的区别,以及导致的内存泄漏分析
- 关于Handler的post跟View的post方法。
- runOnUiThread 、Handler.post、View.post之间的区别
- android_UIThread 主线程 AsynTask Handler View.post
- Handler简单分析-runOnUiThread,view.post()
- Handler.post()
- view.post()
- [Android]View.post(),android7.0(sdk24以上)不执行的问题(部分Click点击事件无效的原因)
- mysql基本操作
- 重新认识二级指针(Pointers to Pointers)
- GitHub使用记录一:中文乱码问题
- 关于动物的抽象模拟器
- 顺序查找的java、python、go语言的实现
- Android7.0 View.post与Handler.post
- pat 1004---简单的建树+层次遍历
- 文章标题
- Python之异步IO( asyncio) 协程
- 开发文档的简要模板
- QT学习=====QPainter,PaintEvent,setRenderHint(防止图形走样)
- 通过CodeIgniter快速开发Web应用(视图)
- windows下,使用批处理文件运行python程序
- 点分治 模板 poj1714