不同进程中的OnPreferenceChangeListener - 共享首选项数据

时间:2011-11-01 16:35:23

标签: android process callback preferences sharedpreferences

所以我的问题如下:我有2个服务在不同的进程中运行,并希望保持这种方式。一种是将数据从数据库传送到绑定应用程序,第二种是通过套接字轮询传入数据。我觉得保持这些独立的过程会更好。问题是我想在两个服务之间有一个共享首选项,并希望实现OnSharedPreferenceChangeListener来更新轮询和总线数据所需的设置。我无法在服务中实现OnSharedPreferenceChangeListener,因为它们在不同的进程上运行。我可以在PreferenceActivity上实现这个,但是如何与服务进行通信以便立即更新?我不想使用AIDL并担心绑定。有可能创建广播接收器并发出意图,但如果设置菜单增长,这些似乎是一个很大的工作。还有其他好点子吗?

2 个答案:

答案 0 :(得分:1)

这就是你的答案......

对于此示例的首选项,我们可以使用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.

}

我已经在我的一个应用程序中实现了这个系统......并且已经部署了...所以请弄清楚这些基础知识,让我知道它是怎么回事......

Rajesh ......

答案 1 :(得分:0)

我创建了一个基于ContentProvider的简单SharedPreferences,可以跨进程使用,您可以从我的bitbucket https://bitbucket.org/ABitNo/zi/src/783b6b451ba1/src/me/abitno/zi/provider/preference

中找到它们