是的,我知道这是重复的:Android Service : bind or start?。但正如我在那里评论的那样,给出的答案是有问题的。
在Google Dev Tutorial中,建议绑定为...would work well for a music application that needs to bind an activity to its own service that's playing music in the background.
而我刚刚链接的SO回答说我需要启动而不是绑定到的服务。
现在,我理解导航应用程序的论点,但很明显,对于音乐流媒体等内容,得分并未得到解决。那么有人会澄清一点吗?
我可以无休止地结合并无休止地开始这一事实表明这两种方法存在是有原因的。更具针对性的是,例如,为什么音乐流是一个很好的例子?
同样,我的主要问题是:绑定与启动有什么优缺点?换句话说:比较和对比bindService和startService。
很抱歉重复,但我想尽可能完全捕捉到这一点,所以我可能会得到非常好的答案。
答案 0 :(得分:1)
至于我的工作和阅读有关bindService
和startService
的内容我正在解释以下内容。
首先,他们两个有不同的生命周期。
bindService(mIntent, mConnection, BIND_AUTO_CREATE);
如果您只使用带有bindService
标志的BIND_AUTO_CREATE
来创建服务并绑定,它将为您创建一个服务并将其绑定到您。一旦unbindService
,服务生命将停止。即。最有可能在主要过程的onStop阶段。因此,如果您仅在需要时需要它,则可以使用bindService
创建和绑定服务,并在不需要时关闭服务。就像你提到的导航应用程序一样。这不会遵循onCreate
>的常规服务生命周期。 onStartCommand
startService(mIntent);
bindService(mIntent, mConnection, 0);
如果您想要在活动结束后运行该服务,那么您必须使用startActivity
并使用bindService
与{0}或BIND_ABOVE_CLIENT
等标志绑定(意味着,服务比正在运行的客户端活动更重要)。现在您可以绑定到服务并取消绑定任意数量的时间,但服务将继续运行(直到您终止它)。这遵循onCreate
> onStartCommand
您对音乐应用程序的困惑基本上与使用应用程序有关:在Google Dev中,他们可能已经注意到在关闭您的活动时音乐停止并退出应用程序(如Youtube)。 [绑定和解除绑定就足够了]
SO可能已经注意到,音乐应该在即将停止播放后继续播放(如Google Play音乐)。 [为此你必须启动一项服务并永远运行它]。您可以在需要时拨打this.stopSelf()
或从活动中stopService
停止服务。
所以你不能说bindService
比开始服务更好的公民。
使用bindService创建的服务在停止活动后将无法运行。