天天看点

使用SharedPreferences实现Activity和Service之间数据同步问题

最近项目有使用service定时请求后台获取数据的需求。

所以就写了service,由于访问后台需要用到参数UserId(动态获取),所以使用了SharedPreferences来完成数据存储和获取。

在Activity中有关SharedPreferences的代码如下:

<span style="font-family:Arial;font-size:18px;">SharedPreferences  settings= getApplicationContext().getSharedPreferences("useriD", Context.MODE_PRIVATE);
SharedPreferences.Editor  editor = settings.edit();
editor.putString("useriD", userID);//这里的userId是动态获取的。
editor.commit();</span>
           

在service中SharedPreferences的代码是这样的:

<span style="font-family:Arial;font-size:18px;">String ip;
SharedPreferences myip ;
myip = getApplicationContext().getSharedPreferences("useriD", Context.MODE_PRIVATE);
ip = myip.getString("useriD", null);</span>
           

然后就运行程序,发现当登陆的用户不同时(userId不同),在service中获取的ip不能实时更新。很郁闷啊,有人说我逻辑错了,有的说不应该那样使用,折腾半天愣是没有任何结果。

中午吃了饭继续找,心里那个急躁啊。心想,调不出来,今晚涨不了知识,还悲剧的涨痘痘。

最后没有办法就从MODE下手,查了查还真是。

最后把Context.MODE_PRIVATE改成了Context.MODE_MULTI_PROCESS就可以了。也就是说Context.MODE_PRIVATE不支持Activity和Service之间数据同步。

在临下班还有两个小时的时间,成功解决了。趁自己还记得,就顺手记录下来。希望以后自己不要在出现这样的问题。