我已经开发了一个使用推送服务的应用程序,其中我在接收推送时更改了一些首选项,并在main activity的onCreate()函数中为该特定首选项编写了首选项更改侦听器,并按如下方式注册它:
static OnSharedPreferenceChangeListener listner;
SharedPreferences prefs;// onCreate内部
prefs=getSharedPreferences(GCMIntentService.MY_PREFS, MODE_PRIVATE);
listner=new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
//Here is my code
}
prefs.registerOnSharedPreferenceChangeListener(listner);如果我的activity没有运行或者我的应用程序关闭了,我不知道是否会调用listner。
发布于 2012-09-12 00:28:47
经过长时间的研究和测试,我终于意识到监听器的作用域是直到应用程序运行或活动处于运行状态。
一旦你关闭了你的应用程序,你的onPreferenceChangeListener将不会侦听任何事件。
可能会对其他人有所帮助。
无论如何,感谢所有人。
发布于 2012-09-11 16:54:40
如果无论Activity状态如何,您都希望收到设置更改的通知,那么我建议扩展Application对象并将侦听器代码移动到那里,就像Activity一样,您应该在onResume()中注册侦听器并取消注册onPause()。因此,如果用户不在(这是因为他/她启动了preferences活动),您将不会收到通知。
https://stackoverflow.com/questions/12365217
复制相似问题