这种情况是这样的:我有一项活动和一项服务。两者之间需要发送一些信息:
活动可以要求服务执行操作(运行其方法)
服务可以发送对活动进行中的响应
由于这看起来更像是一种双向交流,因此我正在考虑使用LocalBroadcastManager
并具有以下特征:
public class MyActivity extents Activity{
private void receiver = new BroadcastReceiver(){
onReceive(){
//Handle Message from Service
}
}
onResume -> LocalBroadcastManager.registerReceiver(receiver);
onPause -> LocalBroadcastManager.unregisterReceiver();
}
和服务
public class MyService extents Service{
private void receiver = new BroadcastReceiver(){
onReceive(){
//Handle Message from Activity
}
}
onStart-> LocalBroadcastManager.registerReceiver(receiver);
onDestroy-> LocalBroadcastManager.unregisterReceiver();
}
这将避免应用程序组件之间的绑定或其他通信方式,但同时允许发送意图和侦听观察者。这种方法有什么缺点吗?
答案 0 :(得分:0)
不应该。
这是Android应用程序中跨组件通信的推荐方式。您正在使用Google本地广播而不是全球广播来完全按照Google的建议进行操作。
在评论中,您提到绑定服务通常是Activity-> Service通信的方式。在大多数情况下,您无需使用此功能。绑定服务有点烦人,因为它不是即时的,您需要使用侦听器来存储对Binder的引用。相比之下,广播相对简单。
答案 1 :(得分:0)
看起来您的活动应该仅绑定到服务以获得一个Binder实例,您可以使用该实例访问服务方法。该服务可以发送活动可以通过广播接收器观察到的本地广播。我最近的偏好是让服务方法返回可以观察到的LiveData实例。 LiveData对象是生命周期感知的,因此任何观察者都将知道自己进行清理。