一般来说,判定一个android项目性能优劣,我们有以下几个指标:
- 启动时间
- apk大小
- UI渲染
- 稳定性
- 内存占用
- 电量消耗
接下来,让我们就这几个指标展开来详述各自究竟应该怎样去优化。
启动时间
一般来说,应用启动时间分为三种
- 首次启动 –应用首次启动所花费的时间
- 非首次启动 –应用非首次启动所花费的时间
- 应用界面切换–应用界面内切换所花费的时间
一般来说,首次启动时间会比非首次启动要久,首次启动会做一些系统初始化工作,如缓存目录的生产,数据库的建立,SharedPreference的初始化
测量办法
- 第一种方式:通过am命令
adb shell am start -W -n com.xx.xx(包名)/.xx.xxActivity(lanch activity)
am是shell中集成的一个命令,ActivityManager的简写。一共需要提供两个参数-W,-n,其中-W是指启动完成之后,返回启动耗时,是最关键的一个参数。-n后面跟的是需要启动的App的包名和launchActivity。点击确定之后,会发现App被成功启动,且adb中会输入以下结果
Starting: Intent { cmp=com.xx.xx/.xx.xxActivity }
Status: ok
Activity: com.xx.xx/.xx.xxActivity
ThisTime: 176
TotalTime: 176
Complete
其中ThisTime即是本次App启动所花费的时间。
此法获取的启动时间非常精准,可精确到毫秒。
非launchActivity直接运行该命令会报java.lang.SecurityException: Permission Denial
错误,需要先获取root权限.
- 第二种方式:在DDMS或Logcat日志中过滤TAG为ActivityManaer
Displayed com.xx.xx/.xx.xxActivity: +275ms
优化手段
- 启动过程中做的事情越少越好
- 不在UI线程上做耗时操作
- 在合适的时机开始后台任务
实例说明
- 很多第三方集成平台都会要求在launchActivity中初始化,但大部分其实我们可以把这些初始化工作延迟到第一次使用这些平台功能的时候
- 很多项目的launchActivity都是一个splash页面,用来展示项目信息,一般都会要求延时几秒,可以在延时进入主界面的过程中做一些必要的项目初始化工作
总结
相对来说,优化启动时间是比较容易的,最关键一点就是找到影响启动时间的因素,然后想办法把其挪出去就好了。