惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
云风的 BLOG
云风的 BLOG
小众软件
小众软件
V
V2EX
博客园 - Franky
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
量子位
博客园 - 【当耐特】
雷峰网
雷峰网
WordPress大学
WordPress大学
Jina AI
Jina AI
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Visual Studio Blog
Microsoft Security Blog
Microsoft Security Blog

博客园 - 风易微凉

AI笔记-快捷键2 AI笔记 快捷键1 AI笔记-钢笔PEN 我的2025 倒影中的你 后座有你 踏入破解行业 一个人、一场梦、一座空城、一生心疼 人间有味是清欢 安卓开发中遇到耗电量高的问题解决方案 no no no no 敢说不 逆向工程-反编译,嵌入 AlarmManager的使用 根据当前进程号,获取进程下线程数目 MongoDB数据库日志备份压缩脚本 mongodb数据库磁盘碎片整理。 mongodb库表信息监控脚本 mongodb mapreduce示例 mongodb表字段处理生成域名字段
基于项目中遇到的技术问题,谈谈SharedPreferences的使用的注...
风易微凉 · 2014-10-20 · via 博客园 - 风易微凉

    前段时间一个项目里用到的进程间共享数据的问题,一般说来进程间共享数据包括SharedPreferences、文件、数据库访问。

SharedPreferences是轻量级访问,给开发者带来了很多便利,存储的数据是轻量级的,例如配置文件的变量、或者是程序运行时保存的

某个值,便于其他activity或service访问使用。当然也可以用文件和sqlite数据库,数据量大,记录的内容和种类很多的话,建议

毫不犹豫的选择数据库。文件的访问也可以实现SharedPreferences一样的功能,只不过相比开发量来说,还是SharedPreferences方便。

    本来觉得SharedPreferences共享数据很简单,然后在项目中,这个SharedPreferences给我带来了很多烦恼,发现共享的数据不能被其他服务

访问,或者访问的内容不同步。折腾了3天,终于把问题解决。SharedPreferences如何使用我就不多说了,百度一大堆使用例子。

    现在简单说说SharedPreferences,说白了,SharedPreferences也是通过一个xml文件进行共享数据的。它一般放在/data/data/包名/文件名.xml

    public final static  String SHARE_PRE_FILE = "my_push_on_prefs";
    sharedPrefsFile =ctx.getSharedPreferences(SHARE_PRE_FILE, context.MODE_MULTI_PROCESS);

 getSharedPreferences的第一个参数就是文件名称,第二个参数是权限如下:

Context.MODE_PRIVATE

Context.MODE_APPEND

Context.MODE_WORLD_READABLE

Context.MODE_WORLD_WRITEABLE

MODE_MULTI_PROCESS 在Android 2.3以后的Android版本,必须通过明确的将MODE_MULTI_PROCESS这个值传递给mode参数,才能开启多进程访问。

项目里是两个服务共享数据,也就是多进程间共享数据。

问题出在manifest.xml文件的配置:先看看我原来是怎么配置的

1 <service android:process=":a" android:name="com.cn.app.aservice"></service>
2 <service android:process=":b" android:name="com.cn.app.bservice"></service>

android:process这个属性是指以独立的进程运行,如果不使用android:process属性的话,a和b服务将在依赖于同一个进程,也就是说a和b共享同一个进程。

上面的xml说明a和b都是采用独立的进程运行,访问SharedPreferences,共享数据访问的内容是不一样的。

即SharedPreferences虽然说是进程间共享,第一两个进程是在同一个包,第二两个进程共享一个进程,如果各自独立运行,SharedPreferences将失效。

1 <service android:name="com.cn.app.aservice"></service>
2 <service android:name="com.cn.app.bservice"></service>

修改为上面的样子,能够正常访问共享数据了。
如果有什么技术问题,欢迎大家共同交流 qq群263862916