SharedPreferences更改数据后多处读取,数据丢失或延时的问题的原因和解决办法
先说一下遇到这个问题的场景,由于我的项目中使用了SharePreference保存一个状态,然后通过获取这个状态来控制后面的逻辑,也就是这个状态是要频繁的去获取的,那势必对这个状态的更改后再重新获取的灵敏度依赖是很高的.然后就出现了这样一个问题,在主进程的某个文件中更改了这个状态后,主进程中可以很实时的获取到(这个我是调试了很久才发现的,因为我有多个地方获取了这个状态,并且他们还是分布在不同的进程中),而其他非主进程的地方获取不到,而且只要程序不杀掉重新启动,那么它获取的就一直是上一次保存的状态.然后我就去找SharePreference的资料去查,找了很久终于找到一个和我遇到的这个问题很相似的解释,所以这里记录下来,以便后续复习,也方便还有遇到这个问题的人能更快速的解决问题.
这个问题主要是创建SharedPreferences文件时设置的MODE类型导致的,我平时代码中创建的SharedPreferences文件的类型都是MODE_PRIVATE也就是0,也没有很详细的了解getSharedPreferences(name, mode)这个方法后面的mode的作用,那下面我就根据我查询的资料来说一下getSharedPreferences(name, mode)的mode的种类以及使用场景
MODE_PRIVATE:代表私有访问模式,在Android 2.3及以前这个访问模式是可以跨进程的,之后的版本这个模式就只能访问同一进程下的数据.
MODE_MULTI_PROCESS:在Android 2.3及以前,这个标志位都是默认开启的,允许多个进程访问同一个SharedPrecferences对象。而以后的Android版本,必须通过明确的将MODE_MULTI_PROCESS这个值传递给mode参数,才能开启多进程访问。
MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取
MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入
MODE_APPEND: 追加方式存储