为应对可能发生的连续启动崩溃的情况,mPaaS 建立了数据清理的机制。当 mPaaS 框架启动完成前应用出现卡死或重要线程(例如主线程、multidex.init 线程、ApplicationAgent.init 线程等)发生闪退时,框架可能触发数据清理。该数据清理机制支持定制,通过配置实现在不同情况下对 SharedPreference 、Database 数据库的清理,在极特殊情况下清空整个应用的数据,以保证应用的正常运行。目前该机制已经覆盖了 10.1.32、10.1.60 和 10.1.68 系列基线。
为满足保护重要数据的需求,mPaaS 在数据清理机制中提供了清理白名单功能。通过将目标文件加入清理白名单后即可保护该文件不被清理。
只有 Portal&Bundle 接入方式 存在数据清理机制。
清理白名单方案 1.0
清理白名单方案 1.0 是在合适的时机调用 MPFramework
中的接口来动态设置白名单列表。
支持的基线
清理白名单方案 1.0 支持 10.1.32、10.1.60 和 10.1.68 系列基线。
如果在设置白名单之前已经因为崩溃触发了清理机制,那么清理白名单方案 1.0 将不能生效。如果您使用的是 10.1.32 系列基线,那么建议您升级基线到 10.1.60 或 10.1.68,以使用升级后的清理白名单方案 2.0。更多信息,请参见 清理白名单方案 2.0。
接入步骤
只需在合适的时机调用设置清理白名单的接口即可。接口如下:
/**
* 设置 SharedPreference 白名单。若之前已经设置过,那么会把之前的数据清空。
*/
public static void setSPWhiteList(List<String> whiteList);
/**
* 添加 SharedPreference 白名单,以追加的方式添加。
*
* @param whiteList
*/
public static void addSPWhiteList(List<String> whiteList);
/**
* 获取设置的数据库白名单列表。
*
* @return
*/
public static List<String> getDBWhiteList();
/**
* 设置数据库白名单。若之前已经设置过,那么会把之前的数据清空。
*/
public static void setDBWhiteList(List<String> whiteList) ;
/**
* 添加数据库白名单,以追加的方式添加。
*
* @param whiteList
*/
public static void addDBWhiteList(List<String> whiteList);
清理白名单方案 2.0
清理白名单方案 2.0 是在触发到清理机制时,框架通过反射加载开发者配置的白名单来设置类,优先读取自定义的清理策略。
支持的基线
清理白名单方案 2.0 支持 10.1.60 和 10.1.68 系列基线。其中:
10.1.60 基线要求 10.1.60.10 版本及以上。
10.1.68 基线要求 10.1.68.4 版本及以上。
接入步骤
继承
com.mpaas.framework.adapter.api.ClearDataStrategy
,实现相关接口。public abstract class ClearDataStrategy { public ClearDataStrategy() { } /** * 是否开启清理机制。 * 若返回 false,则什么文件都不清理。 * 若返回 true,则会执行清理策略。可以通过 getSPWhiteList,getDBWhiteList 返回需要保证的文件列表。 * * @return */ public abstract boolean enableClearDataStrategy(); /** * 若开启了清理机制,通过该接口返回需要保护的 SharedPreference 文件。 * * @return */ public List<String> getSPWhiteList() { return null; } /** * 若开启了清理机制,通过该接口返回需要保护的 db 文件。 * * @return */ public List<String> getDBWhiteList() { return null; } }
在 Portal 的
AndroidManifest
中配置策略类的信息。说明由于需要反射调用
ClearDataStrategy
,所以不能混淆ClearDataStrategy
。<meta-data android:name="ClearDataStrategy" android:value="com.mpaas.demo.launcher.ClearDataStrategy" />