在此之前,我们都知道,Android点击事件的分发顺序是:
Avtivity->PhoneWindow->DecorView->ViewGroup->View。
现在我们来讨论Android事件从哪里来的?
1. ActivityThread.performLaunchActivity() 中调用 Activity.attach(),创建PhoneWindow,PhoneWindow创建DecorView。
2. ActivityThread.handleResumeActivity()中调用Activity.makeVisible(),初始化WindowManager并调用WindowManager.addView()
3. 因为WindowManager是接口,找到其实现类并调用WindowManagerImpl.addView()。
4. 调用WindowManagerGlobal.addView(View view, ..., Window parentWindow, ...) ⚠️ 此时需要注意view为DecorView对象,该对象是通过ActivityThread.handleResumeActivity()中的PhoneWindow.getDecorView()获取,并直接赋值给Activity变量的。
5. WindowManagerGlobal.addView()创建了ViewRootImpl,并调用了ViewRootImpl.setView(view,...,...)
6. 连带创建InputChannel,InputQueue以及WindowInputEventReceiver对象并传入InputChannel和Looper
7. 其实Android事件的源头来自于用户输入行为&#