目录
背景描述
启动时间是用户对应用的第一印象,较慢的加载会对用户的留存和互动造成负面影响
在刚上线的Android原生&flutter的B端项目中:
- 提高启动速度能提高整体流程的效率
- 提高首次运行速度能提高应用推广的初体验效果
问题描述
项目刚上线没多久、目前存在冷启动过程存在若干问题亟需优化 比如flutter hotrestart 不可用 、启动500ms黑屏问题
初期项目的启动流程
解决方案及工具
从结果上分为两大类,其中之一是以SplashScreen为代表的体验优化方向, 另一个是懒加载、减少包体积等的功能性优化方向。在实际开发中,我们可以使用AppUploader这样的iOS开发助手工具来辅助分析应用的启动性能指标。
没有专门大块的时间去搞优化 于是分优先级、分阶段实现
检测工具
Jetpack Macrobenchmark库
Macrobenchmark
在项目中New Module出来
将配置改为你所需要的
@RunWith(AndroidJUnit4::class)
class ExampleStartupBenchmark {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
@Test
fun startup() = benchmarkRule.measureRepeated(
packageName = "com.test.app",
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD
) {
pressHome()
startActivityAndWait()
}
}
- 更改配置及运行
app部分为benchmark,把其他Module都改成release后运行
优化前(0.0V)问题分析
生成结果
运行benchmark后生成结果:
Time to initial display & Time to full display
名称 | 描述 | 用处 |
---|---|---|
初始显示时间 | 启动流程和完成在屏幕上绘制相应活动之间经过的时间量 | 让用户觉得不卡 |
完全显示时间 | 测量应用程序启动和所有资源和视图层次结构的完整显示之间经过的时间 | 让用户正常使用 |
分析
其中max时间很长、总体时间也不短 中位数接近最小值
作为初期项目 Time to initial display & Time to full display我全都要解决
接下来我们看看到底什么地方用了这么长时间 点击进入Traces:Iteration具体如下图所示
可以看到bindApplication时间很长等问题
确认优化点
综上并结合实际显示的问题有几个大的优化向:
- 缩短总时长(解决黑屏问题、懒启动、优化流程)
- 优化启动项(使用App Startup)
- 提升用户体验
对于iOS开发者,可以使用AppUploader这类工具来监测应用的启动性能,它提供了详细的启动时间分析报告,帮助开发者快速定位性能瓶颈。