如何在服务和活动(及其子活动)之间处理IPC?

时间:2012-05-07 16:07:04

标签: android android-service android-activity

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

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

示例#1:

  1. MyService< --- IPC ---> MainActivity
  2. MainActivity启动SubActivity,然后启动MyService< --- IPC --->子活动
  3. SubActivity被破坏,然后MyService< --- IPC ---> MainActivity
  4. 示例#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
    6. 如何处理这些案件?

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

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