有时候我们在系统正常运行的时候,突然跑到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.
意思是说,不能加载正常的安卓系统,可能数据损坏,如果你继续收到此消息,请执行恢复出厂设置擦除所有的用户数据
 
我们查看下recovery的log:
cat /tmp/recovery.log
[ 1.516818] erasing_text: en (68 x 29 @ 990)
[ 1.520345] no_command_text: en (124 x 29 @ 990)
[ 1.523416] error_text: en (49 x 29 @ 990)
[ 1.993076] installing_text: en (228 x 29 @ 990)
[ 2.028634] SELinux: Loaded file_contexts
[ 2.028675] Command: "/sbin/recovery" "--prompt_and_wipe_data" "--reason=RescueParty" "--locale=en_US"
有参数“--prompt_and_wipe_data”,我们可以在google的官方查看此命令何意:
 
这个需要代理服务器才能查看,我把原文贴下:

救援程序

很多用户严重依赖他们的手机,需要一台始终可以正常工作的设备。然而,有时设备会陷入重新启动循环僵局,这样,用户便需要提交支持服务单据或保修咨询。这个过程会让用户不舒服,而对于设备制造商和运营商来说,则需要支付高昂的费用。

Android 8.0 中纳入了一个功能,当该功能注意到核心系统组件陷入崩溃循环僵局时,就会派出“救援程序”。然后救援程序会通过一系列操作来上报相关情况,以期恢复设备。最后的解决方法是,救援程序使设备重新启动并进入恢复模式,然后提示用户恢复出厂设置。

Android 兼容性定义文档并未要求提供此类救援功能,但此类功能对减少邮件支持记录来说非常有用。

实现

在 Android 8.0 中,救援程序默认处于启用状态,其实现位于/services/core/java/com/android/server/RescueParty.java 中。 在出现以下情况时,救援程序会收到有关启动和崩溃事件的信息,然后即会启动:

system_server 在 5 分钟内重启 5 次以上

永久性系统应用在 30 秒内崩溃 5 次以上。

当检测到上述某种情况时,救援程序会将其上报给下一救援级别、处理与该级别相关联的任务,并让设备继续运行,看看能否恢复。清除或重置内容的程度随级别而增加。最高级别会提示用户将设备恢复出厂设置。

要支持救援程序,无需特别的硬件支持。实现后,设备的恢复系统必须响应 --prompt_and_wipe_data 命令,且设备必须先提供一种方法,让用户确认用户数据是否有任何损坏,然后再继续运行。此外,恢复系统还应为用户提供有关尝试再次启动设备的选项。

由于每个救援级别都会使设备再次变为可运行状态的时间延后(可能长达 5 分钟),因此设备制造商不应添加自定义救援级别。设备处于不可运行的状态的时间越长,用户发出支持请求或保修咨询,而不是自行恢复其设备的可能性就越大。

验证

当设备具有有效的 USB 数据连接时,系统会停止所有救援事件,因为这是一个较强的信号,表示有人正在调试设备。

(1)要停止此类抑制行为,请运行:

adb shell setprop persist.sys.enable_rescue 1

在此处,您可以触发系统或界面崩溃循环。

(2)要触发低级 system_server 崩溃循环,请运行:

adb shell setprop debug.crash_system 1

(3)要触发中级 SystemUI 崩溃循环,请运行:

adb shell setprop debug.crash_sysui 1

这两个崩溃循环都会启动救援逻辑。所有的救援操作也都会记录到存储在 /data/system/uiderrors.txt 中的永久性的 PackageManager 日志中,以供日后进行检查和调试。 此外,“软件包警告消息”部分下的每个错误报告中也会包含这些永久性的日志。

原来这个是android加的自动判断系统状态,实现的救援程序,触发进入recovery,强制执行恢复出厂设置。
 
主要的代码路径:frameworks/base/services/core/java/com/android/server/RescueParty.java
 
有时候我们在断电煲机的时候,有时候会触发系统的救援程序,其实是在压力测试,但是触发了android本身的救援程序,我们可以把救援程序禁止,这样防止煲机触发进入recovery系统。执行如下命令即可:setprop persist.sys.disable_rescue true

recovery 强制执行恢复出厂设置(Rescue Party)的更多相关文章

  1. recovery 恢复出厂设置失败Data wipe failed

    最近客户反馈,编译32位的android系统,在recovery中执行恢复出厂设置的时候失败了,失败的打印提升信息如下. Formatting /data... [ 2.191404] E:get_f ...

  2. 如何将MathType恢复出厂设置

    必大家都知道,我们日常使用的手机是自带恢复出厂设置功能的,其实除了手机,咱们今天要说的这款公式编辑器MathType,也是可以进行恢复出厂设置操作的哦,下面就让小编给大家介绍一下吧. 一.打开Math ...

  3. Android恢复出厂设置流程分析【Android源码解析十】

    最近看恢复出厂的一个问题,以前也查过这方面的流程,所以这里整理一些AP+framework层的流程: 在setting-->备份与重置--->恢复出厂设置--->重置手机---> ...

  4. [置顶] 不刷机让越狱后的iphone恢复出厂设置

    iphone越狱后,设置里的清除所有内容和设置选项是不生效的,选上之后菊花转个不停,只能强制退出,还有白苹果的危险. 若想恢复出厂设置有两个办法: 一.刷机 最直接的办法,我觉得itunes配合ito ...

  5. OpenWRT 恢复出厂设置命令

    如果通过无线或者有线口无法连接到router,可以用恢复某些设置重新设置路由器. 1. 开机,等着一个工作灯亮的时候立即按下rest键2秒,然后就开始拼命闪烁,很好现在进入failsafe模式了. 2 ...

  6. U8800 手机恢复出厂设置出现轻触Android开始页面 处理办法

    U8800 恢复出厂设置出现轻触Android开始页面处理办法 问题现象 Huawei 手机U8800刷机后,点击恢复出厂默认设置后,出现了一个一直停留在“欢迎使用Android 轻触 Android ...

  7. 苹果电脑(Mac mini或Macbook或iMac)恢复出厂设置

    苹果电脑(Mac mini或Macbook或iMac)恢复出厂设置,首先要做好如下的准备: 第一:数据的备份:第二:保证正常的wifi连接:第三:有线的鼠标键盘连接: 具体恢复操作步骤: 步骤一:电脑 ...

  8. HTC 328T 如何恢复出厂设置

    设置-存储-恢复出厂设置(在存储的最下面,往下拉)

  9. HILLSTONE sg6000 g5150 怎么恢复出厂设置

    hillstone恢复出厂设置的方法(忘记密码的情况) 口令丢失情况下的处理 如果口令丢失,用户无法登录安全路由器进行配置,请在安全路由器刚启动时按住 CLR 按键大约 5 秒,使设备恢复到出厂配置. ...

随机推荐

  1. Java 10 实战第 1 篇:局部变量类型推断

    现在 Java 9 被遗弃了直接升级到了 Java 10,之前也发过 Java 10 新特性的文章,现在是开始实战 Java 10 的时候了. 今天要实战的是 Java 10 中最重要的特性:局部变量 ...

  2. 微软2014校招笔试题-String reorder

    Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB Description For this question, your pro ...

  3. LeetCode--No.013 Roman to Integer

    13. Roman to Integer Total Accepted: 95998 Total Submissions: 234087 Difficulty: Easy Given a roman ...

  4. [Objective-C语言教程]预处理器(18)

    Objective-C预处理器不是编译器的一部分,而是编译过程中的一个单独步骤. 简单来说,Objective-C预处理器只是一个文本替换工具,它指示编译器在实际编译之前进行必要的预处理. 我们将Ob ...

  5. java使用document解析xml文件

    准备工作: 1创建java工程 2创建xml文档. 完成后看下面代码: import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; ...

  6. eclipse连接远程服务器

    eclipse里有一个强大的插件,可以直接在本地编辑远程服务器代码,Eclipse Remote System Explorer (RSE) 下载安装方法: 一.下载,高版本的eclipse可以直接下 ...

  7. 122. 买卖股票的最佳时机 II-leetcode

    题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必 ...

  8. PostgreSQL 使用小点

    1.timestamp 有分时区和无时区(减少使用),8个字节,包含日期和时间,范围是:公元前4713 - 公元294276.底层存储的是时间戳,这对任何地区的都一样,而具体时间显示则可从数据库层面设 ...

  9. Solidity中uint转string

    在<Solidity中uint转bytes>中,我们知道unit如何转换成bytes,其实把uint转换成string,就是在最后加上string(bytes变量)即可,如下所示: pra ...

  10. 【图文详细教程】maven3安装配置+eclipse离线安装maven3插件《《唯一成功的教程~~~2018-01-09》》

    环境搭建前提: 1.电脑上已经安装了1.7以及以上版本的JDK(因为我提供的maven版本是最新的3.3.9的,要求最低JDK1.7) 2.配置好了ecplise并且能正常启动 第一步:下载maven ...