Android 未获取服务中共享首选项的更新值
我正在将从小部件启动的活动中获得的一些值存储到共享首选项中。如果我从从同一小部件启动的服务中检索到该值,则它不是更新的值。我正在获取共享首选项中的上一个值。即使我在共享首选项xml中检查该值,我也会在那里看到更新的值。 为什么会发生这种情况。我知道widget和activity是两个过程,这是原因吗?Android 未获取服务中共享首选项的更新值,android,android-widget,android-activity,android-service,Android,Android Widget,Android Activity,Android Service,我正在将从小部件启动的活动中获得的一些值存储到共享首选项中。如果我从从同一小部件启动的服务中检索到该值,则它不是更新的值。我正在获取共享首选项中的上一个值。即使我在共享首选项xml中检查该值,我也会在那里看到更新的值。 为什么会发生这种情况。我知道widget和activity是两个过程,这是原因吗? SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_P
SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_PRIVATE);
String targetValue = preferences.getString("preferences_target_value", "0");
System.out.println("targetValue "+targetValue);`
使用commit()
更新值后,调用此函数以在编辑器中执行任何更改
prefsEditor.commit();
更改您的代码而不是此代码
SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_PRIVATE);
对此
SharedPreferences preferences = getSharedPreferences("preferance name", Context.MODE_PRIVATE);
每个进程都会缓存这些值
如果您在Android>2.3上运行,则在调用
getSharedReferences()
时必须指定MODE\u MULTI\u PROCESS
。如果您运行的是Android<2.3,那么它应该可以正常工作。如果您运行的是Android 2.3,那么共享首选项内容中有一个bug,无论您做什么,它都无法在多个进程中正常工作。在清单文件中尝试删除
android:process=":my_process"
从服务。希望它能起作用。您是如何从服务中检索到它的?发布相关代码?编辑问题。请仔细看看在活动中设置值时是否使用了相同的名称
首选项\u目标\u值
和模式
?我正在提交。如果我重新安装小部件,我会在服务中更新值。在共享首选项xml中,我可以指定新值。我的首选项名称和值相同。检索也不成问题,因为我使用相同的代码在活动中获得正确的值。当访问共享首选项时,调用getSharedReferences(字符串名称,int模式)代码>。只需指定MODE\u MULTI\u PROCESS
作为第二个参数。MODE\u MULTI\u PROCESS不起作用,现在已弃用