3

我有一个 Service 和一个 PreferenceActivity 允许用户编辑一些首选项。一旦用户完成了 PreferenceActivity,我想重新启动服务。

我知道我可以为个人偏好更改注册 onChange 侦听器,但我不想在每个偏好更改时重新启动服务。当用户完成编辑所有首选项时,我想这样做。在 PreferenceActivity 中没有“立即应用”按钮,我看不到这样做的直接方法。

我在这里错过了一些基本的东西吗?

谢谢!

4

2 回答 2

3

Activity那开始PreferenceActivity使用startActivityForResultonActivityResult跟踪用户何时完成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;
        ...
    }
}
于 2010-10-03T05:14:28.660 回答
1

另一种选择是覆盖 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();
    } 
}
于 2011-06-23T16:54:21.123 回答