关注微信公众号:程序员小安,精彩文章按期推送。程序员
APP冷启动比较慢,点击桌面图片须要用户等待好久,体验较差。shell
冷启动(Cold start) 场景:冷启动是指APP在手机启动后第一次运行,或者APP进程被kill掉后在再次启动。 可见冷启动的必要条件是该APP进程不存在,这就意味着系统须要建立进程,APP须要初始化。在这三种启动方式中,冷启动耗时最长,对于冷启动的优化也是最具挑战的。所以本文重点谈论的是对冷启动相关的优化。 生命周期:Process.start->Application建立->attachBaseContext->onCreate->onStart->onResume->Activity生命周期 启动速度:在几种启动类型中最慢,也是咱们优化启动速度最大的拦路虎bash
温启动(Warm start) 场景:App进程存在,当时Activity可能由于内存不足被回收。这时候启动App不须要从新建立进程,可是Activity的onCrate仍是须要从新执行的。场景相似打开淘宝逛了一圈而后切到微信去聊天去了,过了半小时再次回到淘宝。这时候淘宝的进程存在,可是Activity可能被回收,这时候只须要从新加载Activity便可。 生命周期:onCreate->onStart->onResume->Activity生命周期 启动速度:较快微信
热启动(Hot start) 场景:App进程存在,而且Activity对象仍然存在内存中没有被回收。能够重复避免对象初始化,布局解析绘制。 场景就相似你打开微信聊了一会天这时候出去看了下日历 在打开微信 微信这时候启动就属于热启动。 生命周期:onResume->Activity生命周期 启动速度:快app
adb shell am start -W [packageName]/[packageName.***Activity]
复制代码
例如:布局
adb shell am start -W com.dateyou.test/com.datayou.test.ui.home.PageLoadingActivity
复制代码
固然为告终果更加准确,能够执行屡次取平均值。学习
adb shell am start -S -R 10 -W com.dateyou.test/com.datayou.test.ui.home.PageLoadingActivity
复制代码
其中-S表示每次启动前先强行中止,-R表示重复测试次数。每一次的输出以下所示信息。测试
冷启动指的是应用程序从进程在系统不存在,到系统建立应用运行进程空间的过程。冷启动一般会发生在一下两种状况: 1)设备启动以来首次启动应用程序 2)系统杀死应用程序以后再次启动应用程序优化
在冷启动的最开始,系统须要负责作三件事: 1)加载以及启动app 2)app启动以后马上显示一个空白的预览窗口 3)建立app进程ui
一旦系统完成建立app进程后,app进程将要接着负责完成下面的工做: 1)建立Application对象 2)建立而且启动主线程ActivityThread 3)建立启动第一个Activity 4)Inflating views 5)布局屏幕 6)执行第一次绘制 一旦app进程完完成了第一次绘制工做,系统进程就会用main activity替换前面显示的预览窗口,这个时候,用户就能够正式开始与app进行交互了。
1)预览窗口 为何启动时会出现短暂黑屏或白屏的现象?当用户点击你的app那一刻到系统调用Activity.onCreate()之间的这个时间段内,WindowManager会先加载app主题样式中的windowBackground作为app的预览元素,而后再真正去加载activity的layout布局。 很显然,若是你的application或activity启动的过程太慢,致使系统的BackgroundWindow没有及时被替换,就会出现启动时白屏或黑屏的状况(取决于你的主题是Dark仍是Light)。 解决办法:在style中自定义一个主题,在其中放一张背景图片或者广告页,让用户先看默认图。
2)Application OnCrate()优化 1.耗时操做子线程中进行 2.非必要初始化懒加载
3)Activity onCreate()优化 1.耗时操做子线程中进行 2.布局层次减小
若有错误欢迎指出来,一块儿学习。