美文网首页Android开发Android知识Android开发
覆盖安装导致SharedPreferences被清空的问题

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

作者: LightDreams | 来源:发表于2017-03-28 15:35 被阅读235次

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

    我们对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内容被清空。
    但我确认我的程序是单进程,应该不是这个原因引起的,只能把锅甩给魅族啦~~~

    相关文章

      网友评论

      • 追风骚年:Context.MODE_MULTI_PROCESS这个都被弃用了

      本文标题:覆盖安装导致SharedPreferences被清空的问题

      本文链接:https://www.haomeiwen.com/subject/bmyjottx.html