如何处理服务和活动(和它的子活动)之间的IPC?(How to handle IPC between

2019-06-24 05:28发布

Android中两个不同的过程(一个服务和活动)之间的通信可以被管理通过Messenger或AIDL :它是足够的活性结合到服务。

但是,如果此活动中有一个或多个子活动,会发生什么? 从当主活动启动子活性的那一刻,我想通信重定向到子活动; 同样,当子活动被破坏,我想通信重定向回到主要活动等。

实施例#1:

  1. 为MyService <--- --- IPC> MainActivity
  2. MainActivity启动子活动,然后为MyService <--- --- IPC>子活动
  3. 子活动被破坏,然后为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

如何处理这些情况?

Answer 1:

你想拥有一个单一的实体,它负责绑定到服务并保持到连接,你需要的实体不被活动实例。 试试这个:

  • 创建子类活动的基类(BaseActivity)
  • 从派生的所有BaseActivity你的活动
  • 管理你的应用程序,并在BaseActivity您使用的服务方式之间的连接。 BaseActivity将需要有保持连接到服务的轨道静态(类)的变量和处理结合到该服务并关闭它,当你用它做。
  • 确保绑定到该服务时使用的应用程序上下文(不活动场景),以便当活动被销毁的OS不会杀该服务的连接。

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

我意识到,我没有解释所有的血淋淋的细节,但希望你得到的基本思路。



Answer 2:

你有没有考虑以下解决方案吗? 相反,结合活动,以服务的,你就可以开始用命令startService()您的活动,然后与意图和接收器通信。 通过这种方式,你可以启动其他活动,呼吁其状态的服务,它不管你想要互动:)



文章来源: How to handle IPC between a service and an activity (and its subactivity)?