Android Perfetto 监控应用启动耗时

Perfetto 是一个 Google 开发的用于安卓系统性能监控和调试 的工具,它旨在提供实时数据收集和可视化功能,帮助我们分析和优化应用程序的性能表现。Perfetto 可以捕获系统事件、CPU、内存、网络、GPU 等性能指标数据,并将其记录为轻量级的 Trace 文件,我们可以通过 Perfetto 的可视化界面(**https://ui.perfetto.dev/**)或者命令行工具进行查看和分析。

此前更多使用的是 Systrace,而 Perfetto 相比 Systrace 有更多的优势。

Perfetto 支持更多的性能指标数据的采集和记录,包括系统事件、内核跟踪、堆栈跟踪等,提供了更全面的性能分析功能。其次, Perfetto 的可视化界面也更加友好和直观,方便我们快速理解和分析数据。

在实际的开发过程中,做启动优化和监控单纯靠 Traceview 是不太准确的,因为 Traceview 获取的信息比较局限,而 Perfetto 能站在上帝视角来查看应用的启动过程

接下来我举一个使用 Perfetto 的 ADB 命令来监控应用启动耗时的例子


在应用启动的时候故意写一个耗时(渲染一个布局800次):

Kotlin 复制代码
class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        for (i in 0 until 800) {
            LayoutInflater.from(this).inflate(R.layout.activity_main, null)
        }
    }
}

把应用安装到手机上,杀掉要监控的应用的进程,回到桌面,准备工作就算完成了


使用 adb 命令开启监控:

复制代码
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 5s sched freq idle am wm gfx view binder_driver hal dalvik res memory

一按回车会进入录制状态:

在录制状态下打开应用,等待录制结束

录制完成后再使用 adb 命令将 Trace 文件导到本地电脑上:

复制代码
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace

将 Trace 文件拖入可视化界面(**https://ui.perfetto.dev/**)它会自动打开

确认有 Android App Startups 标识(没有的话重新录制一遍)

展开要监控的包名就能看到启动信息了:

这个 bindApplication 就是 App 启动初始化的过程了,可见是非常长的,也就是比较耗时。我们将其放大即可看到具体的耗时操作(使用键盘上的 ws 可以缩放,ad 可以左右移动)

可见上面密密麻麻的 inflate,因为我们在 Application 的 onCreate 中渲染了 800 次布局


我们知道了做了哪些耗时操作后,再根据业务实际情况进行异步等优化处理,这样子我们启动优化的目的就达到了

相关推荐
友人.2273 小时前
Android 底部导航栏 (BottomNavigationView) 制作教程
android
努力学习的小廉4 小时前
初识MYSQL —— 事务
android·mysql·adb
阿里云云原生4 小时前
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
android
.豆鲨包4 小时前
【Android】Android内存缓存LruCache与DiskLruCache的使用及实现原理
android·java·缓存
JulyYu5 小时前
【Android】针对非SDK接口的限制解决方案
android·客户端
猪哥帅过吴彦祖6 小时前
Flutter 系列教程:应用导航 - Navigator 1.0 与命名路由
android·flutter·ios
2501_916008897 小时前
iOS 跨平台开发实战指南,从框架选择到开心上架(Appuploader)跨系统免 Mac 发布全流程解析
android·macos·ios·小程序·uni-app·iphone·webview
stevenzqzq7 小时前
Android Hilt教程_构造函数
android
鹏多多8 小时前
flutter图片选择库multi_image_picker_plus和image_picker的对比和使用解析
android·flutter·ios