Android 系统-进入recovery的问题集

目录

一、介绍

二、进入recovery的问题集

1.关于触发拯救模式,导致机器进入recovery。


一、介绍

recovery

二、进入recovery的问题集

1.关于触发拯救模式,导致机器进入recovery。

拯救模式又称救援模式,是Android 8.0新增的一个功能,它的功能介绍可以参见网络上的很多介绍文章,本文只关注问题分析。

问题场景如下:进入隐私空间,长按控制中心的移动数据按钮,此时com.android.phone进程报停,还有一定的几率进入recovery。

分析如下:

  • 隐私空间:当前Android版本为Android 11,实现的隐私空间功能的方式是创建一个新USER,来达成该需求,主空间与隐私空间的切换就是一个用户切换的过程(有兴趣的可以网上搜索,原理比较简单,但是修改比较繁琐)。
  • com.android.phone进程报错的原因:
     E AndroidRuntime: Caused by: java.lang.IllegalStateException: Default phones haven't been made yet!
     E AndroidRuntime: 	at com.android.internal.telephony.PhoneFactory.getPhone(PhoneFactory.java:369)
    由于隐私空间为非主用户,所以在com.android.phone进程中获取Phone的时候,Phone不允许被获取,详见com.android.internal.telephony.PhoneFactory的getPhone方法
    @UnsupportedAppUsage
    public static Phone getPhone(int phoneId) {
        String dbgInfo = "";
        synchronized(sLockProxyPhones) {
            if (!sMadeDefaults) {
                throw new IllegalStateException("Default phones haven't been made yet!");
            } else {
                Phone phone;
                if (phoneId == 2147483647) {
                    phone = sPhone;
                } else {
                    phone = phoneId >= 0 && phoneId < sPhones.length ? sPhones[phoneId] : null;
                }
                return phone;
            }
        }
    }
    ,而其中sMadeDefaults最为关键,在隐私空间的时候调用该方法,直接抛出该异常,而在正常的流程下,sMadeDefaults是会在PhoneFactory的静态方法makeDefaultPhone(Context context) 中被赋值为true的,所以导致getPhone失败,从而导致com.android.phone进程不断的报停。
     I Watchdog: Interesting Java process com.android.phone died. Pid 12818
     I Watchdog: Interesting Java process com.android.phone started. Pid 12880
  • 此时由于com.android.phone是个常驻进程,不断的重启,又不断的died,所以触发救援模式。
  • 救援模式:在com.android.phone进程的不断started与died的过程中,level等级被不断的提升,一旦到达FACTORY_RESET等级,系统就会自主进入recovery(注:最后一句log是自行添加的,用来判断是哪个进程导致触发救援模式)。
     W RescueParty: Attempting rescue level RESET_SETTINGS_UNTRUSTED_DEFAULTS
     W RescueParty: Attempting rescue level RESET_SETTINGS_UNTRUSTED_CHANGES
     W RescueParty: Attempting rescue level RESET_SETTINGS_TRUSTED_DEFAULTS
     W RescueParty: Attempting rescue level FACTORY_RESET
     I EventReporterService: processTagFlags tag: 100122, msg: FACTORY_RESET,com.android.phone,1001, flags: 1, logTimeMs: 1629794809759

    所以处理进入recovery的问题,首先就要判断是不是救援模式被触发了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值