2013-07-15 133 views
0

在Android设备上同时运行两个独立的应用程序。我们负责App1。以下是将在Android设备上发生的事情:使用SharedPreferences在两个独立的Android应用程序之间共享数据

应用1将首先启动,然后应用2。

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

当应用2开始,它将发送一个“连接”消息,应用1。

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

当用户按下了“运行”按钮时,应用1将开始发送消息每3秒App2的。

App2会在收到每条消息后发回一条消息。

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

该App1的发送将导致App2的发送断开回App1的最终消息。

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

回答

5

即使共享偏好可能过程之间共享(见@CommonsWare答案..) 那么它听起来像你描述的问题是最可怜的设计解决方案。事实上,它闻起来像是个可怕的想法,而且我确定它最终不会起作用!

SharedPreferences是不同的应用程序/进程之间解决通信在Android中,就像是完全忽略所有的Android API,以及核心部件!

SharedPreferences没有设计成某种过程之间的消息队列的。 甚至没有接近!

机器人为不同的应用程序之间进行通信,并在它们之间共享数据

例如提供更优雅的解决方案:

  • 远程Service结合(APP1开始其APP2可以绑定到服务)
  • 从某个应用发送广播到另一个应用时,从另一个应用收到并从其中获取BroadcastReceiver
  • app1可以实现并公开ContentProvider它可以从app2访问

还有更多!

我建议你更好地了解Android的核心部件(ServiceBroadcastReceiverActivityContentProvider)你得到任何决定如何实现您的应用程序之前。 我无法想象一种方法来创建良好的功能应用程序,而不使用至少3上述。 可以varify与读出写在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

的负责应用2组希望使用SharedPreferences来完成这一切

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

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

+0

您的建议是什么?请记住,这两个应用程序分开安装? – user2584082

+0

@ user2584082:我首先要求这些团队解释为什么用户需要将这些应用程序设置为单独的应用程序,以及为什么用户需要通过尝试每三秒钟进行一次通信来持续耗尽电池,这是为什么。假设这是可以理解的(可疑),我将使用实际的进程间通信:广播'Intents',通过'startService()'发送命令给服务等。其他答案列出了许多可能性。 – CommonsWare

+0

@CommonsWare根据Facebook聊天和Facebook应用程序,任何想法如何应用程序共享登录信息聊天应用程序? 谢谢 – hakim

1

正如塔尔说,这是穷人使用共享偏好在两个进程间进行通信时,IPC(进程间通信,Android中的Binder)与Service是实现两个Android进程之间完全控制的更好的解决方案。这里是关于如何在音乐播放器中使用IPC的example以及它的客户端。

相关问题