性能优化 -- 启动优化

2021-01-06  本文已影响0人  突然思考的杨小六

启动优化

app启动分为:冷启动;热启动,温启动三种
冷启动: 耗时最多流程:
冷启动经过的流程
点击app --> ipc -->Process.start(进程创建)
--> ActivityThread(应用入口,main函数创建looper,hander等创建)
--> bindApplication(通过反射调用应用的application及生命周期)
-->lifeCycle( activity的生命周期)
--> ViewRootImpl(真正的界面绘制入口)

热启动: 最快,从后台切入到前台
温启动:只触发actvity的生命周期 不会创建进程

优化的方向:

Application和Activity生命周期这些才可以控制,所以优化的方向便有了

启动时间查看

1. adb 命令: 线下使用方便,但是不用再线上场景使用
adb shell am start -W packagename/首屏activity

使用:

Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.czy.yq_wanandroid/.business.SplashActivity }
Status: ok
LaunchState: COLD
Activity: com.czy.yq_wanandroid/.business.SplashActivity
TotalTime: 1293  //所有activity启动耗时
WaitTime: 1294// AMS启动activity的总耗时
Complete


2. 手动打点

记录开始时间:application的attachBaseContext方法开始计时
记录结束的时间: onWindowFocusChanged时界面刚开始渲染的时候会调用可以用来作为结束时间,但是 我们记录的意义是看从启动到界面展示时的总耗时,所以我们也可以选择界面展示后的时间来作为结束时间

启动优化

1). 启动页主题添加背景

2). 合理的使用异步初始化、延迟初始化、懒加载机制

application初始化时候可以自定义自己的启动器,自定义task初始化:可配置异步非异步,等待执行,依赖执行。
对于不需要在application初始化的功能可进行延迟初始化,在界面加载出来后通过idelhanler(消息队列无消息时才进行处理)进行初始化。

3). 提前加载SharePreferences,
https://qingmei2.blog.csdn.net/article/details/109134825
在multidex之前CPU是空闲的,加载系统类是可行的,所以可充分利用这段时间加载SharedPreferences;

4). 合理使用IdleHandler进行延迟初始化。

5). 启动阶段不要启动子进程
初始化子进程会消耗CPU资源,在启动阶段会导致主进程CPU资源紧张,导致启动阶段资源紧张初始化过慢;

上一篇 下一篇

猜你喜欢

热点阅读