项目场景:
Android 10系统,车载项目,在胎压界面反复请求胎压实时数据系统进入Android Recovery
问题描述
车机使用中突然进入Android Recovery界面类似电脑蓝屏,如下图
"Can't load Android system. Your data may be corrupt. If you continue to get this message,
you may need to perform a factory data reset and erase all user data stored on this device."
然后下面出现两行菜单:
"Try again"
"Factory data reset"
点击 Try again 可以正常进入系统。
原因分析:
拿到这种问题第一时间还是借助万能的网络,一通搜索发现这是 Android 8.0以后系统的一个自救措施,当内置的persistent类型的app频繁crash时,就启动这个自救功能。
从 /data/system/dropbox取到的内容也可以看到很多crash的文件
查看日志看到其中一款persistent类型service app有很多crash log,打开crash log可以看到报错的位置:
这个service app的AndroidManifest.xml中加了android:persistent=“true”,当这个service app crash后自动又马上拉起服务,频繁crash又频繁拉起成了一个死循环,最终导致系统进入了Android Recovery 模式
解决方案:
从上面的原因分析中的截图知道问题是我解析胎压时出现数组越界,解决方案一目了然。