代码之家  ›  专栏  ›  技术社区  ›  Alin

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

  •  0
  • Alin  · 技术社区  · 7 年前

    • 活动可以查询服务以查看是否正在运行
    • 活动可以查询服务中的变量值
    • 服务可以发送对活动的响应

    • 服务可以在活动调用时响应活动

    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(); 
    } 
    

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

    2 回复  |  直到 7 年前
        1
  •  0
  •   TheWanderer    7 年前

    这是Android应用程序中跨组件通信的推荐方式。你做的正是谷歌推荐的,用本地广播代替全球广播。

    在一篇评论中,您提到绑定服务通常是活动的操作->服务沟通。在大多数情况下你不需要使用这个。绑定服务有点烦人,因为它不是即时的,您需要使用侦听器来存储对绑定器的引用。相比之下,广播相对简单。

        2
  •  0
  •   Ryujin    7 年前

    看起来您的活动应该只绑定到服务以获得一个绑定器实例,您可以使用它来访问服务方法。该服务可以发送活动可以通过广播接收器观察到的本地广播。我最近的偏好是让服务方法返回可以观察的LiveData实例。LiveData对象具有生命周期意识,因此任何观察者都知道在自己之后进行清理。