2011-11-01 29 views
2

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

回答

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(); 
} 

共享偏好Part。

public class Settings extends PreferenceActivity implements 
OnSharedPreferenceChangeListener{ 
     public static final String PREFS_PRIVATE = "PREFS_PRIVATE"; 
     public static final String MASTERKEY = "[email protected]#$%^&*"; 

     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

这不回答我的问题找到他们。这个答案假定服务运行在与PreferenceActivity相同的过程中。这就是OnSharedPreferenceChangeListener工作的原因。在我的应用程序中,此解决方案不起作用,因为该服务在Manifest文件'android:process =“”'定义的不同进程中运行。如果我把所有的东西都放在一个过程中,这将起作用 - 我已经测试过了。但是这对我的应用程序不起作用。 – jjNford

+0

是否尝试过...我在应用程序中写过...我知道服务意味着什么,并且这个在任何内容中都是没有办法的...它可以从manifest或者broadcastlistener中调用... – medampudi

+0

我相信你做到了。但是,如果在另一个进程中运行,监听器将无法工作。您在相同的过程中拥有您的服务和应用程序。如果我这样做,我的工作,但第二我定义我的服务运行在一个新的进程不起作用。不过,我解决了这个问题,所以没关系。 – jjNford