如何在服务之间广播消息?

时间:2018-07-21 19:09:38

标签: android android-activity service broadcastreceiver broadcast

我有一个主要活动和几个活动,它们是通过某种用户可控制的方式从主要活动发起的。无论如何,这些活动中的某些活动仅限于自己的服务。这些服务在启动时将一直起作用,直到主要活动销毁为止。我想知道如何在它们之间传输消息而又不将它们全部合并到服务中或将它们绑定到那里的每个活动吗?我的意思是,发送全局消息而不是LocalBroadcast。

1 个答案:

答案 0 :(得分:0)

您说您的服务不是IntentServices,因此它们使用相同的MainThread来执行其代码。 可能有很多方法可以实现您想要的:

  1. 将Service实例保存在MainActivity的变量中:Service1可以安全调用“ MainActivity.mService1instance.doJob()”,而Service2可以安全调用“ MainActivity.mService2instance.doJob()”,或者通过在每个实例中创建STATIC方法来执行相同的结果服务并直接从服务类“ Service2.doJob()”中调用它们
  2. 使用处理程序:每个服务都以这种方式创建其处理程序:mHandler = new Handler() { @Override public void handleMessage(Message message) { switch (message.what) { case TH_MESSAGE_JOBx: break; } } }; public static boolean postToService(int what, int arg1, int arg2, Object obj) { if (mHandler == null) return false; Message cMessage = Message.obtain(mHandler, what, arg1, arg2, obj); return mHandler.sendMessage(cMessage); }

    然后,您可以从所有线程中安全调用每个服务的“ postToService(TH_MESSAGE_JOBx,int,int,object)”方法

这是两种简单的方法。

其他方式(但更复杂)可能是:AIDL(IPC)和队列。