史上最全Android渲染机制讲解(长文源码深度剖析),android开发艺术探索下载

SufaceFlinger工作机制


组成架构

  1. EventControlThread: 控制硬件vsync的开关

  2. DispSyncThread: 软件产生vsync的线程

  3. SF EventThread: 该线程用于SurfaceFlinger接收vsync信号用于渲染

  4. App EventThread: 该线程用于接收vsync信号并且上报给App进程,App开始画图

  • HW vsync, 真实由硬件产生的vsync信号

  • SW vsync, 由DispSync产生的vsync信号

  • vsync-sf, SF接收到的vsync信号

  • vsync-app, App接收到的vsync信号

应用程序基本架构


Android应用进程核心组成

上图列举了Android应用进程侧的几个核心类,PhoneWindow的构建是一个非常重要的过程,应用启动显示的内容装载到其内部的mDecor,Activity(PhoneWindow)要能接收控制也需要mWindowManager发挥作用。ViewRootImpl是应用进程运转的发动机,可以看到ViewRootImpl内部包含mView、mSurface、Choregrapher,mView代表整个控件树,mSurfacce代表画布,应用的UI渲染会直接放到mSurface中,Choregorapher使得应用请求vsync信号,接收信号后开始渲染流程,下面介绍上图构建的流程。

应用启动流程图(下文称该图为P0)

进程启动

应用冷启动第一步就是要先创建进程,这跟linux类似C/C++程序是一致的,Android亦是通过fork来孵化应用进程,我们知道Linux fork的子进程继承父进程很多的资源,即所谓的COW。应用进程同样会从其父进程zygote处继承资源,比如art虚拟机实例、预加载的class/drawable资源等,以付出一些开机时间为代价,一来能够节省内存,二来能够加速应用性能,下面结合systrace介绍Android如何启动一个应用进程,应用启动第一个介入的管理者是AMS,应用启动过程中AMS发现没有process创建,就会请求zygote fork进程,下图就是AMS中创建进程的耗时:

AMS(ActivityManagerService)请求zygote创建进程的流程如下:

##ActvityManager:startProcessLocked

private final void startProcessLocked(ProcessRecord app, String hostingType,

String hostingNameStr, String abiOverride, String entryPoint, String[] entryPointArgs) {

boolean isActivityProcess = (entryPoint == null);

if (entryPoint == null) entryPoint = “android.app.ActivityThread”;

Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "Start proc: " +app.processName);

checkTime(startTime, “startProcess: asking zygote to start proc”);

ProcessStartResult startResult;

if (hostingType.equals(“webview_service”)) {

startResult = startWebView(entryPoint,

app.processName, uid, uid, gids, debugFlags, mountExternal,

app.info.targetSd

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值