修改SharedPreferences后两种提交方式有什么区别

SharedPreferences类是一个接口类,真正的实现类是SharedPreferencesImpl。修改SharedPreferences需要获取它的Editor,在对Editor进行put操作后,最后通过commit或者apply提交修改到内存和文件。当然有了两种都可以提交的方法,肯定要区别一下的。

commit这种方式很常用,在比较早的SDK版本中就有了,这种提交修改的方式是同步的,会阻塞调用它的线程(线程安全),并且这个方法会返回boolean值告知保存是否成功(如果不成功,可以做一些补救措施)。

apply是异步(线程不安全)的提交方式,目前Android Studio也会提示大家使用这种方式。

多进程操作和读取SharedPreferences的问题

在SDK 3.0及以上版本,可以通过Context.MODE_MULTI_PROCESS属性来实现SharedPreferences多进程共享。如下设置:

public static SharedPreferences getSharedPreferences(String name) {
    if (null != context) {
        if (Build.VERSION.SDK_INT >= 11) {
            return context.getSharedPreferences(name, Context.MODE_MULTI_PROCESS);
        } else {
            return context.getSharedPreferences(name, Context.MODE_PRIVATE);
        }
    }
    return null;
}

本来以为通过MODE_MULTI_PROCESS属性使用SharedPreferences就可以实现不同时程间共享数据,但是在真正使用中确发现有会有一定概率出现这个取值出错(变为初始值)问题。最后在官网Google上发现在SDK 6.0的版本将这个MODE_MULTI_PROCESS标识为deprecated(不赞成使用)。目前来说,越来越多的项目在不断的膨胀,为了降低单个进程的内存占用率,使用"android:process"配置一些组件在单独的进程中运行已经是司空见惯了,所以大家在遇到自己的项目有多进程时,要注意一下SharedPreferences的问题。

原创文章 118 获赞 149 访问量 9万+

猜你喜欢

转载自blog.csdn.net/haoyuegongzi/article/details/105808152