Dimole 的废话频道
小米云控开启的RescuePartyPlus自动删除第三方应用数据 今天用哔哩哔哩的时候,软件并没有卡死,但是系统开始弹窗“哔哩哔哩”未响应。这种弹窗很常见,我选择了点“等待”以不关闭应用仅关闭弹窗。但是沟槽的小米从MIUI14开始这个弹窗就会莫名其妙无限弹,此时并没有点“确定”来关闭哔哩哔哩,因为视频还正常播放。 结果过了一会,哔哩哔哩直接自动退出了,重新打开发现登录态没了,缓存的视频也全部没了,一看空间占用也直接没了几个GB。 此时并不知道原因,但是赶紧抓了日志以便查证。在分析日志之前,我甚至还怀疑…
一句话总结:
有弹无响应弹窗马上按关闭应用,不然会有清除应用数据的风险


非专业调查的结果如下(os3,os2 也是差不多的逻辑):

- 应用无响应会被 PackageWatchdog 捕获,并计入 count
- count 会传递到 PackageWatchdogImpl 的 doRescuePartyPlusStepNew 方法,并根据计数来弹出无响应弹窗 / 执行对应等级的清除

case 2:
removeMessage(1, currentCrashAppName);
event.setDetails(currentCrashAppName + "RESCUE_LEVEL_ALL_DEVICE_CONFIG_RESET;");
sendMessage(currentCrashAppName, 2, event);
return false;

对应此人说的第一张图的等级

case 5:
removeMessage(4, currentCrashAppName);
if (currentCras
hAppName.equals(RescuePartyPlusHe
lper.getLauncherPackageName(context))) {clearAppCacheAndData(pm, currentCrashAppName);
event.setDetails(currentCrashAppName + "RESCUE_LEVEL_RESET_SETTINGS_UNTRUSTED_CHANGES;CLEAR_APP_CACHE_AND_DATA;");
} else if (!RescuePartyPlusHelper.checkPackageIsTOPUI(currentCrashAppName)) {Slog.w("RescuePartyPlus", "Clear app cache:" + currentCrashAppName);
pm.deleteApplicationCacheFiles(currentCrashAppName, null);
event.setDetails(currentCrashAppName + "DELETE_APPLICATION_CACHE_FILES;");
} else {pm.deleteApplicationCacheFiles(currentCrashAppName, null);
if (!RescuePartyPlusHelper.resetTheme(currentCrashAppName)) {Slog.e("RescuePartyPlus", "Reset theme failed:" + currentCrashAppName);
} else {Slog.e("RescuePartyPlus", "Reset theme success:" + currentCrashAppName);
}
if (!RescuePartyPlusHelper.resetFont(currentCrashAppName)) {Slog.e("RescuePartyPlus", "Reset fonts failed:" + currentCrashAppName);
} else {Slog.e("RescuePartyPlus", "Reset fonts success:" + currentCrashAppName);
}
event.setDetails(currentCrashAppName + "RESCUE_LEVEL_RESET_SETTINGS_UNTRUSTED_CHANGES;RESET_THEME;RESET_FONT;");
RescuePartyPlusHelper.setLastResetConfigStatus(true);
RescuePartyPlusHelper.setShowResetConfigUIStatus(false);
maybeShowRecoveryTip(context);
}
sendMessage(currentCrashAppName, 5, event);
return false;

case 7:
removeMessage(6, currentCrashAppName);
clearAppCacheAndData(pm, currentCrashAppName);
String details3 = (currentCrashAppName + "RESCUE_LEVEL_FACTORY_RESET;") + "CLEAR_APP_CACHE_AND_DATA;";
if (!currentCrashAppName.equals(RescuePartyPlusHelper.getLauncherPackageName(context))) {if (!RescuePartyPlusHelper.checkPackageIsTOPUI(currentCrashAppName)) {Slog.w("RescuePartyPlus", "Disable App restart, than clear app cache and data:" + currentCrashAppName);
RescuePartyPlusHelper.disableAppRestart(currentCrashAppName);
details3 = details3 + "DISABLE_APP_RESTART;";
} else {SystemProperties.set(RESCUEPARTY_ATTEMPTING_REBOOT, "true");
event.setDetails(details3);
sendMessage(currentCrashAppName, 7, event);
executeWarmReboot(context);
return true;
}
}
event.setDetails(details3);
sendMessage(currentCrashAppName, 7, event);
return false;

计数到第五次开始,会尝试清除应用缓存和数据,可能也解释了此人哔哩哔哩数据被清除的原因

计数到第七次就是强制清除数据了,如果是系统界面,会额外附加重启设备
 
 
Back to Top