源码深度解析Activity生命周期中如何正确获取UI尺寸

本文深入探讨了在Android中如何在Activity生命周期中正确获取UI尺寸,通过分析Activity启动流程、Message消息机制、UI绘制原理以及MessageQueue的同步障碍,揭示了View.post(Runnable)与Handler.post(Runnable)的区别。文章指出,View.post能在UI绘制完成后执行,因此能正确获取UI尺寸,而Handler.post则可能在UI未准备好时执行。
摘要由CSDN通过智能技术生成

一般需求中会出现在Activity启动中需要获取Ui控件相关大小或者在界面绘制完成之后刷新数据,我们都知道在UI绘制完成之后,时机最好,不会阻塞主线程导致卡顿或者UI控件参数获取失败。 也许大家使用过或 知道Handler(MainLooper).Post(Runnable)和View.Post(Runnable)都是把Runnable封装成Message再 push到主线成中looper中MessageQueue中,会发现在Activity的生命周期中执行这两种方式效果不同,前者不满足我们的需求,而后者却能做到,但这是为啥,有没有深入分析。

本文就从Activity启动流程以及UI刷新和绘制流程原理以及消息循环机制、同步障碍机制来剖析。看完你会同时学到如下知识点:

  1. Activity生命周期启动流程
  2. Message消息发送和执行原理机制
  3. UI绘制刷新触发原理机制
  4. MessageQueue同步障碍机制**

先看demo运行效果,以获取Ui控件大小为例子,如下:

class MyActivity extends Activity{
.....
  @Override
 protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setConten
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trilen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值