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

enz*_*m83 6 android android-service android-activity

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

如何处理这些案件?

Dav*_*ser 5

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

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

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

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