Android 窗口机制 SDK31源码分析 总目录
- 初识
- DecorView与SubDecor的创建加载
- Window与Window Manager的创建加载
- ViewRootImpl的创建以及视图真正加载
- ViewRootImpl的事件分发
- 一定要在主线程才可以更新UI吗?为什么?
- Activity的Token和Dialog的关系
- Toast机制 - 封装可以在任何线程调用的toast
- 总结
到这里,本系列就完了,下面简单总结一下
接下来回顾一下,窗口架构图,通过上面八篇文章,现在会看这个架构图应该还算清晰明了吧。
下面简述一下窗口整个初始化过程🙆♀️
在ActivityThread.handleLaunchActivity
中进行Activity
的实例化,之后初始化WindowManager
,Context
等,Window
持有WindowManager
,给Activity
绑定Window
对象。然后调用到onCreate
的setContentView
,创建DecorView
被Window
持有。同时我们自己的布局包含在了DecorView
中;之后调用handleStartActivity
方法,里面会调用onStart
以及onRestoreInstanceState
;之后调用handleResumeActivity
先回调调用onResume
之后,此时会将DecorView
通过WindowManager
的addView
方法和WindowManager
进行绑定,利用ViewRootImpl
进行和WMS
交互,加入window
布局到到WMS
,然后进行View的测量、布局、绘制,最后调用Activity的makeVisible
进行显示。
ViewRootImpl
还承担事件分发的责任,将事件分发给Activity
,只后由Activity
开启事件分发。
另外我们还分析了主线程更新UI
的相关内容,我们可以在异步线程更新UI
吗?当然可以!
分析了Dialog
,比如Dialog
为什么需要传入Activity
的Context
呢?。
最后提供了一个可以在任何线程下使用的Toast
。
以上就是本系列blog
的全部内容了,有错误的话,欢迎指出。互相学习了。
创作不易,如有帮助一键三连咯🙆♀️。欢迎技术探讨噢!