0

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

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

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

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

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

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

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

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

App1 发送的最后一条消息将导致 App2 将断开连接发送回 App1。

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

4

3 回答 3

5

即使可以在进程之间共享共享首选项(请参阅@CommonsWare 答案..),那么对于您描述的问题来说,这听起来像是最糟糕的设计解决方案。事实上,它闻起来像个可怕的主意,而且我敢肯定它最终还是行不通!

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

SharedPreferences并非设计为进程之间的某种消息队列。甚至没有接近那个!

android 为不同应用程序之间的通信和在它们之间共享数据提供了更优雅的解决方案

例如:

  • 远程Service绑定(app1启动app2可以绑定的服务)
  • 当某些事件发生时从一个应用程序向另一个应用程序发送广播并从另一个应用程序接收它BroadcastReceiver
  • app1 可以实现和暴露ContentProvider可以从 app2 访问的内容

还有更多!

我建议您在决定如何实现您的应用程序之前更好地了解 android 的核心组件(ServiceBroadcastReceiverActivity、 )。ContentProvider如果不使用上述至少 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

于 2013-07-15T15:54:48.210 回答
1

正如 Tal 所说,使用共享偏好在两个进程中进行通信是很差的,带有 Service 的 IPC(进程间通信, Android 中的Binder)是实现两个 Android 进程之间完全控制的更好解决方案。这是一个关于如何在音乐播放器及其客户端中使用 IPC的示例。

于 2013-07-16T07:09:22.090 回答
1

负责 App2 的小组希望使用 SharedPreferences 来完成这一切

这不是一个好主意。引用文档SharedPreferences

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

于 2013-07-15T15:42:45.207 回答