android onresume时view,Android中为什么在onResume之前(包括onResume)获取不到View的宽高?...

已知点: 1.View绘制流程的起点是 ViewRootImpl#scheduleTraversals() ;

2.在onCreate里的setContentView中 确定了布局文件中有哪些对象;

3.ActivityThread的main()是应用程序的启动点,且有Activity生命周期的调用顺序;

定位点:1.找到ActivityThread#handleResumeActivity()点;

2.进入ActivityThread#performResumeActivity()这里即是调用了生命周期的onResume();

3.handleResumeActivity#performResumeActivity()之后,会获取到DecorView,

View decor = r.window.getDecorView();

wm的实例是WindowManagerGlobal。

wm.addView(decor, l);

4.WindowManagerGlobal#addView()里将我们的DecorView与ViewRootImp绑定好;

root = new ViewRootImpl(view.getContext(), display);

。。。

root.setView(view, wparams, panelParentView);

5.通过root.setView()里的 requestLayout()方法进入到scheduleTraversals(),从而再进行measure、layout、draw。

因此,看此流程可知:

在调用onResume()的时候,此时根View根本都没有与ViewRootImp绑定,没有进行measure等 操作,因此无法获取到View的宽高是正常的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值