一句话总结:
非专业调查的结果如下(os3,os2 也是差不多的逻辑):
- 应用无响应会被 PackageWatchdog 捕获,并计入 count
- count 会传递到 PackageWatchdogImpl 的 doRescuePartyPlusStepNew 方法,并根据计数来弹出无响应弹窗 / 执行对应等级的清除
对应此人说的第一张图的等级
计数到第五次开始,会尝试清除应用缓存和数据,可能也解释了此人哔哩哔哩数据被清除的原因
计数到第七次就是强制清除数据了,如果是系统界面,会额外附加重启设备
有弹无响应弹窗马上按关闭应用,不然会有清除应用数据的风险
非专业调查的结果如下(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;
计数到第五次开始,会尝试清除应用缓存和数据,可能也解释了此人哔哩哔哩数据被清除的原因
计数到第七次就是强制清除数据了,如果是系统界面,会额外附加重启设备