Android flutter项目 启动优化实战(一)使用benchmark分析项目

目录

背景描述

启动时间是用户对应用的第一印象,较慢的加载会对用户的留存和互动造成负面影响

在刚上线的Android原生&flutter的B端项目中:

  1. 提高启动速度能提高整体流程的效率
  2. 提高首次运行速度能提高应用推广的初体验效果

问题描述

项目刚上线没多久、目前存在冷启动过程存在若干问题亟需优化 比如flutter hotrestart 不可用 、启动500ms黑屏问题

初期项目的启动流程

解决方案及工具

从结果上分为两大类,其中之一是以SplashScreen为代表的体验优化方向, 另一个是懒加载、减少包体积等的功能性优化方向。在实际开发中,我们可以使用AppUploader这样的iOS开发助手工具来辅助分析应用的启动性能指标。

没有专门大块的时间去搞优化 于是分优先级、分阶段实现

检测工具

Jetpack Macrobenchmark库
Macrobenchmark

  1. 在项目中New Module出来

  2. 将配置改为你所需要的

kotlin 复制代码
@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()
    }
}
  1. 更改配置及运行
    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时间很长等问题

确认优化点

综上并结合实际显示的问题有几个大的优化向:

  1. 缩短总时长(解决黑屏问题、懒启动、优化流程)
  2. 优化启动项(使用App Startup)
  3. 提升用户体验

对于iOS开发者,可以使用AppUploader这类工具来监测应用的启动性能,它提供了详细的启动时间分析报告,帮助开发者快速定位性能瓶颈。

相关推荐
2501_915106328 小时前
苹果软件加固与 iOS App 混淆完整指南,IPA 文件加密、无源码混淆与代码保护实战
android·ios·小程序·https·uni-app·iphone·webview
2501_9160137411 小时前
iOS 推送开发完整指南,APNs 配置、证书申请、远程推送实现与上架调试经验分享
android·ios·小程序·https·uni-app·iphone·webview
2501_9159090616 小时前
HTML5 与 HTTPS,页面能力、必要性、常见问题与实战排查
前端·ios·小程序·https·uni-app·iphone·html5
OPTree41218 小时前
H3C网络设备 实验三: 搭建两个局域网,使两个局域网相互通信(路由器,自动分配ip,DHCP协议)
网络·tcp/ip·智能路由器
CiLerLinux19 小时前
第五十二章 ESP32S3 UDP 实验
网络·单片机·嵌入式硬件·网络协议·udp
切糕师学AI20 小时前
P2P技术
网络·网络协议·p2p
2501_916013741 天前
iOS 上架 App 全流程实战,应用打包、ipa 上传、App Store 审核与工具组合最佳实践
android·ios·小程序·https·uni-app·iphone·webview
Chandler241 天前
一图掌握 网络协议 核心要点
网络协议·tcp/ip·计算机网络·http
一叶飘零_sweeeet1 天前
从轮询到实时推送:将站内消息接口改造为 WebSocket 服务
java·websocket
Derrick__11 天前
Python网络编程——TCP编程
python·网络协议·tcp/ip