冷启动相关概念
应用启动概念
- 冷启动:首次打开app或者app彻底销毁后再次打开app(开关机后),这也是我们进行启动速度优化的主要方向。
- 热启动:应用运行中按home键再打开应用。
- 温启动:介于两者之间,比如:说用户关闭应用又重新启动应用,这是应用进程还没被销毁。或者系统主动释放掉后台应用,然后用户就将它启动,这时虽然要再重新执行onCreate,但是saveInstanceState实例已经保存,可以提高启动速度。
冷启动时间
冷启动优化就是要缩短冷启动的时间,冷启动时间获取方法,先kill掉进程,或者重新安装一个应用,串口输入下面的命令:
am start -W com.jane.demo/.MainActivity
冷启动时间测试需要多次启动,然后计算平均值,这里注意,两次启动之间尽可能大于3s,可使用下面指令重复执行。
am force-stop com.jane.demo; sleep 5; am start -W com.jane.demo/.MainActivity; sleep 5;
发送命令后有下面的数据,TotalTime是冷启动的时间。
Status: ok
LaunchState: COLD
Activity: com.jane.demo/.MainActivity
TotalTime: 788
WaitTime: 792
冷启动优化方法
优化前注意应用版本(debug还是release),之前新建一个空项目(只显示一个hello world),想测试想一个空项目启动大概需要多长时间。结果用了接近800ms,震惊不已,后面发现是debug版本的原因,改为release后400ms,降低了一半。
布局加载优化
1、减少布局复杂度
可以使用merge等减少界面层级,这个是比较常用的方法。
2、异步加载
也可以使用异步加载布局的方式AsyncLayoutInflater 。AsyncLayoutInflater是谷歌提供的一个异步加载UI方案,其可以异步加载控件并回调给UI,以此减少主线程消耗。对源码和实现原理感兴趣的可以看到后面的参考文章,这里简单看下使用方式:
先在app的gradle下加入依赖包。
implementation 'androidx.asynclayoutinflater:asynclayoutinflater:1.0.0'
如下为测试代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//测试1:使用原始方式加载
//setContentView(R.layout.activity_main);
//测试2:使用AsyncLayoutInflater异步加载
new AsyncLayoutInflater(this

最低0.47元/天 解锁文章
753

被折叠的 条评论
为什么被折叠?



