window和windowmanager

来源:互联网 发布:金山快盘网络错误 编辑:程序博客网 时间:2024/06/06 10:27

windowwindowmanager

一、window

1.window属性

1type属性

 应用window--一个Activity1-99层)

 window---不能单独存在,如dialog1000-1999层)

 系统window--需要声明权限,如toast及状态栏 (2000-2999层)

    <uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW"/>

2flags属性

  FLAG_SHOW_LOCKED

 

window分层,层级大的覆盖小的

 

添加view

更新view

删除view

 

可以做的事情:如可以拖动的window效果,viewonTouch方法中改变window的位置

2.window的内部机制

 

window(不是实际存在的)----------viewRootImpl(建立联系)------View(才是window存在的实体)

window的添加是一次IPC调用

工厂模式:

windowManagerImpl-----windowManagerGlobal(以工厂的形式向外提供实例)-----window进行添加、删除、更新等操作-----IWindowSesssion----Session------windowMagagerService

 

二、window的创建过程

1.Activity

1Activity启动过程中,会由ActivityThread重点额performLaunchActivity()来完成整个启动过程,方法内部会通过类加载器创建Activity的实例对象,并调用attach方法为

其关联运行过程中所依赖的一系列上下文环境变量

Activityattach方法:

创建Activity所属window对象,并设置回调接口(window接收到外界状态改变时会回调Activity的方法   onAttachedToWindowonDetachedFromWindowdispatchEvent等)

 

Activitywindow是通过policyManager的一个工厂方法创建的---policy---makeNewWindow----phoneWindow

2Activity视图依附window

setContentView()方法

phoneWindow----DecorViewFramelayout,顶级view,包含标题栏和内部栏content----------view添加到DdecorviewmContentParent中(inflate方法)----回调onContentChanged方法通知视图改变

                          phoneWindow通过generateLayout方法加载具体布局文件到Decorview

                         

                          ------handleResumeActivity方法(调用onResumemakeVisibale方法可以看到)

2.Didlog window创建

policyManager---policy---makeNewWindow----phoneWindow----setContentView

 

3.toast系统window

采用了handle

NotificationManagerService

 

任何 View 都是附属在一个 Window上面的,Window 表示一个窗口的概念,也是一个抽象的概念,Window并不是实际存在的,它是以 View 的形式存在的。

WindowManager 是外界也就是我们访问 Window的入口,Window 的具体实现位于 WindowManagerService中,WindowManagerService WindowManager的交互是一个 IPC 过程。

 

三、windowwindowmanager的桥接模式

 

 

 

原创粉丝点击