window和windowmanager

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的桥接模式

 

 

 

WindowManager是外界访问Window的入口,它通过与WindowManagerService进行IPC通信来管理和操作WindowWindowManagerImpl是WindowManager接口的实现类,但它并不直接实现Window的三大操作(添加、更新、删除),而是将这些操作委托给WindowManagerGlobal来处理。WindowManagerGlobal是一个单例工厂类,它负责具体实现Window的操作。 Window通过setWindowManager方法与WindowManager建立关联,并通过WindowManager来实现具体的操作。通过这种桥接模式的设计,Window的操作被分离出来,使得系统更加灵活和可扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android Window学习记录(一)理解windowwindowmanager](https://blog.csdn.net/qq_53749266/article/details/124332280)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Android解析WindowManager(一)WindowManager体系](https://blog.csdn.net/heng615975867/article/details/108726623)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值