对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()方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值