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