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

推荐订阅源

A
About on SuperTechFans
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tenable Blog
WordPress大学
WordPress大学
小众软件
小众软件
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
T
The Exploit Database - CXSecurity.com
Attack and Defense Labs
Attack and Defense Labs
Simon Willison's Weblog
Simon Willison's Weblog
C
CXSECURITY Database RSS Feed - CXSecurity.com
量子位
有赞技术团队
有赞技术团队
C
Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
F
Fortinet All Blogs
S
Schneier on Security
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Spread Privacy
Spread Privacy
F
Full Disclosure
Scott Helme
Scott Helme
GbyAI
GbyAI
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
Cloudbric
Cloudbric
云风的 BLOG
云风的 BLOG
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
Hacker News - Newest:
Hacker News - Newest: "LLM"
Security Latest
Security Latest
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
L
Lohrmann on Cybersecurity
PCI Perspectives
PCI Perspectives
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Secure Thoughts
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