首页 > 代码库 > 基于项目中遇到的技术问题,谈谈SharedPreferences的使用的注意问题
基于项目中遇到的技术问题,谈谈SharedPreferences的使用的注意问题
前段时间一个项目里用到的进程间共享数据的问题,一般说来进程间共享数据包括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的第一个参数就是文件名称,第二个参数是权限如下:
MODE_MULTI_PROCESS
这个值传递给mode参数,才能开启多进程访问。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
基于项目中遇到的技术问题,谈谈SharedPreferences的使用的注意问题