
问题
即将上线的车载中控系统,突然收到客户投诉。说黑屏了,严重问题!
这个recovery模式其实上面描述很清楚,只是系统数据未能加载。提示用户手动选择。但是页面比较吓人,所以着实让人头疼!
排查
通过存储的log日志,可以看到重启系统触发了救援程序。

为什么会进入这个程序呢,查看google文档可以看到:
-
system server在5分钟内重启5次以上,
-
永久性系统应用在 30 秒内崩溃 5次以上。

果然在日志中看到了升级程序由于日志问题,30s内重启了6次,触发了这个救援程序。
源代码中可以看到对应逻辑部分。

解决
官方也有说明,其实这个程序是调试模式,关闭userdebug模式、插入usb、prop配置开关,都可以关闭。

这个问题在开发中,都是连接着usb调试的,不会触发。经常会被忽略。
这里因为程序还没上线,通过编译prop配置关闭
PRODUCT_SYSTEM_PROPERTIES += persist.sys.disable_rescue=1
后续
其实还有很多问题会触发本现象,比如存储写满。这个显示主要目的是帮助用户清理错误数据或保留错误现场,让用户可以选择。
更好的方式是和手机厂商学习,重新定制开发本提示页面显示。让用户清晰知道遇到问题,选择后点击选择即可。