活动与远程服务中的数据共享策略

时间:2013-01-13 14:33:05

标签: android

我想知道,在活动中是否存在任何良好的数据共享策略,以及在单独的进程中运行的衍生远程服务。到目前为止,我尝试了3种方法,但都没有。

使用Application

我首先想到,只有Application,在两个不同的进程中共享,因为它们来自单个应用程序。

但事实并非如此。我意识到,在创建主Activity之前,将创建Application。当我生成远程服务时,也会创建另一个新的Application实例。

使用Preferences

我的第一个想法是,这是一个基于文件。因此,每当我通过PreferencessharedPreferences.edit().putString(key, value).commit()写入值时,更改将被提交到文件。另一个过程应该能够读取最新的变化。

但事实并非如此。我的猜测是,这是因为在我的服务中,我通过Preferences在服务启动期间只获取了PreferenceManager.getDefaultSharedPreferences(application)个实例一次。它只在第一次从文件中读取值。后续调用getString将从内存中读取。

使用全局静态变量

Activity无效,远程Service处于2个不同的进程中。它们有两个不同的存储空间。

我可以尝试更好的策略吗?

1 个答案:

答案 0 :(得分:0)

我建议您使用以下两个选项之一:

1:广播

在一端使用Context.sendBroadcast(Intent i)进行广播,在另一端使用Context.registerReceiver(BroadcastReceiver b)定义BroadcastReceiver。

您可以在Intents中存储大量数据,但与直接使用内存变量相比,访问速度极慢。

2:服务绑定

如果使用AIDL定义与其的接口,则可以跨进程边界连接到远程服务。它比其他选项稍微复杂一点,但它也是最快的选择。更多信息: http://developer.android.com/guide/components/bound-services.html