本文主要汇总Android应用的启动速度优化方案。

阿里开源的alpha启动框架

github地址: alpha

更快!更高效!异步启动框架Alpha完全解析

其实除了在冷启动的时候需要对各种任务异步或同步执行,在某一个功能点里,也会用到,比如一个详情页,会根据详情ID请求数据接口后,做很多其他接口的请求和UI的展示工作,那么都可以使用这个alpha框架来组织任务。

底层是使用到了线程池来进行异步任务处理(不然呢?),虽然也是支持多进程的,但是多进程带来的开销与不使用到底哪个更优,还是需要根据业务情况在开发阶段多做耗时测试。

总结:相比使用Rxjava的各种map、zip操作符而言,alpha框架使用简单,学习成本低,但是其场景仍比较理想化,实际业务中可能会有多个分支,很难在一个project里使用add、after来完成,所以对于这类需要异步或者同步交叉的逻辑流,还是使用Rxjava或者Java 8中的Stream API,或者使用Kotlin里协程的Flowable来组织,虽然学习成本大了点,但是可以应对各种复杂场景。

RxJava 3.X

Kotlin协程和在Android中的使用总结(五 Collection、Sequence、Flow与RxJava对比(上))

Jetpack的新成员App Startup

这个库主要是用来针对项目中用到很多第三方库时,如果这些第三方库使用所谓的无Context初始化,即自己在库内搞了一个ContentProvider来做初始化,那么引入这样的多个库就会导致应用启动时创建多个ContentProvider,这无疑对内存和启动时间都有影响。

而如果能在一个ContentProvider中完成所有第三方库的初始化,那就能减少ContentProvider创建的时间。

App Startup就是这样的一个库,即每个第三方库都使用App Startup的API来初始化,这样看来,App Startup这个库主要是用来开发SDK时使用,不过现在一般的项目都会做很多的组件拆分,因此在每个需要初始化的拆分的组件内使用App Startup,则可以使得最终整个App中,仅使用一个ContentProvider来完成各库的初始化。

这里推荐两篇博文:

Jetpack新成员,App Startup一篇就懂

Jetpack 最新成员 AndroidX App Startup 实践以及原理分析

总结:不知道现在多少项目已经改成AndroidX了,比较马上都2021年了,如果大家都改成了AndroidX,那这个Jetpack的新成员App Startup还是挺好的,不过即使应用也是在SDK中使用,主项目无感知。

抖音的BoostMultiDex

开源 | BoostMultiDex:挽救 Android Dalvik 机型APP升级安装体验

由于优化只是针对4.4以下的Dalvik机型,而现在多数app都已经把最低兼容版本设为5.0,甚至是6.0,所以用处也比较有限。

其他方案

参考:

都9102年了,Android 冷启动优化除了老三样还有哪些新招?

支付宝 App 构建优化解析:通过安装包重排布优化 Android 端启动性能

支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」

Android App 启动优化全记录

如果觉得我的文章对你有用,请随意赞赏