我想知道,在活动中是否存在任何良好的数据共享策略,以及在单独的进程中运行的衍生远程服务。到目前为止,我尝试了3种方法,但都没有。
Application
我首先想到,只有Application
,在两个不同的进程中共享,因为它们来自单个应用程序。
但事实并非如此。我意识到,在创建主Activity
之前,将创建Application
。当我生成远程服务时,也会创建另一个新的Application
实例。
Preferences
我的第一个想法是,这是一个基于文件。因此,每当我通过Preferences
向sharedPreferences.edit().putString(key, value).commit()
写入值时,更改将被提交到文件。另一个过程应该能够读取最新的变化。
但事实并非如此。我的猜测是,这是因为在我的服务中,我通过Preferences
在服务启动期间只获取了PreferenceManager.getDefaultSharedPreferences(application)
个实例一次。它只在第一次从文件中读取值。后续调用getString
将从内存中读取。
Activity
无效,远程Service
处于2个不同的进程中。它们有两个不同的存储空间。
我可以尝试更好的策略吗?
答案 0 :(得分:0)
我建议您使用以下两个选项之一:
在一端使用Context.sendBroadcast(Intent i)进行广播,在另一端使用Context.registerReceiver(BroadcastReceiver b)定义BroadcastReceiver。
您可以在Intents中存储大量数据,但与直接使用内存变量相比,访问速度极慢。
如果使用AIDL定义与其的接口,则可以跨进程边界连接到远程服务。它比其他选项稍微复杂一点,但它也是最快的选择。更多信息: http://developer.android.com/guide/components/bound-services.html