(为什么这篇吹水的这么多人看,不理解)

窗口管理

WindowManger的流程大概大概过了一遍。
Activity持有了PhoneWindow,PhoneWindow通过token和WMS进行交互,比如需要生产的window是不是全屏幕啊,WMS渲染了尺寸,通过了一波计算确定了PhoneWindow能显示的大小,通过binder调用,把显示的参数放在display中回到PhoneWindow中,PhoneWindow本质上也是一个view。把东西处理完,送到surface中,surface处理后输出到硬件渲染。

有几个关键点:

1,WMS计算屏幕大小是在一个进程中的多线程处理的。
2,Window本身就有许多参数,可以控制屏幕大小,显示层级的。
3,WMS还会接受硬件输入,把点击事件传递到对应的window中。

窗口渲染

App进程启动之后,会通过binder调用,在ActivityStack中把窗口的信息app token 之类的东西给到wms,wms根据物理尺寸的大小,算出app内部的窗口大小,再给回到App进程。获得高、宽、分辨率得信息之后,App开始在自己的进程,窗口内绘制UI。绘制的UI存在surface中。UI通过新建一个SF client,当有UI刷新的时候,会通过client,通知SF刷新。SF本身有定时刷新的机制,叫做VSync(会刷新物理屏和wifi屏)。App进程中,Choreography会接受硬件的时钟,定时的在UI线程中绘制doFrame。
那么问题来了
1,App是直接binder调用SurfaceFlinger,通知UI变更的吗?
2,SurfaceFlinger 和 Choreography 中都有时钟定时刷新的机制,那么是谁通知谁刷新?

扯远了说

  • android整一套的activity,application,server都是存在ActivityThread中的,ActivityThread.main 就是android应用启动的方法,作为一个可执行文件,从zygote中fork出来,解析,动态加载了APK中的资源。
  • AMS和WMS都是一个独立的进程,需要拉起一个activity,或者server的时候,都会走binder调用,系统会把一些背景资源(context)封装好,然后走activity的生命周期的东西。
  • WMS就是android的窗口管理了,定义了屏幕的尺寸,决定了窗口的层级(Z轴),输送surface给渲染,传递点击事件给顶层激活的窗口。

回过头来看,android系统本身就是一整套插件加载机制。现在如火如荼的热加载,不过是照大猫画小猫而已。要是我从头来实现一套系统,我最想保留的还是context,把大部分东西都隔离了,把功能作为插件提供给第三方开发者,这样最好。

关于权限:

Zygote是有root权限,但是在拉起的过程中,大部分高级权限被限制了,所以即使应用获和zygote一样的权限,也没系统级别的能力。

TODO


我还可以写更多,这里留个伏笔

linux上的一个玩具相关推荐

  1. linux git中央仓库地址,如何在Linux上搭建一个Git中央仓库

    前言:本教程只面向那些个人开发者,想要自己在linux上搭建一个git中央仓库用来上传发布自己的项目.但是对于团队来说可能有更高的要求,可以使用gitlab搭建一个可视化的类似github的版本管理系 ...

  2. linux中央服务器,如何在Linux上搭建一个Git中央仓库

    前言:本教程只面向那些个人开发者,想要自己在linux上搭建一个git中央仓库用来上传发布自己的项目.但是对于团队来说可能有更高的要求,可以使用gitlab搭建一个可视化的类似github的版本管理系 ...

  3. Linux上构建一个RADIUS服务器详解

    作为一名网络管理员,您需要为您所需管理的每个网络设备存放用于管理的用户信息.但是网络设备通常只支持有限的用户管理功能.学习如何使用Linux上的一个外部RADIUS服务器来验证用户,具体来说是通过一个 ...

  4. linux启动一个进程吗,你知道,当你在 Linux 上启动一个进程时会发生什么嘛?

    原标题:你知道,当你在 Linux 上启动一个进程时会发生什么嘛? 本文是关于 fork 和 exec 是如何在 Unix 上工作的.你或许已经知道,也有人还不知道.几年前当我了解到这些时,我惊叹不已 ...

  5. linux如何启动一个进程而不阻塞,当你在 Linux 上启动一个进程时会发生什么? | Linux 中国...

    原标题:当你在 Linux 上启动一个进程时会发生什么? | Linux 中国 本文是关于 fork 和 exec 是如何在 Unix 上工作的.你或许已经知道,也有人还不知道.几年前当我了解到这些时 ...

  6. 在linux下怎么解除git本地仓库_如何在Linux上搭建一个Git中央仓库

    前言:本教程只面向那些个人开发者,想要自己在linux上搭建一个git中央仓库用来上传发布自己的项目.但是对于团队来说可能有更高的要求,可以使用 gitlab 搭建一个可视化的类似github的版本管 ...

  7. 在linux上部署一个web项目的小经验

    文章目录 设置IP地址和设置IP地址为静态 更改IP和设置IP为静态的方法 其他一些知识点 ps命令一点小知识 CentOS7可视化页面下设置为中文 MySQL部分 MySQL错误代码1130 lin ...

  8. 在 Linux 上创建一个加密文件保险库

    关注微信公众号:厦门微思网络 最近,我演示了如何在 Linux 上使用统一密钥设置(Linux Unified Key Setup)(LUKS)和 cryptsetup 命令 实现全盘加密.虽然加密整 ...

  9. 如何在Linux上制作一个屏幕录像视频教程

    一图胜千言,一个精心设计的指导视频更是能给你带来良好体验.Linux上有你需要的制作有用且高质量教学视频的所有工具.我们将用强大的kdenlive视频编辑器和Audacity音频录制器和编辑器制作一个 ...

最新文章

  1. Spark源码的编译过程详细解读(各版本)(博主推荐)
  2. flag push tcp 作用_TCP/IP协议到底在讲什么?
  3. C语言文件操作(一)产生0~M范围内的N个随机数
  4. 配置zentaophp
  5. 前端学习(3311):redux的state hook对象
  6. 基于linux 的2048
  7. 螺旋方阵(Leetcode第59题)
  8. 小白来学C语言之宏定义(#define)
  9. Pads logic 创建文件时发生严重错误
  10. ArcGIS 创建格网与图斑数据叠加;频数统计与面积比例计算
  11. html5的file api,HTML5 File API
  12. 插值拟合模型 之 Hermite插值、三次样条插值
  13. C#—软件注册与注册机
  14. 【计算机网络 1】计算机网络概述,nginx原理jiangmo
  15. 优先队列(priority_queue)总结
  16. windows环境下 ipfs的搭建与使用
  17. 高版本IAR打开低版本编译的程序出现的问题
  18. 3DMAX中9个建模小技巧
  19. 2022年计算机二级考试题库软件+模拟考试系统下载
  20. 赚下跌的钱!基金定投也能成千万富翁

热门文章

  1. 微商服务器维护,微商必备一键转发软件靠谱的有哪些?微商软件系列汇总,微商必看!...
  2. 数据泵 oracle/impdp导入数据(windows)
  3. Docker-Compose集成编排Redis、MySQL、微服务,服务容器化
  4. Android P系统设置之默认选择网络类型(4G,3G,2G)
  5. java pdf添加便利贴_想在桌面中添加便利贴,教你使用桌面便利贴进行信息提示...
  6. html div讲解,divcss入门教程讲解
  7. 神经网络结构图绘图软件,大脑神经网络结构图片
  8. 生成一维条形码并转换base64返回给前端展示
  9. 新来CTO 强烈禁止使用Calendar...,那用啥?
  10. 关于新学期的计划(为了遇见更美好的自己)