我有一个 Service 和一个 PreferenceActivity 允许用户编辑一些首选项。一旦用户完成了 PreferenceActivity,我想重新启动服务。
我知道我可以为个人偏好更改注册 onChange 侦听器,但我不想在每个偏好更改时重新启动服务。当用户完成编辑所有首选项时,我想这样做。在 PreferenceActivity 中没有“立即应用”按钮,我看不到这样做的直接方法。
我在这里错过了一些基本的东西吗?
谢谢!
我有一个 Service 和一个 PreferenceActivity 允许用户编辑一些首选项。一旦用户完成了 PreferenceActivity,我想重新启动服务。
我知道我可以为个人偏好更改注册 onChange 侦听器,但我不想在每个偏好更改时重新启动服务。当用户完成编辑所有首选项时,我想这样做。在 PreferenceActivity 中没有“立即应用”按钮,我看不到这样做的直接方法。
我在这里错过了一些基本的东西吗?
谢谢!
在Activity那开始PreferenceActivity使用startActivityForResult并onActivityResult跟踪用户何时完成PreferenceActivity并在那里重新启动服务。
例如。
无论您从哪里开始PreferenceActivity:
Intent prefIntent = new Intent(this, MyPreferenceActivity.class);
startActivityForResult(prefIntent, PREFS_UPDATED);
后来在同一个Activity:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) {
case PREFS_UPDATED:
// restart service
break;
...
}
}
另一种选择是覆盖 PreferenceActivity 中的 onStart() 以记录“之前”值,并覆盖其 onStop() 以检查任何增量,以便可以一次处理它们,例如
@Override
protected void onStart() {
super.onStart();
// save current state into data member(s) for comparison later
mShouldNotify = getApp().getSettings().getBoolean(PrefsActivity.PREF_SHOW_NOTIFICATIONS, true);
}
@Override
protected void onStop() {
super.onStop();
if (mShouldNotify != getApp().getSettings().getBoolean(PrefsActivity.PREF_SHOW_NOTIFICATIONS, true)) {
// we changed notifcation status. Tell google.
getApp().updateGooglePushRegistration();
}
}