好看的网站都找谁做的,网络营销策划方案书范文,广东短视频营销seo推荐,网站编辑器失效文章前提#xff1a;
了解WMS基本作用了解window的概念#xff0c;phoneWindow#xff0c;rootViewImpl了解view的事件分发
开始#xff1a;
讲三件事情#xff1a;
window的创建#xff0c;更新焦点的更新事件的分发
Window的创建#xff0c;更新#xff1a;
wi…文章前提
了解WMS基本作用了解window的概念phoneWindowrootViewImpl了解view的事件分发
开始
讲三件事情
window的创建更新焦点的更新事件的分发
Window的创建更新
window的创建
最终都是通过和WMS通信完成的。
WMS管理着window的增删改以及window层级的管理Z-order的堆栈管理...因此window的创建我们自然就联想到了WMS。
在performLaunchActivity()方法中也就是在 Activity 的启动过程中的几乎最后一步执行
调用activity.attch()方法 创建PhoneWindow
在handleResumeActivity()处理onResume()因此在performLaunchActivity后面执行在这个方法中调用了addView方法: 这个addView由WindowManagerGloal实现其中创建RootViewImpl并进行setView()
WindowManagerGloal 这个root就是RootViewImpl接下来到setView方法中 通过addToDisPlayAsUser方法调用
在其中调用WMS的addWindow方法 此时终于到了WMS的addWindow方法中这里面做了四件事
窗口检查token处理windowState的创建displayContent的创建和配置
执行完后由WMS直接和SurfaceFlinger通信进行显示此时我们的window就显示出来了。
window的更新
什么情况下会出现window的更新
键盘出现窗口需要重新计算布局并更新显示内容。
只是api执行的不同不过逻辑同样app进程发起更新请求由WindowManagerGlobal进行处理这个类和WMS通过IWindowSession进行通信实现更新操作。
焦点的更新
焦点的基本概念
焦点FocusUI元素获得焦点后能够接收用户输入事件如按键和触摸事件。默认焦点当一个Activity启动时系统会自动为某个可交互的控件设置默认焦点。
焦点的获取和失去
获取焦点一个视图可以通过调用requestFocus()方法来请求获取焦点。失去焦点一个视图可以通过调用clearFocus()方法来主动放弃焦点。
焦点的移动
键盘导航用户可以使用方向键如上、下、左、右在可获得焦点的视图之间导航。Tab顺序使用android:nextFocusUp, android:nextFocusDown, android:nextFocusLeft, android:nextFocusRight属性来指定焦点导航的顺序。
处理焦点冲突
focusable属性的合理使用确保只有需要交互的视图设置为可获得焦点。自定义焦点顺序通过XML属性或代码来明确设置焦点导航顺序避免焦点在不合理的视图之间跳转。
OK开始焦点机制的部分
文章前提
了解InputManagerService了解WMS了解RootViewImpl
想要使得焦点更新需要操作
分为两种
requestFocus()有外部点击
requestFocus
会通过Binder通过WMSWMS中会判断焦点是否更新。
外部点击
SurfaceFlinger接收到点击之后通过InputChannel发送给WMSWMS内持有所有window的集合会判断是否需要更新window焦点通过WMSsurfaceFlinger得知需要更新的window之后直接通知对应的window的RootViewImpl通知DecorView通知Activity通知PhoneWindow通知DecorView然后继续向下分发......下面就是老生常谈的view事件分发机制了......