美文网首页
Android View系列之屏幕绘制系统

Android View系列之屏幕绘制系统

作者: coder_斛律光 | 来源:发表于2018-04-24 11:05 被阅读22次

这些知识点都是android内核剖析里的 加上我的一些理解 为了方便自己看所以大概写一个纲领 或者提示的东西 便于回忆之前学习的知识点

1. 屏幕绘制的基本架构

android GUI 使用了客户和端服务端式的窗口系统 主要的进程是以下三个
  • SurfaceFlinger 它翻译过来就是服务端 给客户端提供一个绘图缓冲区
  • SystemServer 进程 这个就是和我们zygote(受精卵)Fork android进程那个 之后启动的进程 他和zygote 交互是通过socket来进行的
  • 客户端进程 我们写的程序 申请一个surface 然后在缓冲区中通过onDraw方法进行绘制

2. 客户端服务端 通信然后进行绘制的过程

首先我们类比以下我们的http协议下的 服务端和客户端
  1. 客户端通过URI定位到服务端的一个资源 通过传输层 - 网络层 - 链路层
  2. 服务端接收到请求 把数据和上述的一样返回
  3. 客户端接到数据 渲染 显示
然后我们看下 我们这个 客户端服务端
  1. 客户端创建一个surface对象 它可以理解成一个请求一个surface的url 只是一个空对象 把消息发给windowmangerservice
  2. wms接收到这个请求 通过Surface的JNI调用 SurfaceFlinger_client接口驱动 调用sf 创建指定的窗口 sf给给surface分配一个内存缓冲区地址 传给wms wms把地址给surface 这时候surface 有了内存地址 可以进行绘制了

wms 有点类似我们熟悉的服务端的中间的传输层 和 链路层 负责找到内核 和sf 进行交互 然后sf 再把信息通过wms 给到 surface
SKia 绘图驱动库

java 通过WM的 addView方法获得一个 surface 空壳 然后通过wms 调用sf的client驱动的到这个surface的内存地址 回来后 通过surface的lockcanvas方法获得canvas对象 然后进行绘制

相关文章

网友评论

      本文标题:Android View系列之屏幕绘制系统

      本文链接:https://www.haomeiwen.com/subject/bypdlftx.html