覆盖安装导致SharedPreferences被清空的问题

最近工作量不够饱和_,闲下来了,就想着写点什么,把之前项目中遇到的问题记录下来

我们对SharedPref轻量存储是再熟悉不过了,基本在项目中都会用到。
之前项目中存储了一些设置项到SharePref,持久化后,下次直接从本地load出来,显示到界面上。
正因为是简单的存储了几个开关状态、几个属性值,所以写代码就没有仔细琢磨,下面是之前的代码:

使用PreferenceManager.getDefaultSharedPreferences(Context)获取默认的sharedPref实例

结果发版本前,QA给我提了一bug,说应用覆盖安装后,设置项恢复默认,没有存储成功(只有魅族机型)!

最后查阅资料,修改获取实例的方式,不能用默认的实例,用下面的方式获取就解决了!

  SharedPreferences pref = context.getSharedPreferences(
            SHAREPREFERENCE_NAME, Context.MODE_PRIVATE |Context.MODE_MULTI_PROCESS);

默认的SharedPref仅支持读写模式为Context.MODE_PRIVATE,且文件是以包+"_preferences"命名

  private static String getDefaultSharedPreferencesName(Context context) {
    return context.getPackageName() + "_preferences";
 }

  private static int getDefaultSharedPreferencesMode() {
        return Context.MODE_PRIVATE;
  }

默认的SharedPref无法支持Context.MODE_MULTI_PROCESS,当安卓程序有多个进程同时读写时,会导致默认的sharedPref内容被清空。
但我确认我的程序是单进程,应该不是这个原因引起的,只能把锅甩给魅族啦~~~

你可能感兴趣的:(覆盖安装导致SharedPreferences被清空的问题)