一、启动流程分析
Launcher启动涉及 系统服务初始化 和 应用自身启动 两个阶段:
`
A[SystemServer启动] --> B[AMS.systemReady()]
B --> C[AMS.startHomeActivityLocked()]
C --> D[Zygote进程fork Launcher进程]
D --> E[Launcher Application初始化]
E --> F[Main Activity启动及UI绘制]`
二、关键源码路径与优化点
1. 系统服务优化(SystemServer & AMS)
-
源码路径:
frameworks/base/services/java/com/android/server/SystemServer.javaframeworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
-
优化点:
- 延迟非关键服务初始化:在
SystemServer的startOtherServices()中,将非核心服务(如蓝牙、Wi-Fi,NFC)延迟到Launcher启动后初始化。 - 并行化服务启动:通过
SystemServiceManager调整服务启动顺序,允许部分服务并行启动。利用Android 14新增的@ConcurrentService注解实现服务并行初始化
@ConcurrentService(phase = SystemService.PHASE_BOOT_COMPLETED) class PowerManagerService extends SystemService {...}-
提前触发Zygote预加载:在
ZygoteInit中预加载Launcher常用类(如Resources、Theme),减少进程fork时间。
- 延迟非关键服务初始化:在
2. AMS启动决策优化
源码路径
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
优化策略
- Zygote预加载增强:在startProcessLocked()前触发Launcher相关资源预加载
` // 扩展预加载资源类型(新增Launcher专属图标/布局)
ZygotePreload.addLauncherSpecificResources(); `
-
Binder事务合并:将bindApplication与scheduleLaunchActivity合并为原子操作
mAtmService.atomicBindAndLaunch(processName, intent);
二、Zygote进程优化
1. 预加载机制增强
源码路径
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
优化策略
类预加载分级:在preload()方法中实现三级预加载策略
`preloadCommonClasses(); // 基础系统类
preloadLauncherClasses(); // Launcher专属类(如BaseDraggingActivity)
preloadSharedLibs(); // 共享库(如libhwui.so)`
资源预加载优化:扩展preloadResources()加载Launcher高频资源
`TypedArray launcherRes = mResources.obtainTypedArray(R.array.launcher_preload_drawables);`
2. 进程创建加速
源码路径
frameworks/base/core/java/android/os/ZygoteProcess.java
优化策略
Socket通信协议优化:采用二进制协议替代文本协议降低IPC耗时
USAP池预初始化:在SystemServer启动时预创建USAP进程池
三、Launcher应用层优化
1. Application初始化重构
源码路径
packages/apps/Launcher3/src/com/android/launcher3/LauncherAppState.java
优化策略
三级任务调度:通过AppStartup库实现初始化任务分级
`AppInitializer.getInstance(this)
.initializeComponent(StartupType.CRITICAL) // 关键路径(主线程同步)
.initializeComponent(StartupType.ASYNC) // 异步任务(图标缓存加载)
.initializeComponent(StartupType.DEFERRED);// 延迟任务(插件预加载)`
2. 数据加载优化
-
源码路径
packages/apps/Launcher3/src/com/android/launcher3/model/LoaderTask.java -
优化策略
- 工作区数据预取:在
loadWorkspace()阶段使用内存映射文件加速加载
- 工作区数据预取:在
mIconCache.preloadIconsInMappedFile();
- 数据库索引优化:改造LauncherProvider的SQLiteOpenHelper实现WAL模式
3. UI渲染加速
-
源码路径
frameworks/base/libs/hwui/RenderNode.cpp -
优化策略
- 硬件层缓存:在Activity启动时预生成RenderNode硬件层
getWindow().getDecorView().buildLayer();
- 异步布局加载:改造LauncherActivity使用ConstraintLayout+ViewStub2.0
<androidx.constraintlayout.widget.ConstraintLayout>
<ViewStub2 android:id="@+id/hotseat_stub"
android:layout="@layout/hotseat_deferred"/>
</androidx.constraintlayout.widget.ConstraintLayout>
#### **四、系统级绘制优化**
1. SurfaceFlinger策略调整
-
源码路径
frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp -
优化策略
- 首帧优先级:在
queueBuffer()阶段标记LAUNCHER_BUFFER为高优先级
bufferQueue->setBufferPriority(HIGH_PRIORITY);
2. HWUI渲染管线优化
- 首帧优先级:在
-
源码路径
frameworks/base/libs/hwui/threading/RenderThread.cpp -
优化策略
- 预编译着色器:在应用安装时生成SPIR-V格式的预编译Shader
RenderThread.getPipeline().precompileShaders();
五、监控体系构建
1. 全链路Trace监控
`// 系统层埋点
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "AMS_launchHome");
// 应用层埋点
class LauncherActivity {
void onCreate() {
Trace.beginSection("LauncherUI_Inflate");
//...
Trace.endSection();
}
}`
##### 2. **线上指标监控**
-
关键指标
-
冷启动耗时:
ActivityTaskManagerService#reportLaunchTime -
首帧渲染时间:
Choreographer.FrameCallback
-