在 activity 和服务中注册接收者的缺点?

Drawbacks in registering receivers in both the activity and service?

场景是这样的:我有一个activity和一个服务。两者之间需要发送一些东西:

因为这看起来更像是一种双向通信,我正在考虑使用 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(); 
} 

这将允许避免应用程序组件之间的绑定或其他通信方法,但同时允许发送意图和监听观察者。这种方法有什么缺点吗?

不应该。

这是 Android 应用程序中推荐的跨组件通信方式。您正在按照 Google 的建议进行操作,使用本地广播而不是全球广播。

在评论中,您提到绑定服务通常是为了Activity->服务通信。在大多数情况下您不需要使用它。绑定服务有点烦人,因为它不是即时的,您需要使用侦听器来存储对 Binder 的引用。相比之下,广播就相对简单了。

看起来您的 activity 应该只绑定到服务以获取可用于访问服务方法的 Binder 实例。该服务可以发送 Activity 可以使用广播接收器观察到的本地广播。我最近的偏好是使用可以观察到的服务方法 return LiveData 实例。 LiveData 对象是生命周期感知的,所以任何观察者都会知道自己清理。