SharedPreference最适合使用的地方就是保持配置信息,Android中专门有针对偏好设置的PreferenceFragment中的数据存储也是使用SharePreference来存储,默认的文件名为(your packagename)_preferences.xml中。如果要修改默认文件名,可以通过在PreferenceFragment中使用getPreferenceManager().setSharedPreferencesName(“modify_default_preference”)来更改默认文件名。

这些都不重要哈,重要的是在多进程中修改同一个值出现的问题。为了方便描述,将第一次创建某个SharedPreference xml的进程描述为为主进程,次使用该xml文件的为次进程

不同进程是指在ddms中看到的不同进程,包括不同应用(shareduid同样在内哦),同一个应用中配置process产生的次进程。他们之间进行通信都会造成主进程修改值之后,在次进程读取到的还是第一次初始化时读取到的值。目前网络上还没有很好的解决办法,我的解决办法如下:

1、首先要将获取SharedPreference的MODE设置为: MODE_MULTI_PROCESS 。其值为4(2.3以后有该属性)。如: getSharedPreferences("test_aa", MODE_MULTI_PROCESS);.如果是使用MODE_PRIVATE这种模式,那么另一个进程中写入的值,将不会写到文件中。

2、其次为了保证修改数据实时提交到磁盘,不要将SharedPreference设置成成员变量,尽量在哪里修改就在哪里直接获取SharedPreference,修改后别忘记commit。

如果做到了上面两点,不出意外的话,数据就可以做到实时修改了。如果为了方便已经写了SharedPreference编辑的工具类,那么第二点基本就做不到了,so,需要做第三步。

3、如果两个进程都需要适时读取或根据该值进行逻辑操作,那么最好在两个进程中都进行Editor操作。可以使用Service和aidl技术,aidl对于这种基本类型的传递so easy。

更多相关文章

  1. 如何开发/修改屏幕锁
  2. android 多个cursor 的读取 和读取某个Cursor其他从集合中获取的
  3. 启动uiautomatorviewer后,点击获取模拟器的时候,出现Unable to con
  4. [置顶] [Android开发]android 跨进程通信之Broadcast
  5. react-native-vector-icons android 字体图标
  6. Android(安卓)Parcel和Parcelable类
  7. cocos2d-x 3.0rc2中读取sqlite文件
  8. java中采用Pull解析器对XML文件进行解析
  9. Android——Mediaplay 框架调用

随机推荐

  1. node.js来源基本结构基本知识点
  2. 如何学画画?自学画画基本入门
  3. Android开发实用小工具分享
  4. Ubuntu 使用小技巧
  5. 使用 MongoDB 存储日志数据
  6. 使用 AliOS Things 对接 ID²-SE
  7. Centos 7 使用 vsftpd 搭建 FTP 服务器
  8. Linux Docker 镜像打包
  9. 以 npm 方式安装探针
  10. Ubuntu 系统中开启 sftp 功能