1

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

利用Application

我首先想到的是,只有一个Application, 在 2 个不同的进程之间共享,因为它们来自一个应用程序。

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

利用Preferences

我的第一个想法是,这是基于文件的。Preferences因此,每当我向through写入值时sharedPreferences.edit().putString(key, value).commit(),更改都会提交到文件中。另一个进程应该能够读取最新的更改。

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

使用全局静态变量

不可行,因为Activity远程Service处于 2 个不同的进程中。他们有2个不同的内存空间。

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

4

1 回答 1

0

我建议您使用其他两个选项之一:

1:广播

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

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

2:服务绑定

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

于 2013-11-25T17:12:48.530 回答