您的位置:首页 > 移动开发 > Android开发

文章标题

2016-05-17 09:36 274 查看
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,最后回调到activity

PhoneWindow里

在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 界面 wms