最近项目有使用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之间数据同步。
在临下班还有两个小时的时间,成功解决了。趁自己还记得,就顺手记录下来。希望以后自己不要在出现这样的问题。