文章标题

关于Windowmager的一些知识梳理

原文链接
FLAG_SHOW_WHEN_LOCKED :当屏幕锁定时,窗口可以被看到。这使得应用程序窗口优先于锁屏界面。可配合FLAG_KEEP_SCREEN_ON选项点亮屏幕并直接显示在锁屏界面之前。可使用FLAG_DISMISS_KEYGUARD选项直接解除非加锁的锁屏状态。此选项只用于最顶层的全屏幕窗口
次方法可用在锁屏歌嘛!
WindowsManger 继承Viewmanager 实现三个:addView(View v,ViewGroup.LayoutParam param ),updataViewLayout(View v,ViewGroup.LayoutParam param),removeView(View v)

每一个window 都是一个WindowRootImpl 和一个view组成 windowRootImpl 将View 和Window 建立联系

window 添加 依赖windowmanager而他又是一个接口 windowRootImpl 去实现View的几个方法:
而他又将具体实现交给了WindowManagerGlobal
1.检查参数是否有效,为空则子window 为其调整开启硬件加速
2.监听系统属性的变化
3.判断是否是重复添加的view
4.判断是否是panelWindow 更便于以后获取当前参数
5.将window一系列参数添加进集合
6.WindowRootImpl.setView 更新界面完成window 添加 内部通过requestLayout异步刷新
scheduleTraversals便是View的绘制入口。
IWindowSession,它是一个Binder对象中间人 Window添加实际是一个IPC
Session 内部addwindow 通过Windowsservice会保留每一个活动session
整个流程:
WindowManger -> WindowMangerImpl -> WindowManagerGlobal>addView -> ViewRootImpl- >setView->requestLayout - > (IPC)Session>addToDisplay - > WindowMangerService->addWindow

window 删除过程:
ViewRootImpl 通过removeViewLooked删除 里面有同步removeViewImmediate和异步removeView

WindowManger -> (实现类)WindowMangerImpl ->(委托类) WindowManagerGlobal>removeView>removeViewLocked -> ViewRootImpl>doDie>dispatchDetachedFromWindow -> (IPC) Session>remove -> WindowMangerService>removeWindow

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值