因此,我的应用 FooService 和 BarService 中有两项服务。在这些服务之间进行通信的最有效方式是什么?更具体地说,通过使用 startForegrounService 发送意图与使用本地广播管理器发送广播的动作的通信有何不同?
使用onStartCommand
FooService.class
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
final int i = super.onStartCommand(intent, flags, startId);
String intentAction = null;
if(intent!=null)
intentAction = intent.getAction();
if(intentAction ==null)
return i;
switch (intentAction) {
case "Message A":
// do something with Message A
break;
case "Message B":
// do something with Message B
default:
return i;
}
return i;
}
BarService.class
Intent myIntent = new Intent(this, FooService.class).setAction("Message A");
startService(myIntent
);
答案 0 :(得分:0)
最好是使用LocalBroadCast Manager。使用Intents来启动和停止服务,您每次都必须处理onStartCommand
而不是启动这两项服务并使用LocalBroadCast Manager进行通信非常有效。
在你的Foo服务中,
LocalBroadcastManager broadcaster;
@Override
public void onCreate() {
broadcaster = LocalBroadcastManager.getInstance(this);
}
发送您的广播
Intent intent = new Intent("com.FooService");
broadcaster.sendBroadcast(intent);
在您的BarService中
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//Your Action here
}
};
@Override
protected void onCreate() {
super.onCreate();
LocalBroadcastManager.getInstance(this).registerReceiver((mMessageReceiver),
new IntentFilter("com.FooService")
);
}
@Override
protected void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
}
编辑1
比较绑定服务和LocalBroadCast管理器绑定服务的效率要高得多,因为它们只绑定一次并且可以相互通信而无需启动任何Intent。