6

Android 中两个不同进程(服务和活动)之间的通信可以通过 Messenger 或 AIDL进行管理:活动绑定到服务就足够了。

但是,如果这个活动有一个或多个子活动会发生什么?从主要活动开始子活动的那一刻起,我希望将通信重定向到子活动;同样,当子活动被销毁时,我希望将通信重定向回主活动等。

示例#1:

  1. MyService <---IPC---> MainActivity
  2. MainActivity 启动 SubActivity,然后 MyService <---IPC---> SubActivity
  3. SubActivity 被销毁,然后 MyService <---IPC---> MainActivity

示例#2:

  1. MyService <---IPC---> MainActivity
  2. MainActivity 启动 FirstSubActivity,然后 MyService <---IPC---> FirstSubActivity
  3. FirstSubActivity 启动 SecondSubActivity,然后 MyService <---IPC---> SecondSubActivity
  4. SecondSubActivity 被销毁,然后 MyService <---IPC---> FirstSubActivity
  5. FirstSubActivity 被销毁,然后 MyService <---IPC---> MainActivity

如何处理这些情况?

4

2 回答 2

5

您希望有一个实体负责绑定到服务并保持连接,并且您需要该实体不是 Activity 实例。试试这个:

  • 创建一个继承Activity的基类(BaseActivity)
  • 从 BaseActivity 派生所有活动
  • 使用 BaseActivity 中的方法管理应用程序和服务之间的连接。BaseActivity 将需要有静态(类)变量来跟踪与服务的连接并处理与服务的绑定并在完成后将其关闭。
  • 确保在绑定到服务时使用应用程序上下文(而不是活动上下文),以便操作系统在活动被破坏时不会终止与服务的连接。

通过这种方式,您不必担心在不同活动和您的服务之间创建和拆除连接。您的整个应用程序(所有活动)和您的服务之间只有一个连接。

我意识到我没有解释所有血腥的细节,但希望你能明白基本的想法。

于 2012-05-09T16:05:59.847 回答
1

你有没有想过下面的解决方案?您可以使用命令 startService() 启动 Activity,然后与 Intent 和 Receiver 通信,而不是将 Activity 绑定到 Service。通过这种方式,您可以启动其他活动,为其状态调用服务并在任何您想要的地方与之交互:)

于 2012-05-07T17:16:05.057 回答