为了账号安全,请及时绑定邮箱和手机立即绑定

SharePreferences数据丢失问题的处理和解决方案

标签:
Android

问题来源:

在项目开发中部分接口token显示为空,最终导致用户无法使用,而我们的token都是在获取之放到缓存中的,代码反复检查也没有发现问题的解决办法,最后查阅资料把问题根源锁定到SharePreferences缓存的上,

public class SpUtils {    private static final String spFileName = "app";    //使用SharedPreferences
    public static String getString(Context context, String strKey) {
        SharedPreferences setPreferences = context.getSharedPreferences(
                spFileName, Context.MODE_PRIVATE);
        String result = setPreferences.getString(strKey, "");        return result;
    }    public static String getString(Context context, String strKey,
                                   String strDefault) {
        SharedPreferences setPreferences = context.getSharedPreferences(
                spFileName, Context.MODE_PRIVATE);
        String result = setPreferences.getString(strKey, strDefault);        return result;
    }    public static void putString(Context context, String strKey, String strData) {
        SharedPreferences activityPreferences = context.getSharedPreferences(
                spFileName, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = activityPreferences.edit();
        editor.putString(strKey, strData);
        editor.commit();
    }
}

我平时代码中创建的SharedPreferences文件的类型都是MODE_PRIVATE

Mode的不同类型所代表的含义:

MODE_PRIVATE:代表私有访问模式,在Android 2.3及以前这个访问模式是可以跨进程的,之后的版本这个模式就只能访问同一进程下的数据.

MODE_MULTI_PROCESS:在Android 2.3及以前,这个标志位都是默认开启的,允许多个进程访问同一个SharedPrecferences对象。而Android 2.3以后的版本,须将MODE_MULTI_PROCESS这个值传递给mode参数,才能开启多进程访问。

MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取

MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入

细细分析出现token为空的的地方都是可能出现跨进程操作的地方,在Android 2.3及以前情况会出现一个进程未执行完,就进行了另一个进程,导致缓存数据丢失

解决办法:

1.token在获取之后保存到数据库中,在使用token的地方先到缓存中查询,缓存不存在,再到数据库查询
2.MODE的类型由MODE_PRIVATE变成MODE_MULTI_PROCESS

原文链接:http://www.apkbus.com/blog-961701-78239.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消