Android 中 窗口:
- ViewImplement中w类 和 PhoneWindow有何关联
2.android 事件从哪里来,最后怎么分发到Activity里。
窗口究竟是什么,它有俩方面的含义,一方面是 android WMS (window Manager System)
对所有应用的界面窗口进行管理,并将各种触摸事件分发给相应的窗口,另一方面是代表
的样式,比如一个应用为了保证它所有的界面风格一致,或开发者为某个窗口设置特定的
风格样式。
创建一个window其实有俩个过程:
activityThread 创建activity后, activity.attach() – > 此时会
创建 new PhoneWindow()。并为之设置回调事件即activity,当有界面改变或者onContent()
会回调到activity然后在设置setContentView()时,会调用mWindow.setContentView,在这个方法内,它会生成
DecorView,并在DecorView内填充实际的layout,最后回调到activityPhoneWindow里
在activity的omResume – > setVisible方法里,makeVisible()会调用到getWindowManager() wm.addView()方法,
将该这个窗口通知给android WMS,让WMS可以随时派发到它。这个过程是
1 检查到addView() LayoutParams 的参数正确
2 新建 view,LayoutParams,new ViewRootImpl(view.getContext()) 并加入到管理队列中最后交给 session.addDisplay提交到WMS
所以从上面俩部分就可以看出 W类是ViewRootImpl内部的,WMS通过它分发事件。
而PhoneWindow则是代表前台界面元素,内部保存了自己的DecorView。
但它们联系紧密,共同发生作用。
wm.addView(mDecor,getWindwo().getAttributes());事件是如何派发到Activity里面来的?
1 在ViewRootImpl里 有 mInputHandle 处理从android管道发送过来的触摸信息。
然后sendMessage handleMessage 交给 deliverPointerEvent();2 然后 在deliverPointerEvent()里转给mView处理
3 此时如果View是DecorView,就将事件转发给它的CallBack – Activity