使用SharedPreferences保存数据数据取出延迟或丢失的问题

SharedPreferences更改数据后多处读取,数据丢失或延时的问题的原因和解决办法

先说一下遇到这个问题的场景,由于我的项目中使用了SharePreference保存一个状态,然后通过获取这个状态来控制后面的逻辑,也就是这个状态是要频繁的去获取的,那势必对这个状态的更改后再重新获取的灵敏度依赖是很高的.然后就出现了这样一个问题,在主进程的某个文件中更改了这个状态后,主进程中可以很实时的获取到(这个我是调试了很久才发现的,因为我有多个地方获取了这个状态,并且他们还是分布在不同的进程中),而其他非主进程的地方获取不到,而且只要程序不杀掉重新启动,那么它获取的就一直是上一次保存的状态.然后我就去找SharePreference的资料去查,找了很久终于找到一个和我遇到的这个问题很相似的解释,所以这里记录下来,以便后续复习,也方便还有遇到这个问题的人能更快速的解决问题.

这个问题主要是创建SharedPreferences文件时设置的MODE类型导致的,我平时代码中创建的SharedPreferences文件的类型都是MODE_PRIVATE也就是0,也没有很详细的了解getSharedPreferences(name, mode)这个方法后面的mode的作用,那下面我就根据我查询的资料来说一下getSharedPreferences(name, mode)的mode的种类以及使用场景

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

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

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

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

  5. MODE_APPEND: 追加方式存储

所以我的代码里里在getSharePreference这个方法里的模式设置为MODE_MULTI_PROCESS就解决了问题.

你可能感兴趣的:(开发遇见的错误)