Android App冷启动耗时优化

Android应用启动过程

Android应用启动过程,主要包含app::onCreate及执行前的Application阶段及Activity::onCreate执行之后的Activity阶段,以及两个阶段之间的间隙handleMessage阶段和最终页面渲染上屏完成前数据加载阶段四个区间组成。

具体来看,当App图标被点击后,zygote 进程 fork出当前应用进程,然后执行 ActivityThread 的 main方法,读取安装包中的二进制文件,并最终触发执行bindApplication方法**。**

接下来是对二进制中的符号进行解析及加载应用中需要的java类。这是我们在应用中能触达到的最早的阶段:attachBaseContext阶段,该阶段也是我们最早的执行预加载等用户自定义代码的时机。通常在这一阶段,我们可以对dex的加载过程进行干预,如进行MultiDex优化。

然后是加载依赖的第三方组件。上述所有工作完成后,回调app:onCreate方法。该方法是我们执行应用程序中各个模块的初始化及第三方组件的初始化的主要场所。

在app:onCreate执行完成后,主线程会收到大量来自子线程的消息,当主线程执行完这些任务后,才会开始调用Activity的onCreate方法,开启应用首屏页面的解析、布局、绘制过程。页面然后根据加载到的数据进行更新,最终提交给SurfaceFlinger合成上屏。

可行优化措施

(1)在attachBaseContext 阶段进行MultiDex优化

(2)通过类重排,减少内存页因PageFault而带来的耗时

(3)dex2oat时将verify后的结果保存为vdex,后续直接加载vdex,省略verify步骤

(4) 对app:onCreate中的初始化操作进行检查,删除非必要的初始化任务,同时将耗时任务改为子线程或异步

(5)在handleMessage阶段,对子线程任务进行重排,减少任务间间隙

(6)设置启动图片,避免启动过程中显示白屏

(7)Activity:onCreate阶段,避免IO等阻塞主线程的操作,复杂任务改为子线程,或者进行预加载

(8)DecoreView预加载

(9)优化页面布局代码或提前将xml转为代码配合inflate,减少xml解析及视图初始化耗时

(10)设计并实现异步任务调度、异步IO、异步UI、网络请求等通用框架,简化性能优化过程

相关推荐
用户69371750013847 分钟前
彻底搞懂api和testImplementation的区别
android
用户69371750013847 分钟前
Android闪退数据处理必备:8个优质开源项目推荐
android
用户69371750013847 分钟前
Android崩溃前关键数据拯救:从原理到落地的完整方案
android
杜子不疼.13 分钟前
【Rust】异步处理器(Handler)实现:从 Future 本质到 axum 实战
android·开发语言·rust
JMzz14 分钟前
Rust 中的内存对齐与缓存友好设计:性能优化的隐秘战场 ⚡
java·后端·spring·缓存·性能优化·rust
姝然_952715 分钟前
Android View绘制流程详解(一)
android
2501_915909061 小时前
iOS 26 性能监控工具有哪些?多工具协同打造全方位性能分析体系
android·macos·ios·小程序·uni-app·cocoa·iphone
美狐美颜SDK开放平台2 小时前
美颜SDK跨平台适配实战解析:让AI美颜功能在iOS与Android都丝滑运行
android·人工智能·ios·美颜sdk·直播美颜sdk·第三方美颜sdk·美颜api
这个昵称也不能用吗?3 小时前
【安卓 - 小组件】图片的渲染
android
2501_915918413 小时前
uni-app 上架 iOS 应用全流程 从云打包到开心上架(Appuploader)免 Mac 上传发布指南
android·macos·ios·小程序·uni-app·iphone·webview