如何在服务之间广播消息?
How to Broadcast Messages Between Services?
我有一个主 activity 和几个活动,它们以一种用户可控的方式从主启动。无论如何,这些活动中的一些活动与他们自己的服务有关。这些服务在启动时将一直工作到主 activity 销毁为止。我想知道如何在它们之间传输消息而不将它们全部组合在一个服务中或将它们绑定到那里的每个 activity?我的意思是,发送全局消息而不是 LocalBroadcast。
你说你的服务不是 IntentServices 所以他们使用相同的 MainThread 来执行他们的代码。
可以有许多不同的方法来实现您想要的:
- 将服务实例保存在 MainActivity 的变量中:服务 1 可以安全调用 "MainActivity.mService1instance.doJob()" 服务 2 可以安全调用 "MainActivity.mService2instance.doJob()" 或者通过在每个服务中创建静态方法并直接从服务 class:"Service2.doJob()"
使用处理程序:每个服务都以这种方式创建其处理程序: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) 和队列。
我有一个主 activity 和几个活动,它们以一种用户可控的方式从主启动。无论如何,这些活动中的一些活动与他们自己的服务有关。这些服务在启动时将一直工作到主 activity 销毁为止。我想知道如何在它们之间传输消息而不将它们全部组合在一个服务中或将它们绑定到那里的每个 activity?我的意思是,发送全局消息而不是 LocalBroadcast。
你说你的服务不是 IntentServices 所以他们使用相同的 MainThread 来执行他们的代码。 可以有许多不同的方法来实现您想要的:
- 将服务实例保存在 MainActivity 的变量中:服务 1 可以安全调用 "MainActivity.mService1instance.doJob()" 服务 2 可以安全调用 "MainActivity.mService2instance.doJob()" 或者通过在每个服务中创建静态方法并直接从服务 class:"Service2.doJob()"
使用处理程序:每个服务都以这种方式创建其处理程序:
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) 和队列。