最近项目中遇到了跨进程访问SharedPreferences的问题,当然在Android中并不建议用SharedPreferences,比较建议使用contentProvider或者aidl的方式来交互。
首先为了方便理解,暂时把两个应用分为Server端和client端
第一个问题就是想要跨进程访问sharedpreferences,server端在获取sharedPreferences对象时,需要一个int 值得mode,这时的mode就需要设置成
Context.MODE_MULTI_PROCESS|MODE_WORLD_READABLE
接着client端调用SharedPrefences,需要一个context上下文对象,上下文对象简单的理解就是当前软件运行的环境,所以需要获取server端的context,而不能拿client本地的context创建sharedpreferences对象。
获取server端context,需要调用本地context的方法,所以还需要本地context的一个对象:
Context c = null;
try {
c = context.createPackageContext("server端包名",
Context.CONTEXT_IGNORE_SECURITY);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
client端获取到server端的context对象后

在Android项目中,跨进程访问SharedPreferences遇到了问题。虽然不推荐使用SharedPreferences进行进程间通信,但通过设置Context.MODE_MULTI_PROCESS|MODE_WORLD_READABLE模式,可以在Server端创建SharedPreferences对象。Client端需获取Server端的context来创建SharedPreferences,这需要通过createPackageContext方法。然而,当Server端的其他字段设置为private模式时,client端无法访问,解决方案是将共享数据独立存储在专门的文件中。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



