Android:首选项更改后服务重启

3
我有一个服务和一个PreferenceActivity,允许用户编辑一些偏好设置。我想在用户完成PreferenceActivity后重新启动服务。
我知道我可以为单个首选项更改注册onChange监听器,但我不想在每个首选项更改时重新启动服务。我希望在用户完成所有首选项的编辑后再这样做。除了在PreferenceActivity中添加“立即应用”按钮外,我没有看到简单的方法来实现这一点。
我是否忽略了某些基本的东西?
谢谢!
2个回答

3
在启动PreferenceActivityActivity中,使用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;
        ...
    }
}

然而,从服务中无法调用startActivityForResult,您需要打开一个活动,然后再打开另一个活动。 - htafoya

1
另一个选择是在你的PreferenceActivity中重写onStart()方法,以记录“before”值,并重写其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();
    } 
}

onStop 对我来说很有效,可以在退出首选项时应用更改。 - htafoya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接