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

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
博客园_首页
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
罗磊的独立博客
V
Visual Studio Blog
Know Your Adversary
Know Your Adversary
Hacker News - Newest:
Hacker News - Newest: "LLM"
美团技术团队
L
LINUX DO - 最新话题
The Last Watchdog
The Last Watchdog
博客园 - 三生石上(FineUI控件)
T
Tor Project blog
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
I
InfoQ
Last Week in AI
Last Week in AI
V2EX - 技术
V2EX - 技术
量子位
S
Secure Thoughts
L
LangChain Blog
The Hacker News
The Hacker News
H
Help Net Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
小众软件
小众软件
K
Kaspersky official blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
I
Intezer
Vercel News
Vercel News
Hacker News: Ask HN
Hacker News: Ask HN
Cisco Talos Blog
Cisco Talos Blog
Google DeepMind News
Google DeepMind News
S
Securelist
阮一峰的网络日志
阮一峰的网络日志
G
Google Developers Blog
Help Net Security
Help Net Security
Martin Fowler
Martin Fowler
爱范儿
爱范儿
Y
Y Combinator Blog
C
Check Point 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