Android 性能优化 05---App启动优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 性能优化 05---App启动优化相关的知识,希望对你有一定的参考价值。

参考技术A 其实启动框架就是一个任务调度系统,是手淘启动的“大管家”。
管家要做的事情就是把它们的关系梳理得明明白白,有条不紊,合理安排位置、调度时间,同时提升硬件资源的利用率。

总结下来无非就是两点:

有向无环图[拓扑排序]

可用方案
APT,字节码插桩,利用ContentProvider
面试题LeakCanary 为什么不需要在Application中手动初始化?

①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起 startActivity请求;
②system_server进程接收到请求后,向zygote进程发送创建进程的请求;
③Zygote进程fork出新的子进程,即App进程;
④App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
⑤system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC 向App进程发送scheduleLaunchActivity请求;
⑥App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主 线程发送LAUNCH_ACTIVITY消息;
⑦主线程在收到Message后,通过反射机制创建目标Activity,并回调 Activity.onCreate()等方法。
⑧到此,App便正式启动,开始进入Activity生命周期,执行完 onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。

应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动、温启动与热启动。

adb命令启动应用,一般会输入三个值:ThisTime、TotalTime与WaitTime。
1.WaitTime:包括前一个应用Activitypause的时间和新应用启动的时间;
2.ThisTime:表示一连串启动Activity的最后一个Activity的启动耗时;
3.TotalTime:表示新应用启动的耗时,包括新进程的启动和Activity的启动,但不包括前一个应用Activitypause
的耗时。

StrictMode是一个开发人员工具,它可以检测出我们可能无意中做的事情,并将它们提请我们注意,以便我 们能够修复它们。 StrictMode最常用于捕获应用程序主线程上的意外磁盘或网络访问。帮助我们让磁盘和网络操作远离主线程, 可以使应用程序更加平滑、响应更快

当系统加载并启动 App 时,需要耗费相应的时间,这样会造成用户会感觉到当点击 App 图标时会有 “延迟” 现象,
为了解决这一问题,Google 的做法是在 App 创建的过程中,先展示一个空白页面,让用户体会到点击图标之后立
马就有响应。
如果你的application或activity启动的过程太慢,导致系统的BackgroundWindow没有及时被替换,就会出现启动
时白屏或黑屏的情况(取决于Theme主题是Dark还是Light)。

消除启动时的黑/白屏问题,大部分App都采用自己在Theme中设置背景图的方式来解决。

然后在Activity的onCreate方法,把Activity设置回原来的主题。

这么做,只是提高启动的用户体验。并不能做到真正的加快启动速度。

Android性能调优篇之探索JVM内存分配

详细内容请查看我的简书地址:Android性能调优篇之探索JVM内存分配

或者我的个人博客地址:Android性能调优篇之探索JVM内存分配

以上是关于Android 性能优化 05---App启动优化的主要内容,如果未能解决你的问题,请参考以下文章

Android性能优化总提纲

Android性能优化总提纲

Android性能优化总提纲

Android性能优化系列之App启动优化

Android性能优化第(八)篇---App启动速度优化之耗时检测处理

Android性能优化之启动优化