技术经验谈 技术经验谈
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hss01248

一号线程序员
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 最佳实践

  • ui

  • 优化

  • aop

  • apm

    • android apm性能监控方案
    • android app启动节点和上报启动时间
      • 方案2 : ams
  • 架构

  • webview

  • rxjava

  • activity-fragment-view的回调和日志
  • Android加密相关
  • Android命令行操作
  • app后台任务
  • kotlin
  • kotlin漫谈
  • kotlin语言导论
  • sentry上传mapping.txt文件
  • so放于远程动态加载方案
  • states
  • Xposed模块开发
  • 一个关于manifest合并的猥琐操作
  • 玩坏android存储
  • 获取本app的安装来源信息
  • Android
  • apm
hss01248
2022-04-27
目录

android app启动节点和上报启动时间

# Android app启动节点和上报启动时间

# app启动的关键节点

经常利用content provider 和Androidx里的 startup库来对库进行初始化操作,那么app启动关键方法的执行顺序是什么样的呢? 怎么样控制我的库的启动顺序?

参考这篇文章: Android 多个 ContentProvider 初始化顺序 (opens new window)

精髓在这张图里:

image-20220427201057606

回答上面的问题: 怎么样控制我的库的启动顺序?

推荐用contentprovider,设置initOrder.

不推荐用startup,因为它只能在dependices()回调里通过依赖来控制,是强依赖,不够灵活

image-20220427202324777

# 启动时间怎么算

# 方案1: 参考firebase:

从第一个contentProvider的attachInfo,到第一个页面的onReusme:

app-start-foreground-background-traces (opens new window)

App start trace
This trace measures the time between when the user opens the app and when the app is responsive. In the console, the trace's name is _app_start. The collected metric for this trace is "duration".

Starts when the app's FirebasePerfProvider ContentProvider completes its onCreate method.

Stops when the first activity's onResume() method is called.

Note that if the app was not cold-started by an activity (for example, by a service or broadcast receiver), no trace is generated.
1
2
3
4
5
6
7
8

看一下FirebasePerfProvider的配置:

initOrder="101",基本是最大的. 项目里其他的Provider都没有怎么配置initOrder

    <provider
            android:name="com.google.firebase.perf.provider.FirebasePerfProvider"
            android:authorities="${applicationId}.firebaseperfprovider"
            android:exported="false"
            android:initOrder="101" />
1
2
3
4
5

可以自己搞个类似的trace打印/上报一下

image-20220427201630165

<provider
            android:name="com.xxx.logs.AppStartMeasurer"
            android:authorities="${applicationId}.AppStartMeasurer"
            android:exported="false"
            android:initOrder="102" />
1
2
3
4
5

然后就可以看logcat的日志输出+ trace平台的统计了

# 方案2 : ams

adb 命令:

adb shell am start -W 包名/入口activity全类名
1

在控制台会输出日志:

image-20220427202057491

这里的时间会比方案1统计到的时间小一些

编辑 (opens new window)
上次更新: 2022/08/25, 20:20:31
android apm性能监控方案
Android布局方案

← android apm性能监控方案 Android布局方案→

最近更新
01
截图后的自动压缩工具
12-27
02
图片视频文件根据exif批量重命名
12-27
03
chatgpt图片识别描述功能
02-20
更多文章>
Theme by Vdoing | Copyright © 2020-2025 | 粤ICP备20041795号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式