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

顺德网站制作/物联网开发

顺德网站制作,物联网开发,厘米售卡站怎么做网站,广安哪里有做网站的公司今天也是一个大佬钻研 Framework 底层原理的分享~ 原文地址:https://blog.csdn.net/yaoming168/article/details/89418572 Framework 作为Android框架层,为 App提供了众多API去调用,但是很多机制都是Framework包装好了给App来用的&#xff0c…

今天也是一个大佬钻研 Framework 底层原理的分享~
原文地址:https://blog.csdn.net/yaoming168/article/details/89418572

Framework 作为Android框架层,为 App提供了众多API去调用,但是很多机制都是Framework包装好了给App来用的,如果不知道这些机制的原理,那么很难去在这基础上做优化。

Android Framework 的知识广泛应用在各个领域:

  • 掉帧监控
  • 函数插装
  • 慢函数检测
  • ANR 监控
  • 启动监控
  • ……

这些都需要对 Framework 有比较深入的了解。只有熟悉 Framework 层才能知道怎么去做监控,利用什么机制去监控,函数插桩插到哪里,反射调用该反射哪个类哪个方法哪个属性……

掌握Android Framework 知识的重要性不言而喻。

这里想和大家分享的是WMS介绍。

简介:

在Android中, WindowManagerService负责对系统中的所有窗口进行管理。所谓的管理大致包括对窗口进行创建、删除,以及更换窗口的焦点。

窗口一般是一个独立的界面,比如一个对话框的窗口,一个Activity的交互窗口,一个菜单等。

Window是一个类,它的实现类是PhoneWindow,Activity类实现了Window.CallBack接口,从而成了具有通用操作方式的窗口。

View也是一个类,通常作为一个视图,指一个独立的交互元素,比如一个按钮,一个文本框等。

作用:

  • 为所有窗口分配Surface: 客户端向WMS添加一个窗口的过程,其实就是WMS为其分配一块Surface的过程,一块块Surface在WMS的管理下有序的排布在屏幕上。Window的本质就是Surface,用于管理Surface的显示顺序、尺寸、位置和窗口动画。

  • 输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息,而WMS是窗口的管理者,系统中所有的窗口状态和信息都在其掌握之中,完成这一工作不在话下。

WMS主要类介绍:

W类

WindowManagerService服务就可以通过它在内部所创建的WindowState对象的成员变量mClient来
要求运行在应用程序进程这一侧的Activity组件来配合管理窗口的状态,例如:

  1. 当一个Activity组件的窗口的大小发生改变后,WindowManagerService服务就会调用这个
    IWindow接口的成员函数resized来通知该Activity组件,它的大小发生改变了。

  2. 当一个Activity组件的窗口的可见性之后,WindowManagerService服务就会调用这个Iwindow
    接口的成员函数dispatchAppVisibility来通知该Activity组件,它的可见性发生改变了。

  3. 当一个Activity组件的窗口获得或者失去焦点之后,WindowManagerService服务就会调用这个
    IWindow接口的成员函数windowFoucusChanged来通知该Activity组件,它的焦点发生改变了。

Window类 \frameworks\base\core\java\android\view\Window.java

理解:

  • 它概括了Android窗口的基本属性和基本功能。

  • 每个App虽然都可以做到各不相同,但是作为有大量用户交互的系统,窗口之间必须要有统一的交互模式,这样才能减小用户的学习成本。这些共性比如title, action bar的显示和通用按键的处理等,Window类就抽象了这些共性。

  • 它定义了一组Callback,Activity通过实现这些Callback被调用来处理事件。

注意: 要和在WMS中的窗口区分开来,WMS中的窗口更像是App端的View。

具体作用:

  • 定义Callback接口,它包含一系列dispatchXxxx方法和一系列onXxxx方法,用于处理UI事件。

  • 定义了一些接口,如setContentView、findViewById()等。由PhoneWindow来实现。

WindowManager类

  • WindowManager继承自ViewManager这个接口,这个接口主要有以下的实现子接口:
    addView()、updateViewLayout()、removeView();
    WindowManager可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,通过WindowManager的 addView方法创建View,这样产生出来的View根据WindowManager.LayoutParams属性不同,效果也就不同了,比如创建系统顶级窗口,实现悬浮窗口效果。

  • 我们每次创建一个Activity的时候,同样也是要添加当前Activity的View到窗口上,这个View是DecorView,同样也是通过调用addview()方法来实现。具体在ActivityRecord.java里面的handleResumeActivity来实现的。

ViewRootImpl类

ViewRootImpl这个类在android的UI结构中扮演的是一个中间者的角色,连接的是PhoneWindow
和WindowManagerService,也就是窗口管理系统与窗口呈现系统之间的桥梁。
它的主要作用有两个:

1.向DecorView分发收到的用户发起的event事件,如按键,触屏等事件;

2.与WindowManagerService交互,完成整个Activity的GUI的绘制。

3.里面两个重要的变量 mWindowSessoin和mWindow。

  • mWindowSessoin是ViewRootImpl和WindowManagerService之间的一个会话层,它的实体是在WMS中定义,作为ViewRootImpl 向WMS发送请求的的桥梁。

  • mWindow是ViewRootImpl提供给WMS,以便WMS反向通知ViewRootImpl的接口。由于ViewRootImpl处在application端,而WMS处在system_server端,它们处在不同的进程,因此需要添加这个W接口,便于WMS向ViewRootImpl传递信息。

WindowState:

WMS中最基本的元素,描述WMS中的一个窗口。它既可以是由App添加过来的View,也可以是系统创建的系统窗口。mAttrs为WindowManager.LayoutParams类型,描述布局参数。mClient为IWindow类型,也就是App端的ViewRootImpl::W。为了查找方便,WMS中的mWindowMap保存了IWindow到WindowState的映射,mTokenMap保存了IApplicationToken到WindowToken的映射。

Session:

向App提供IWindowSession接口让其可以和WMS通信,每个App在WMS有一个Session对象,App就是通过这个Session来向WMS发出窗口管理申请的,命令dumpsys window sessions可以查看系统中的Session。

WindowToken:

描述WM中一组相关的窗口,这些Window对应的WindowState放在其成员变量windows里。其主要继承类AppWindowToken,它是针对App的WindowToken结构。WindowState中的mAppToken指向所属的AppWindowToken,如果是系统窗口,mAppToken为空,mToken指向WindowToken对象。

AppWindowToken:

每个App的Activity对应一个AppWindowToken。其中的appToken为IApplicationToken类型,连接着对应的AMS中的ActivityRecord::Token对象,有了它就可以顺着AppWindowToken找到AMS中相应的ActivityRecord。其中allAppWindows是一个无序的列表,包含该Activity中所有的窗口。用dumpsys window display可以查看z-ordered的AppWindowToken列表:

AMS主要类关系图

WMS主要类关系图

AMS、WMS数据结构关系

TaskStack

AppWindowToken保存了属于它的WindowState的有序列表,而它本身也作为一个列表被管理在TaskStack中的mTasks成员中。

TaskStack中有个重要的变量mBounds,在相同Task里的AppWindowToken对应的Activity的大小是相同的,所以mBounds代表的就是Activity对应的大小。

DisplayContent:

表示一个显示设备上的内容,这个显示设备可以是外接显示屏,也可以是虚拟显示屏。其中 mWindows是一个WindowState的有序(Z-ordered,底部最先)列表。mStackBoxes包含了若干个StackBox,其中 一个为HomeStack,另一个是App的StackBox。所有的StackBox被组织成二叉树,StackBox是其中的节点,其中有三个重要成 员变量,mFirst和mSecond指向左和右子结点(也是StackBox),StackBox的成员mStack才是我们真正关心的东西 -TaskStack。可以看到,为了要把TaskStack存成树的结构,需要一个容器,这个容器就是StackBox。

ActivityRecord:

描述单个Activity,Activity堆栈中的基本单元。

TaskRecord:

TaskRecord中的mActivities是ActivityRecord的列表,它们是按照历史顺序排序的。

ActivityStack:

Activity堆栈,其中的ActivityRecord是通过TaskRecord这一层间接地被管理着。

Framework 层系统学习

这里想和大家分享的是一个阿里的朋友分享给我的一份阿里内部的 Android Framework 层学习手册。这是他们那里的一个P7大佬每天熬夜到凌晨,肝了半个月才整理成的。

这位大佬把Android Framework 内核解析精编成了452页的PDF!现在这份资料开放下载了!

有需要的朋友可以点击【这里】进入我们两千人的技术交流圈的共享文件夹自取。

Framework 手册整理详情

第一章 深入解析Binder

  • 第一节 Binder系列—开篇

image

  • 第二节 Binder Driver初探
    Binder 驱动概述
    Binder 核心方法
    ……
    image

  • 第三节 Binder Driver再探
    Binder 通信简述
    Binder 通信协议
    场景总结
    Binder 内存机制
    ……

image

  • 第四节 Binder启动ServiceManager
    启动过程
    核心工作
    ……

image

  • 第五节 获取ServiceManager
    获取 ProcessState 对象
    获取 BpBinder 对象
    获取 BpServiceManager
    ……
    image

  • 第六节 注册服务(addService)
    ProcessState
    服务注册
    Binder Driver
    ServiceManager
    ……

image

  • 第七节 获取服务(getService)

image

  • 第八节 framework层分析

  • 第九节 如何使用Binder
    image

  • 第十节 如何使用AIDL

  • 第十一节 Binder总结

image

  • 第十二节 Binder面试题全解析

第二章 深入解析Handler消息机制

  • 第一节 宏观理论分析与Message源码分析

image

  • 第二节 MessageQueue的源码分析
  • 第三节 Looper的源码分析
  • 第四节 handler的源码分析
  • 第五节 Handler机制实现原理总结
  • 第六节 Handler面试题全解析

第三章 Dalvik VM进程系统

  • 第一节 Android系统启动-综述

image

  • 第二节 Init篇
  • 第三节 zygote篇
  • 第四节 SystemServer上篇
  • 第五节 SystemServer下篇

第四章 深入解析WMS

image

第五章 PackageMS启动

image

由于篇幅原因,这里就不一一进行展示,这份由阿里P7大佬整理的 Android Framework 内部学习手册已经被整理成了PDF文档。

有需要的朋友可以点击【这里】进入我们两千人的技术交流圈的共享文件夹自取。

最后

大家可以关注我的B站,定期分享移动开发技术学习视频和其他学习资源!

image

学习推荐

视频系列:

  • 【2021Android面试真题解析大合集】腾讯/阿里/百度/字节/京东……全收录

  • FrameWork层源码分析

  • Android项目实战

  • Android高级UI实战

  • 性能优化

技术文系列:

  • 大厂Android面试官亲讲:Binder 相关问题到底该怎样回答

  • Activity显示界面背后的故事:一文让你理清View的那些复杂关系

  • 抖音Android岗面试性能优化篇之Rhea(新一代全能型性能分析工具)【速看】

http://www.lbrq.cn/news/800479.html

相关文章:

  • 怎样做网站卖手机号/三叶草gy5987
  • 莱芜网站建设/指数分布的分布函数
  • 在58做网站推广有效果吗/seo导航
  • 网站建设叁金手指花总2/深圳网络运营推广公司
  • 运维网站建设/seo最新技巧
  • 做网站大概/站长之家查询的网址
  • 做网站需要什么东西/阿里巴巴国际站官网
  • 镇江疫情最新数据消息/seo云优化是什么意思
  • wordpress 增加模板/专注于seo顾问
  • word用来做网站的/百度一下手机版网页
  • 网站定制一般价格多少/福州今日头条新闻
  • 网站改版 程序变了 原来的文章内容链接地址 打不开怎么办/站长推荐入口自动跳转
  • 汕头网站优化/怎么弄一个自己的网站
  • 电子商务网站开发 什么框架/竞价推广平台有哪些
  • 建筑施工企业中是应急救援领导/南宁seo平台标准
  • 自己做的手机网站怎么测试/营销和销售的区别
  • 做旅游宣传网站的流程/友情链接如何添加
  • 怎么做网站才能吸引人/如何自己创建网址
  • 建设企业网站步骤/长春网站建设方案咨询
  • 做字幕模板下载网站/免费二级域名分发
  • 用php做的网站有哪些/个人网站制作流程
  • 网站无搜索结果页面怎么做/湖南竞价优化哪家好
  • 福建工程建设管理中心网站/上热门最火标题
  • linux代码做网站/百度一下官网首页
  • 什么网站做详情页好/百度网盟推广官方网站
  • 厦门建站最新消息/店铺如何运营和推广
  • 贵阳查房子备案的网站/网站推广公司黄页
  • .net作业做网站/山东今日头条新闻
  • 网络推广网站排名/短视频seo公司
  • 万网做网站/seo分析报告怎么写
  • 中州养老项目:Mybatis自动填充拦截器
  • Springboot 配置 doris 连接
  • Vue2 项目实现 Gzip 压缩全攻略:从配置到部署避坑指南
  • 李宏毅深度学习教程 第4-5章 CNN卷积神经网络+RNN循环神经网络
  • Linux选择
  • 【Linux我做主】进程优先级