Android中SharedPreference多进程数据共享出错
来源:互联网 发布:数据备份前景 编辑:程序博客网 时间:2024/05/24 06:26
SharedPreference作为android五大存储(网络,数据库,文件,SharedPreference,contentProvider)之中最方便使用的一个,从类名上来看就不是一个存储大数据的工具,以key/value成对的形式来存储基本数据类型,只能存储基本数据类型。文件存放在/data/data/yourpackagename/shared_prefs目录下。
SharedPreference最适合使用的地方就是保持配置信息,Android中专门有针对偏好设置的PreferenceFragment中的数据存储也是使用SharedPreference来存储,默认的文件名为(yourpackagename)_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。
最后:对于分享数据来说:如果是瞬时分享数据,不需要长期保存的话可以使用广播。如果要分享大量数据的话使用 ContentProvider是最好的选择。大家都知道的啦。
- Android中SharedPreference多进程数据共享出错
- Android中SharedPreference多进程数据共享出错
- Android进程间共享数据之SharedPreference
- SharedPreference 实现不同进程间的数据共享
- Android开发中多进程共享数据简析
- 【Android 开发】:数据存储之 SharedPreference 共享参数
- Android 不同应用通过SharedPreference实现共享数据
- Android 不同应用通过SharedPreference实现共享数据
- Android 不同应用通过SharedPreference实现共享数据
- 【Android】不同App之间通过SharedPreference共享数据
- Android的SharedPreference中putStringSet存取数据
- android中利用sharedpreference进行数据存储
- Android SharePreference 在主进程和次进程间共享数据不同步出错
- android SharedPreferences 多进程间数据共享
- Android 使用Sharedpreference共享参数
- Android APP之间共享SharedPreference
- android 应用间共享 sharedpreference
- 数据共享之SharedPreference共享参数文件
- 欢迎使用CSDN-markdown编辑器
- Java 反射学习笔记
- 《C++语言基础》程序阅读——学生信息管理系统
- JavaScript知识笔记(二)——事件
- Java String关键字
- Android中SharedPreference多进程数据共享出错
- C++中函数返回值的问题与产生随机数
- Hadoop生态系统介绍【可视化管理hadoop集群】
- VMware出现点虚拟机和新建虚拟机没反应的解决办法
- Hello world
- MySQL的存储引擎
- 如何切换 SVN 用户名
- window.open打开/关闭制定页面
- Zookeeper + Hadoop + HBase Cluster Installer