Android: сервис перезапускается после изменения настроек - PullRequest
3 голосов
/ 03 октября 2010

У меня есть Служба и PreferenceActivity, которые позволяют пользователю редактировать некоторые предпочтения. Я хотел бы перезапустить Сервис, как только пользователь завершит PreferenceActivity.

Я понимаю, что могу регистрировать слушателей onChange для индивидуальных изменений предпочтений, но я не хочу перезапускать Службу, так как меняется каждое предпочтение . Я хотел бы сделать это, когда пользователь закончит редактирование всех настроек. За исключением наличия кнопки «Применить сейчас» в PreferenceActivity, я не вижу простого способа сделать это.

Я что-то упустил здесь?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 03 октября 2010

В 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;
        ...
    }
}
1 голос
/ 23 июня 2011

Другой альтернативой является переопределение onStart () в PreferenceActivity для записи значений "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();
    } 
}
...