launch Activity流程

(1)Input触控事件处理

(2)应用进程创建与启动

  通知桌面应用的Activity进入Paused状态后,若需要启动的应用Activity所在的进程不存在,先调用AMS的startProcessAsync()创建应用进程,其中会执行Zygote.forkAndSpecialize()创建子进程。应用进程初始化时会设置默认的java异常处理机制,并JNI调用启动进程的binder线程池,然后通过反射创建ActivityThread对象调用main()创建并启动主线程的loop消息循环,接着通过binder调用AMS的attachApplication()接口将自己attach注册到AMS中。

(3)应用主线程消息循环机制建立

(4)应用Application和Activity组件创建与初始化

AMS执行应用的attachApplication()注册请求过程中,会触发调用handleBindApplication()初始化函数,创建应用Applicationcontext对象,还会让Art虚拟机加载应用APK的Dex文件到内存,并加载应用APK的Resource资源,然后创建应用的Application对象,还有执行Application.onCreate()Application初始化后,会调用ActivityStackSupervisor.realStartActivityLocked()创建Activitycontext对象,通过反射创建Activity对象,并执行Activity.attach()创建应用窗口的PhoneWindow对象和设置WindowManage。在Activity.onCreate()setContentView()会创建窗口的DecorView对象,在onResume方法会执行WindowManager.addView()开启视图绘制逻辑,创建ActivityViewRootImpl对象,调用ViewRootImpl.setView()开启UI界面绘制动作。

(5)应用UI布局与绘制

调用ViewRootImpl.setView()会执行requestLayout()调用触发measure、layout和draw动作,然后通过Binder调用WMS的addView接口,实现添加和注册应用窗口操作。界面第一次执行绘制任务时,会通过Binder IPC调用WMS的relayout接口,实现窗口尺寸的计算,并向系统申请用于本地绘制渲染的Surface

(6)RenderThread渲染

(7)SurfaceFlinger合成显示

应用通过Binder调用dequeueBuffer()从SurfaceFlinger进程中管理的BufferQueue中申请一个处于free状态的可用Buffer,如果此时没有可用Buffer则阻塞等待。接着选择使用CPU或GPU渲染,再通过Binder调用queueBuffer()将缓存数据返回给应用进程对应的BufferQueue,并申请sf类型的Vsync唤醒SurfuaceFlinger处理。在收到Vsync信号后,使用acquireBuffer()获取对应BufferQueue中的Buffer进行合成操作,然后调用releaseBuffer()将Buffer置为可用free状态,返回到应用对应的BufferQueue中。

参照:mp.weixin.qq.com/s/DXg5-Y7Fj...

相关推荐
andyweike27 分钟前
Android Automotive
android
又见情义1 小时前
记一次 RK3568 Android 13 蓝牙反复重启问题的排查与修复
android
hai_android1 小时前
Kotlin Flow combine 源码剖析:一个 Channel 如何优雅合并多条流
android·java·kotlin
敲代码的瓦龙3 小时前
Jetpack?ViewModel!!!
android·开发语言·kotlin·android-studio
Godikov3 小时前
Android 工控终端实战:从秒级卡顿到毫秒响应,SQLite/LitePal 性能优化全记录
android
星间都市山脉5 小时前
Android16 SystemService.onBootPhase 调用时机
android·java·linux·windows·ubuntu
swithun5 小时前
不用 WebView,我用 Kotlin + Compose Multiplatform 重写 Mermaid,并做了 2048 组对拍
android·开源·kotlin
AI吃大瓜5 小时前
人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测)
android·yolo·人脸检测·人体检测·行人检测·yolo26
与海boy6 小时前
Prompt模版
android·prompt
FlightYe6 小时前
音视频修炼之编码器(一):AVC、HEVC编码器内部
android·linux·c++·音视频