View、Window、WindowManager与WMS之间的关系
来源:互联网 发布:wp 利用 知乎 编辑:程序博客网 时间:2024/06/09 13:58
View是所有Android软件开发用户基本上每天都会接触到的, 它是控件,但View是怎么显示在手机屏幕上的呢?
1、Window是View的载体,没有Window, 所有的View都是毫无意义的,所有的View必须添加到Window中才能显示。
2、Window的对象在创建的同时会创建其顶层的DecorView(它就是一个顶层容器),DecorView中有一个叫ContentParent的ViewGroup,我们用户定义的xml文件即设置ContentParent这个View。
3、Window只是个存放View的容器,它想要显示在手机屏幕上,需要与WindowManager绑定。
4、WindowManager是安卓Framework层的一个服务,可通过context.getService(Context.WINDOW_SERVICE)获取到其实例
WindowManagerService是在Native层的一个服务。
5、WindowManager是WMS在Framework层的实现
以addView()为例: WindowManager.addView() -> WindowManagerGlobal.addView() -> ViewRootImpl.setView()
ViewRootImpl.setView()方法如下:
public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) { synchronized(this) { // 请求布局,该方法最终会异步发起performTraversals的执行 requestLayout(); try { //通过WindowSession将我们的Window显示在屏幕上 res = sWindowSession.add(mWindow, mWindowAttributes, getHostVisibility(), mAttachinfo.mContentInsets); } }}
我们会发现最终WindowManager的addView操作会交付给WindowSession执行操作,WindowSession又是什么呢?
从字面意思了解WindowSession为窗口会议,它的功能也的确如此,WindowSession的实例sWindowSession是在ViewRootImpl的构造函数中通过getWindowSession()获取到的
简化版代码如下:
/** * 真相了,因为WMS运行在Native端独立的进程中,所以只能将其实现好的IWindowManager接口转化为的Binder获取过来 * 它是IWindowManager该AIDL接口在Native端的具体实现。 * 我们通过asInterface 将该Binder transact 为Framework端可用的IWindowManager实例 */IWindowManager windowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));//通过windowManager建立会议sWindowSession = windowManager.openSession();
所以Framework端的WindowManager最终通过ViewRootImpl中的WindowSession向WMS发起请求,让WMS完成add、remove、update操作
- View、Window、WindowManager与WMS之间的关系
- Activity,View,Window和WindowManager之间的关系
- Activity,View,Window和WindowManager之间的关系
- Window,View和WindowManager之间关系
- Android自定义View专题四 View、Window、WindowManager和Activity之间的关系
- Activity ,Window ,WindowManager之间的关系
- Android快速理解Activity、View及Window&WindowManager之间关系
- Android快速理解Activity、View及Window&WindowManager之间关系
- android中View, Window, Activity, WindowManager,ViewRoot几者之间的关系
- android中View, Window, Activity, WindowManager,ViewRoot几者之间的关系
- android 中View, Window, Activity, WindowManager,ViewRoot几者之间的关系
- android 中View, Window, Activity, WindowManager,ViewRoot几者之间的关系
- Activity-与window-view之间的关系(1)
- Activity 、View、Window、WindowManager关系分析
- android分析windowManager、window、viewGroup之间关系
- Activity Window View 之间的关系
- activity、window和view之间的关系
- Android Activity 、 Window 、 View之间的关系
- [USACO GOLD] 选做
- CF#420 Div.2 B. Okabe and Banana Trees(数学)
- ng个人学习小结
- Java 多态
- ACM Dijkstra 最短路
- View、Window、WindowManager与WMS之间的关系
- 实习笔记之nexus maven私服搭建
- DOM中获取元素的方法
- java-文件操作RandomAccessFile
- Organopolysilazane
- 笨方法学Python 习题 38: 列表的操作
- 高通滤波与低通滤波的简单理解
- HDFS使用API操作文件权限
- 使用java的过滤器filter备忘(HttpServletResponseWrapper)