Android启动分析数据异常问题解决方案
启动分析各指标定义
启动监控用于监控、还原C端用户启动App时的真实感知情况。
一共有三种启动类型:
首次启动:App安装后的第一次启动
冷启动:App进程被"杀死"(包括手动方式、被动系统回收等),再次触发启动的过程
热启动:App进程存活,再次触发启动的过程(包括前后台切换、back退出再次进入等)
其中,首次启动和冷启动会对启动过程中进行启动时间的分解监控,包括初始化时长、构建时长、页面加载时长三个指标,热启动则只监控启动时长,监控指标说明如下:
首次启动或冷启动时长:从Application的attachbaseContext()开始到第一个Activity的onResume()结束;
热启动时长:如果退出时的Activity存在则从恢复该Activity的onRestart()开始到onResume()结束,如果退出时的Activity不存在则从Activity的onCreate()开始到onResume()结束。
问题:当使用APM插件进行自动集成时,部分客户反馈热启动数据丢失,无法监测到。
首先确认热启动模拟是否正确,只有App进程存活再次触发启动的过程(包括前后台切换、back退出再次进入等)才算为热启动。
确认热启动异常的Activity,是否进行了白名单的配置,若有多个Activity处于不同包名下,需要将全部包名配置到白名单中。如下所示:
efs { //是否对启动过程进程插桩的开关,如果使用自动集成监控则必须开启,false则不开启启动插件 enable = true //白名单,支持包力度,必须填写,如填写自己应用的包名 whiteList = [ "您自己的包名路径" ] }确认白名单中包名下配置的Activity,是否有继承关系,例如App内有BaseActivity,其他Activity部分或者全部继承于BaseActivity。若存在该情况,需要将BaseActivity配置到黑名单中,避免插件重复插桩。
例如,在项目中有MainActivity继承自BaseActivity,若只配置白名单,则在插桩时会将MainActivity和BaseActivity均插桩。此时,需要将BaseActivity放到黑名单中,保证插桩时仅对衍生类插桩。
efs { enable = true whiteList = [ "com.efs.sdk.demo" //com.efs.sdk.demo包名下同时包含MainActivity和BaseActivity ] blackList = [ "com.efs.sdk.demo.BaseActivity" ] }