将服务绑定到活动或片段?

Anj*_*ani 20 android android-service android-fragments

我正在开发一个音乐播放器应用程序.我有一个主要的活动,有多个片段,每个片段在设备专辑上显示歌曲,艺术家明智等.
我有一个音乐服务,处理所有播放和其他东西.
我感到困惑的是这个服务与我拥有的各种片段的绑定.
现在我将主要活动和每个片段分别与服务绑定,并且它的工作非常好.但我想知道这是否真的是最好的做法?有没有办法将主活动与服务绑定,然后一些如何在其子片段中使用它?
我可能错过了一些非常基本的活动概念或片段或服务.所以有人请在这方面指导我.
我想这更像是一个概念性问题,因此不需要任何代码.但如果需要,请告诉我.

编辑:
我的问题是:什么是一个更好的方法来绑定一个具有多个子片段(每个将使用该服务)的活动的服务?

Ena*_*Ena 18

我认为cleanear架构是直接绑定片段.关于Rarw的答案中概述的问题,您可以从您的活动和您的片段绑定到该服务.这样,您可以确保服务将在那里,直到活动未被销毁.

我可以看到从片段连接的两个主要优点:

  1. 服务连接是异步的,因此在片段内部您永远不会确定从活动获得的服务不是null.这将导致您至少进行一些空指针检查以及某些机制,以便在创建片段和服务连接时刷新片段(因此您确定无论两者中的哪一个先发生,您都将显示数据).
  2. 您不依赖于片段留下的特定活动.要从活动中获取服务,我认为您正在对特定于活动的类进行强制转换.您可以使用类似getBoundService的方法创建类似BoundActivity的接口以从中获取服务,但我认为考虑到第1点的优势,这是一个开销.如果您有多个服务,该怎么办?

UPDATE

这是一个非常简单的项目. https://github.com/ena1106/FragmentBoundServiceExample


Rar*_*arw 16

绑定Service你的活动,而不是Fragment.您的应用程序的描述,一个具有多个Fragment交换进出的活动,使其成为最实用(也是唯一)实用的方法.

当你绑定一个你正在将它的生命周期绑定Service到.请参阅绑定服务.每次添加或删除创建和销毁的活动中的a .您不希望尝试将服务链接到此进程,因为每次创建或销毁新片段时都必须创建和销毁服务.ActivityActivity FragmentFragment

而是绑定到主机Activity.然后,您可以使用接口与片段进行主机活动交互,以访问绑定服务或通过Intent.

  • @ 421感谢你指出这一点.在发布我的问题之前,我确实已经阅读了该答案.在发布之前,我曾尝试尽可能多地阅读.但我仍然不确定相同的答案是否适用于我的问题,这就是为什么我要求这个答案的作者在这里发表评论,因为他/她似乎对这个主题有很好的理解.也没有人在这里发帖以获得名声,但互相帮助和明确的疑虑.如果通过阅读一些内容可以明白我的疑问,为什么我要等几天才能得到答案.不管怎么说,还是要谢谢你.我会记住你的建议. (2认同)