当前位置: 首页 > news >正文

官方网站建设最重要的是网站做的比较好的

官方网站建设最重要的是,网站做的比较好的,如何做原创短视频网站,wordpress后台用户名作者#xff1a;bobby_developer 1. WMS原理#xff1a;WMS角色与实例化过程 window:它是一个抽象类#xff0c;具体实现类为 PhoneWindow #xff0c;它对 View 进行管理。Window是View的容器#xff0c;View是Window的具体表现内容#xff1b; windowManager:是一个接… 作者bobby_developer 1. WMS原理WMS角色与实例化过程 window:它是一个抽象类具体实现类为 PhoneWindow 它对 View 进行管理。Window是View的容器View是Window的具体表现内容 windowManager:是一个接口类继承自接口 ViewManager 从它的名称就知道它是用来管理 Window 的它的实现类为 WindowManagerImpl WMS:是窗口的管理者它负责窗口的启动、添加和删除。另外窗口的大小和层级也是由它进行管理的 SystemServer启动WMS流程表 1.1 window 1.2 显示层级 1.3 窗口标志位 1.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON(当Window可见时允许锁屏) 2.FLAG_NOT_FOCUSABLEWindow 不能获得输入焦点即不接受任何按键或按钮事件例如该 Window 上 有 EditView点击 EditView 是 不会弹出软键盘的Window 范围外的事件依旧为原窗口处理例如点击该窗口外的view依然会有响应。另外只要设置了此Flag都将会启用FLAG_NOT_TOUCH_MODAL 3.FLAG_NOT_TOUCH_MODAL设置了该 Flag,将 Window 之外的按键事件发送给后面的 Window 处理, 而自己只会处理 Window 区域内的触摸事件Window 之外的 view 也是可以响应 touch 事件。 4.FLAG_NOT_TOUCHABLE设置了该Flag表示该 Window 将不会接受任何 touch 事件例如点击该 Window 不会有响应只会传给下面有聚焦的窗口 5.FLAG_KEEP_SCREEN_ON只要 Window 可见时屏幕就会一直亮着视频播放、游戏 6.FLAG_LAYOUT_NO_LIMITS允许 Window 超过屏幕之外 7.FLAG_IGNORE_CHEEK_PRESSES当用户的脸贴近屏幕时比如打电话不会去响应此事件 8.FLAG_SHOW_WHEN_LOCKED当用户的脸贴近屏幕时比如打电话不会去响应此事件 9.FLAG_IGNORE_CHEEK_PRESSES ; 窗口可以在锁屏的 Window 之上显示, 使用Activity#setShowWhenLocked(boolean) 方法代替 1.4 WindowManager 在了解WindowManager管理View实现之前先了解下WindowManager相关类图以及Activity界面各层级显示关系 2. WMS工作原理 2.1 WMS职责 2.2 WMS中重要的一些属性释义 2.3 AddWindow源码分析 WMS中addWindow源码分析在分析addWindow之前先了解几个类 WindowToken WindowToken具有令牌的作用是对应用组件的行为进行规范管理的一个手段。WindowToken由应用组件或其管理者负责向WMS声明并持有。应用组件在需要新的窗口时必须提供WindowToken以表明自己的身份并且窗口的类型必须与所持有的WindowToken的类型一致同时它将属于同一个应用组件的窗口组织在了一起 DisplayContent 如果说WindowToken按照窗口之间的逻辑关系将其分组那么DisplayContent则根据窗口的显示位置将其分组。隶属于同一个DisplayContent的窗口将会被显示在同一个屏幕中。每一个DisplayContent都对应这一个唯一的ID在添加窗口时可以通过指定这个ID决定其将被显示在那个屏幕中。DisplayContent是一个非常具有隔离性的一个概念。处于不同DisplayContent的两个窗口在布局、显示顺序以及动画处理上不会产生任何耦合。因此就这几个方面来说DisplayContent就像一个孤岛所有这些操作都可以在其内部独立执行。因此这些本来属于整个WMS全局性的操作变成了DisplayContent内部的操作了。 WindowState 表示一个窗口的所有属性所以它是WMS中事实上的窗口当向WMS添加一个窗口时WMS会为其创建一个WindowState。另外WMS.addWindow()函数中看到新的WindowState被保存到mWindowMap中键值为IWindow的Bp端。mWindowMap是整个系统所有窗口的一个全集。 2.4 removeWindow void removeWindow(Session session, IWindow client) {synchronized (mGlobalLock) {//获取WindowStateWindowState win windowForClientLocked(session, client, false);if (win ! null) {//执行删除win.removeIfPossible();return;}// Remove embedded window map if the token belongs to an embedded windowmEmbeddedWindowController.remove(client);}}win.removeIfPossible方法和它的名字一样 并不是直接执行删除操作而是进行多个条件判断过滤满足其中一个条件就会return推迟删除操作。比如View正在运行一个动画这是就会推迟删除操作直到动画完成。然后调用removeImmediately方法。 3. 事件派发 EventHub: 1.使用inotify监听输入设备的添加和移除 2.使用epoll机制监听输入设备的数据变化 3.读取设备文件数据 4.将原始数据返回给InputReader InputReader:不断读取由EventHub监听到的input事件将多个事件组合成一个可供上层消费的事件比如将一组触摸事件合并成一个action_down事件然后交给InputDispatcher进行事件分发 InputDispatcher:拿到InputReader获取的事件后对事件进行包装寻找并分发到目标窗口对应inputChannel输入 Android系统是由事件驱动的而input是常见的事件之一点击、滑动、长按等操作都属于input事件核心类就是InputReader和InputDispatcher 解释 ViewRootImpl#WindowInputEventReceiver从下面源码可以看出此类用于InputChannel输入事件接收以及处理输入事件分发 final class WindowInputEventReceiver extends InputEventReceiver {//构造方法接受inputchannel输入事件public WindowInputEventReceiver(InputChannel inputChannel, Looper looper) {super(inputChannel, looper);}Overridepublic void onInputEvent(InputEvent event) {...if (processedEvents ! null) {if (processedEvents.isEmpty()) {// InputEvent consumed by mInputCompatProcessorfinishInputEvent(event, true);} else {for (int i 0; i processedEvents.size(); i) {//对输入事件进行分发enqueueInputEvent(processedEvents.get(i), this,QueuedInputEvent.FLAG_MODIFIED_FOR_COMPATIBILITY, true);}}} else {enqueueInputEvent(event, this, 0, true);}}ViewRootImpl#InputStage:抽象类主要用来将事件的处理分成若干个阶段stage进行如果该事件没有被处理则该stage就会调用onProcess方法处理然后调用forward执行下一个stage的处理如果该事件被标识为处理则直接调用forward执行下一个stage的处理直到没有下一个stage ViewPostImeInputStage:InputStage的子类将输入事件传递到上层视图至此输入事件一层层向上传递最终交由具体的view进行处理 如果你还没有掌握Framework现在想要在最短的时间里吃透它可以参考一下《Android Framework核心知识点》里面内容包含了Init、Zygote、SystemServer、Binder、Handler、AMS、PMS、Launcher……等知识点记录。 《Framework 核心知识点汇总手册》:https://qr18.cn/AQpN4J Handler 机制实现原理部分 1.宏观理论分析与Message源码分析 2.MessageQueue的源码分析 3.Looper的源码分析 4.handler的源码分析 5.总结 Binder 原理 1.学习Binder前必须要了解的知识点 2.ServiceManager中的Binder机制 3.系统服务的注册过程 4.ServiceManager的启动过程 5.系统服务的获取过程 6.Java Binder的初始化 7.Java Binder中系统服务的注册过程 Zygote Android系统的启动过程及Zygote的启动过程应用进程的启动过程 AMS源码分析  Activity生命周期管理onActivityResult执行过程AMS中Activity栈管理详解 深入PMS源码 1.PMS的启动过程和执行流程 2.APK的安装和卸载源码分析 3.PMS中intent-filter的匹配架构 WMS 1.WMS的诞生 2.WMS的重要成员和Window的添加过程 3.Window的删除过程 《Android Framework学习手册》https://qr18.cn/AQpN4J 开机Init 进程开机启动 Zygote 进程开机启动 SystemServer 进程Binder 驱动AMS 的启动过程PMS 的启动过程Launcher 的启动过程Android 四大组件Android 系统服务 - Input 事件的分发过程Android 底层渲染 - 屏幕刷新机制源码分析Android 源码分析实战
http://www.hkea.cn/news/14569737/

相关文章:

  • 长春网站设计公司什么后台做网站安全
  • 上海建网站服务器企业所得税政策最新2023税率
  • python做网站吗求人做网站的网站
  • 广告公司会建设网站吗岳池做网站电话
  • 淘宝网站c 设计怎么做的学做网站要学什么语言
  • 贵阳建设工程信息网站高端定制建站公司
  • 手机做兼职的网站有哪些wordpress插件位置
  • 蓝翔老师做的网站山东网站建设电话
  • 深圳外贸网站定制做商务网站服务
  • 精湛的中山网站建设北京手机软件开发
  • jsp电子商务网站建设实验做自己的网站的作用
  • 网站建设高端定制社区教育网站开发
  • 少女免费观看片tvsemseo名词解释
  • 汽车网站策划书企业画册vi设计
  • 信阳工程建设一体化平台网站有什么wordpress
  • 网站建设相关知识博客wordpress主题界面
  • 网站cms企业公司做网站是com好还是cn好
  • 寄生虫网站排名代做专业网站建站企业
  • 网站建设数据库配置做网站收多少钱
  • 自己做头像的网站做网站加入广告联盟
  • 企业更新网站的好处网站开发实施方案
  • 网站 外包 版权赣州星亚网络传媒有限公司
  • 特价网站建设费用外围网站开发
  • 法国化妆品进口报关做网站受欢迎的网站建设案例
  • 开网站需要投资多少钱wordpress添加js
  • 外贸网站做排名乐山网站公众号建设
  • 公司要做好网站怎样做水滴信用企业查询官网
  • 网站网站注册从建站到网络优化
  • 常州网站建设代理商做美食网站首页怎么做
  • 网站管理员怎么做板块建设青岛网站建设与设计制作