Window和WindowManager的理解"/>
对Window和WindowManager的理解
一、对Window和WindowManager的理解
1、Window表示一个窗口、一个抽象类它的实现是PhoneWindow.android的所有视图包括Activity、Dialog都是同Window来呈现
2、WindowManager是Window的创建者类,它和WindowManagerService通过IPC来进行交互
二、如何向Window添加View
layoutParam=new WindowManager.LayoutParams(Layoutparams.wrap_conten,layoutparam.wrap_content,0,0,PixelFormal.TRANSPARENT)
layoutParam.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL|LayoutParams.FLAG_NOT_FOCUSABLE|LayoutParam.FLAG_SHO_WHEN_LOCKED.
layoutParam.x=100;
layoutParam.y=100;
mWindowManager.addView(new Button(getContext()),layparam)
1、关于LayoutParam 的Flag的相关解释
1)FLAG_NOT_FOCUSABLE 表示该控件不能获取焦点也不能获取输入法事件
2)FLAG_NOT_TOUCH_MODAL 表示控件外的事件不能不自己处理,否则其他Window无法接受点击事件
3) FLAG_SHOW_WHEN_LOCKED 表示可以让Window显示在锁屏上
2、Type 参数的解释
1)Type参数表示Window的类型。分别是应用Window、子Window、系统Window。其中系统Window表示一个Activity。子window不能单独存在必须在父window上、系统Window表示需要特殊权限的Window.
2)每个Window都有一个z-ordered表示该Window的层级。其中应用Window的层级范围:1—99,子window范围1000—1999系统Window是2000—2999.
3、WinowManager包含三个方法
即:添加View(addView())、更新View(updateViewLayout)、删除View(removeView())
三、Window的内部机制
window是一个抽象概念,每个Window实际上是一个View。WindowManger addView()、updateView()、remvoeView()也实际的是操作View()
四、Window的添加流程
Window的添加其实并不真正的存在,它是通过addView()方法实现。WindowManger其实是一个接口它的真正实现是WindowManagerImpl类。在WinodwManagerImpl内部又通过WindowManagerGlobal来处理并实现如下步骤:
1、检查参数是否合法并调整布局参数
2、创建ViewRootImpl并将View添加到列表中。
3、通过VieRootImpl来更新界面并完成Window的添加过程。通过ViewRootImpl的setView方法来添加View并通过RequestLayout来刷新请求。接着会通过WindowSession来最终完成Window的添加。在WindowSesssion内部通过IPC的方式来调用WindowManagerService来实现。
五、Activity的启动过程
当startActivity后最后会走到startActivityForResult()方法
更多推荐
对Window和WindowManager的理解
发布评论