最近客户报了个问题,使用手机时莫名关机重启进入了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 可以正常进入系统。
奇怪的是这整个过程很自然,有关机动画播放,然后再重启进入 recovery 模式,这个模式让客户很懵逼。
分析发现,这是 Android 系统的一个自救措施,当内置的persistent类型的应用频繁crash时,就启动了这个自救功能。
最终从 /data/system/dropbox取到的内容也可以看到,其中一款persistent类型应用有很多crash log。
Android 自救程序可以参考: com.android.server.RescueParty
这个类官方说明是
/**
* Utilities to help rescue the system from crash loops. Callers are expected to
* report boot events and persistent app crashes, and if they happen frequently
* enough this class will slowly escalate through several rescue operations
* before finally rebooting and prompting the user if they want to wipe data as
* a last resort.
*
*/
执行流程是:
notePersistentAppCrash -> executeRescueLevel -> RecoverySystem.rebootPromptAndWipeUserData(context, TAG)
把最后重启的过程代码屏蔽即可避免进入recovery模式。