Code Bye

使用service的上下文和activity读取sharedpreferences的同步

例如本人用activity 对象 mainactivity 的context 获取了sharedpreferences对象,并putString(context, “demo”, “aaaa”);
接着用service 对象 myservice 的 context 获取sharedpreferences对象,getString(context, “demo”, “”);

这样得到的是”aaaa”,是正确的,但是接着在mainactivity中修改键为”demo”的值,改成”bbbb”

接下来再在myservice中获取键位”demo”的值,但还是”aaaa”,意思就是数据没有同步,但是本人用RE管理器查看配置文件,键为”demo”的值已经改为”bbbb”了….

而且本人在service中修改配置文件之后,activity再去读取,还是原来的数据,但是用RE管理器去查看,确实是修改了啊,是数据没同步吗?

解决方案:20分
本人之前也遇到过这样的问题,后面改成用handler同步数据了。假如LZ硬要用service的话,可以跟BroadCast搭配会方便些,当activity中数据改变,用广播发给服务。
解决方案:20分
调研了一下发现,getSharedPreferences的时候的mode使用的是MODE_PRIVATE,这种mode不支持activity跟service之间的数据同步。把mode改成了MODE_MULTI_PROCESS,直接可以解决了activity修改share数据,service可以直接同步

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明使用service的上下文和activity读取sharedpreferences的同步