美文网首页
Android中为什么在onResume之前(包括onResum

Android中为什么在onResume之前(包括onResum

作者: vanzh | 来源:发表于2018-02-05 15:55 被阅读0次

已知点: 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的宽高是正常的。

相关文章

网友评论

      本文标题:Android中为什么在onResume之前(包括onResum

      本文链接:https://www.haomeiwen.com/subject/xjqizxtx.html