数据清理白名单

为应对可能发生的连续启动崩溃的情况,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 版本及以上。

接入步骤

  1. 继承 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;
        }
    }

  2. 在 Portal 的 AndroidManifest 中配置策略类的信息。

    说明

    由于需要反射调用 ClearDataStrategy,所以不能混淆ClearDataStrategy

            <meta-data
                android:name="ClearDataStrategy"
                android:value="com.mpaas.demo.launcher.ClearDataStrategy" />