标签:measure 读写 过程 图片 执行 展示 常见问题 混合 改善
介绍了前面的优化的方案后,这里我们在针对应用的启动优化做一下讲解和说明。
一个应用App的启动速度能够影响用户的首次体验,启动速度较慢(感官上)的应用可能导致用户再次开启App的意图下降,或者卸载放弃该应用程序。
应用程序启动有主要分为两种状态,每种状态都会影响应用程序对用户可见所需的时间:冷启动,热启动。
注:冷启动、热启动不是官方的定义,而是我们基于用户的角度考虑的定义。
在冷启动开始时,系统有三个任务。这些任务是:
一旦系统创建应用程序进程,应用程序进程就会负责下一阶段。这些阶段是:
应用程序进程完成第一次绘制后,系统进程会交换当前显示的背景窗口,将其替换为主Activity。此时,用户可以开始使用该应用程序。
这里我们建议始终根据冷启动的假设进行优化。这样做也可以改善热启动的性能。
上面我们说了,冷启动的阶段执行的操作为:
现在 App 应用启动都会先进入一个闪屏页(LaunchActivity) 来展示应用信息。
系统默认会在启动应用程序的时候启动空白窗口 ,直到 App 应用程序的入口Activity创建成功,视图绘制完毕。但是存在的问题就是在进入闪屏页的时候,会有2秒左右的白屏/灰屏的界面。
为了更顺滑无缝衔接我们的闪屏页,可以在启动 Activity 的 Theme中设置闪屏页图片,这样启动窗口的图片就会是闪屏页图片,而不是白屏。配置代码如下:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowBackground">@drawable/lunch</item> //闪屏页图片 <item name="android:windowFullscreen">true</item> <item name="android:windowDrawsSystemBarBackgrounds">false</item><!--显示虚拟按键,并腾出空间--> </style>
这样设置的话,就会在冷启动的时候,展示闪屏页的图片,等App进程初始化加载入口 Activity (也是闪屏页) 就可以无缝衔接。
其实这种方式并没有真正的加速应用进程的启动速度,而只是通过用户视觉效果带来的优化体验。
备注:上面的方案适用于闪屏页为整张图片为闪屏内容(闪屏页图片推荐.9格式,防止拉伸失真)。不适用于闪屏页为多个元素混合的。后者推荐参考 Android 项目优化(二):启动页面优化。
App冷启动耗时统计方式主要是:adb 命令统计、系统日志统计。
adb命令 : adb shell am start -S -W 包名/启动类的全限定名
, -S 表示重启当前应用。示例如下:
C:\Android\Demo>adb shell am start -S -W com.example.moneyqian.demo/com.example.moneyqian.demo.MainActivity
Stopping: com.example.moneyqian.demo
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.moneyqian.demo/.MainActivity }
Status: ok
Activity: com.example.moneyqian.demo/.MainActivity
ThisTime: 2247
TotalTime: 2247
WaitTime: 2278
Complete
ThisTime : 最后一个 Activity 的启动耗时(例如从 LaunchActivity - >MainActivity「adb命令输入的Activity」 , 只统计 MainActivity 的启动耗时)
TotalTime : 启动一连串的 Activity 总耗时.(有几个Activity 就统计几个)
WaitTime : 应用进程的创建过程 + TotalTime .
总结一下 : 如果需要统计从点击桌面图标到 Activity 启动完毕,可以用WaitTime作为标准,但是系统的启动时间优化不了,所以优化冷启动我们只要在意 ThisTime 即可。
根据系统日志来统计启动耗时,在Android Studio中查找已用时间,必须在logcat视图中禁用过滤器(No Filters)。因为这个是系统的日志输出,而不是应用程序的。
比如我们可以通过过滤displayed
输出的启动日志. 示例如下:
我们知道有很多第三方组件(包括App应用本身)都在 Application 中完成初始化操作。但是在 Application 中完成繁重的初始化操作和复杂的逻辑就会影响到应用的启动性能。
通过分析一下,我们可以知道还是有机会优化这些工作以实现冷启动的性能改进的,分析后发现影响冷启动时间的常见问题如下:
我们可以根据这些组件的轻重缓急之分,对初始化做一下分类 :
在进行优化的时候,需要注意以下几种情况:
在优化好启动时间后,我们就可以在针对闪屏页的时间,进行调整优化,具体公式为:
闪屏页展示总时间 = 组件初始化时间 + 剩余展示时间
标签:measure 读写 过程 图片 执行 展示 常见问题 混合 改善
原文地址:https://www.cnblogs.com/renhui/p/11768163.html