window和windowmanager
来源:互联网 发布:金山快盘网络错误 编辑:程序博客网 时间:2024/06/06 10:27
window和windowmanager
一、window
1.window属性
(1)type属性
应用window--一个Activity(1-99层)
子window---不能单独存在,如dialog(1000-1999层)
系统window--需要声明权限,如toast及状态栏 (2000-2999层)
<uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW"/>
(2)flags属性
FLAG_SHOW_LOCKED等
window分层,层级大的覆盖小的
添加view
更新view
删除view
可以做的事情:如可以拖动的window效果,view的onTouch方法中改变window的位置
2.window的内部机制
window(不是实际存在的)----------viewRootImpl(建立联系)------View(才是window存在的实体)
window的添加是一次IPC调用
工厂模式:
windowManagerImpl-----windowManagerGlobal(以工厂的形式向外提供实例)-----对window进行添加、删除、更新等操作-----IWindowSesssion----Session------windowMagagerService
二、window的创建过程
1.Activity
(1)Activity启动过程中,会由ActivityThread重点额performLaunchActivity()来完成整个启动过程,方法内部会通过类加载器创建Activity的实例对象,并调用attach方法为
其关联运行过程中所依赖的一系列上下文环境变量
Activity的attach方法:
创建Activity所属window对象,并设置回调接口(window接收到外界状态改变时会回调Activity的方法 onAttachedToWindow、onDetachedFromWindow、dispatchEvent等)
Activity的window是通过policyManager的一个工厂方法创建的---policy---makeNewWindow----phoneWindow
(2)Activity视图依附window
setContentView()方法
phoneWindow----DecorView(Framelayout,顶级view,包含标题栏和内部栏content----------view添加到Ddecorview的mContentParent中(inflate方法)----回调onContentChanged方法通知视图改变
phoneWindow通过generateLayout方法加载具体布局文件到Decorview)
------handleResumeActivity方法(调用onResume及makeVisibale方法可以看到)
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 过程。
三、window与windowmanager的桥接模式
- Window 和 Windowmanager
- Window和WindowManager解析
- Window和WindowManager小结
- 理解Window和WindowManager
- Window和WindowManager
- 理解Window和WindowManager
- 理解window和windowManager
- 初始Window和WindowManager
- Window和WindowManager(一)
- Window和WindowManager(二)
- Window和WindowManager(三)
- Window和WindowManager
- Window和WindowManager
- 理解Window和WindowManager
- Window和WindowManager
- 理解window和windowmanager
- Window和WindowManager
- 理解Window和WindowManager
- springBoot单元测试之1.4版本前后的变化
- Drawlayout
- 判断网络状态
- 1051. 复数乘法 (15)
- JDK7与JDK8中HashMap的实现
- window和windowmanager
- 平台导出"导出全部数据到Excel中(显示列)"的问题
- Activity、Window、View、Surface[0]日志
- django安装配置
- ActiveMQ的安装和启动
- 迷迷茫茫
- C++异常处理assert,throw,exit用法
- 51Nod 1483 化学变换(思维+暴力)
- 利用css3vilid 验证input email邮箱