OnPreferenceChangeListener в другом процессе - обмен данными о предпочтениях - PullRequest
2 голосов
/ 01 ноября 2011

Итак, моя проблема заключается в следующем: у меня есть 2 службы, работающие в разных процессах, и я хотел бы сохранить их в таком состоянии.Один - это передача данных из баз данных в связанные приложения, а второй - опрос входящих данных через сокеты.Я чувствую, что держать их в независимом процессе было бы лучше.Проблема в том, что я хотел бы иметь общие предпочтения между двумя службами и хотел бы реализовать OnSharedPreferenceChangeListener для обновления настроек, необходимых для опроса и отправки данных.Я не могу реализовать OnSharedPreferenceChangeListener в сервисах, так как они работают на разных процессах.Я мог бы реализовать это в PreferenceActivity, но как мне связаться со службами для немедленного обновления?Я не хочу использовать AIDL и беспокоиться о привязке.Существует возможность создания широковещательных приемников и отправки намерений, но это кажется большой работой, если меню настроек расширяется.Есть еще какие-нибудь отличные идеи?

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

все в порядке, вот ваш ответ ...

для предпочтения этого примера давайте возьмем 3 класса - 2 услуги службы A и B (href A, B) и настройки (preferenceActivity)

инициализировать две службы как

public class ServiceA/B extends serice implements OnSharedPreferenceChangeListener{
    @Overside
    public void onCreate(....){
        Settings.getPrefs(this).registerOnSharedPreferenceChangeListener(this);  

     }
    @Override
    protected void onResume() {
        super.onResume();
        Settings.getPrefs(this).registerOnSharedPreferenceChangeListener(this);  
    }

    @Override
    protected void onPause() {
        super.onPause();
        // Unregister the listener whenever a key changes
        Settings.getPrefs(this)
                .unregisterOnSharedPreferenceChangeListener(this);
    }
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    System.out.println("++"+key+"++");
    if(key == "KEYA"||key == "KEYC")
        Do_what_ever_you_want();
            if (key == "KEYB")
        do_anything();
    }
    do_anything(){}
    Do_what_ever_you_want();
}

Часть общих предпочтений.

public class Settings extends PreferenceActivity implements
OnSharedPreferenceChangeListener{
      public static final String PREFS_PRIVATE = "PREFS_PRIVATE";
      public static final String MASTERKEY = "!@#$%^&*";

      public static final String KEYA = "KEYA";
      public static final String KEYB = "KEYB";
      public static final String KEYC = "KEYC";

       --- the create and get methods for getting and sharing data in the prefs... ..... 
      // get them from just a google search.

}

У меня есть эта система, реализованная в одном из моих приложений ... и развернутая ... так что возитесь с этими основами и дайте мне знать, как она работает ...

Раджеш ...

0 голосов
/ 19 января 2012

Я создал простые SharedPreferences, основанные на ContentProvider, которые можно использовать в разных процессах, их можно найти в моем битбакете https://bitbucket.org/ABitNo/zi/src/783b6b451ba1/src/me/abitno/zi/provider/preference

...