使用SharedPreferences在两个单独的Android应用程序之间共享数据

时间:2013-07-15 15:26:26

标签: android sharedpreferences

Android设备上将同时运行两个独立的应用程序。我们负责App1。以下是Android设备上将会发生的事情:

首先启动App1,然后启动App2。

App1将显示包含消息的文件列表。

当App2启动时,它会向App1发送“连接”消息。

App1将允许用户从列表中选择一个文件。

当用户按下“运行”按钮时,App1将每隔3秒开始向App2发送消息。

App2会在收到的每封邮件后发回一条消息。

App1将读取App2发送的每条消息并将其记录到文件中。

App1发送的最终消息将导致App2向App1发送断开连接。

负责App2的小组想要使用SharedPreferences来完成所有这些。如果我们这样做,我们需要使用什么来确定App2消息何时在共享首选项中,以便App1可以读取它?

3 个答案:

答案 0 :(得分:5)

即使共享首选项可以在进程之间共享(请参阅@CommonsWare答案..) 那听起来就像你描述的问题最糟糕的设计解决方案。 事实上,它闻起来像是一个可怕的想法,我相信它最终无论如何都无法发挥作用!

SharedPreferences是android中不同应用程序/进程之间通信的解决方案,就像完全忽略所有android API和核心组件一样!

SharedPreferences并非旨在成为进程之间的某种消息队列。 甚至不接近!

android提供了更优雅的解决方案,用于在不同应用之间进行通信,以及在它们之间共享数据

例如:

  • 远程Service绑定(app1启动app2可以绑定的服务)
  • 当某个活动受到影响时,会从一个应用向另一个应用发送广播,并使用BroadcastReceiver
  • 从另一个应用中接收广播
  • app1可以实现并公开可以从app2
  • 访问的ContentProvider

还有更多!

在您决定如何实施应用之前,我建议您更好地了解Android的核心组件(ServiceBroadcastReceiverActivityContentProvider)。 我无法想象如果不使用上述至少3种方法来创建良好的功能应用程序。 您可以通过阅读Android开发人员入门指南 - http://developer.android.com/guide/components/fundamentals.html

中的第一页来改变这一点

链接:

http://developer.android.com/reference/android/app/Service.html http://developer.android.com/reference/android/content/BroadcastReceiver.html http://developer.android.com/reference/android/content/ContentProvider.html http://developer.android.com/guide/components/bound-services.html

答案 1 :(得分:1)

  

负责App2的小组想要使用SharedPreferences来完成所有这些

这不是一个好主意。引用the documentation for SharedPreferences

  

注意:目前此类不支持跨多个进程使用。这将在稍后添加。

答案 2 :(得分:1)

正如塔尔所说,使用共享偏好在两个过程中进行通信是不可取的,使用服务的IPC(进程间通信,Android中的Binder)是实现两个Android进程之间完全控制的更好解决方案。这是关于如何在音乐播放器及其客户端使用IPC的example