文章标题
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
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
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories