我有一项服务,我需要与其通信(一项服务-许多片段/活动)。有两种选择:
WeakReference
中)对我来说,解决方案2似乎更简单,但是每当我阅读有关与服务进行通信的内容时,便会有绑定服务的概念。
拥有绑定服务而不是将自身注册为委托(并向onDestroy
取消注册)有什么好处?
编辑1 :该服务是为了保持通信畅通,建立新的通信渠道非常昂贵。即使没有人请求任何数据,它也应保持该通道处于活动状态(心跳)。
服务是前台的,即使请求数据的活动被系统杀死,它也应该运行。下次创建它时,数据将在那里。 一个屏幕请求的数据可能对其他屏幕有用(因此必须存储为单例)。
答案 0 :(得分:2)
绑定服务和非绑定服务都是可用的模式,您应该选择适合您使用情况的任何模式。
如果希望服务与绑定到该组件的组件具有相同的生命周期,则应选择绑定的服务。如果您需要独立服务,请使用未绑定的版本。
一种方法相对于另一种方法的唯一好处是实现简单。
对于您而言,我认为您仅在运行活动和片段时才需要该服务,然后,我认为最简单的方法是制作绑定的服务并使每个活动都绑定到该服务。这样,您将在活动(和片段,因为它们可以访问包含的活动)与服务之间获得一个简单的通信接口。 这种方法的好处是:
由于您需要运行服务,因此正确的选择是使用启动的服务,并在需要时将每个活动绑定到该服务。这是一种常见的模式。
启动的服务将一直运行,直到您明确停止它或它自身停止为止,您可以由一个单例管理器来负责。
但是同时,您可以使用绑定从活动中与服务进行通信。
因此,基本上与第一种建议的方法相比,您将需要一些实例来启动和停止服务,但活动和服务之间的通信是相同的-使用绑定。
答案 1 :(得分:0)
是的,当与活动/片段之类的视图通信时,在Android中使用绑定服务是更好的选择。这是由于以下原因,