我在服务中使用SharedPreference
,并且在我第一次运行应用时它可以正常工作。如果我更改了另一个活动中的值,那么我发现服务中的值没有改变(活动中的值是正确的)。如果我重新启动应用程序,则它具有正确的值。这就是说,我的服务中的SharedPreference
只能在重新启动应用之前正常工作一次。
我无法弄清楚问题,代码是这样的:
在服务中
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(ctx);
Logger.d(this, "" + sp.getInt(SPConst.KEY_AVOID_DISTURB, 0));
活动
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor editor = sp.edit();
editor.putInt(SPConst.KEY_AVOID_DISTURB, 1);
editor.commit();
如果set和get都是在服务或活动中完成的,那么它是正常的,如果在活动中设置,并且在服务中,那就错了。
答案 0 :(得分:1)
最后,我找到了答案,也许后台服务和活动不在同一个过程中,所以将模式设置为MODE_MULTI_PROCESS
:
SharedPreferences sp = SnsService.this.getSharedPreferences("data", Context.MODE_MULTI_PROCESS);
答案 1 :(得分:0)
如果要更新服务类中的数据,只需将代码放在onStartCommand()方法中即可。并再次致电启动服务。传递指定服务的Intent,并包含要使用的服务的任何数据。该服务在onStartCommand()方法中接收此Intent。