为什么在应用程序进程中使用绑定(未启动)服务?

Dmi*_*sev 5 android android-service

众所周知,Android中有两种主要类型的服务:启动和绑定(我不计算启动和绑定服务,因为它们与刚启动的服务大致相同).

你可以找到大量关于如何使用绑定服务或如何绑定到已启动服务的教程,但实际上没有人回答为什么任何人在应用程序进程中使用绑定(未启动)服务(换句话说 - 没有IPC) ?

使用标准线程工具(AsyncTaks,Executors,普通线程)使用绑定服务(比如某种处理)是否有任何(隐藏?)利润?是否值得连接此类服务的样板代码?

一些背景

在挖掘Google相机的来源后出现了问题.他们正在创建一个用于保存图像的绑定(再次 - 未启动)服务.有什么意义?为什么不用一些Executor呢?我错过了重要的事吗?

如果这是绑定服务,那么在设备配置发生变化(即设备被轮换)时,无法保持保存进度是有帮助的.所以我认为没有优势.

ica*_*s74 2

当启动组件(即 Activity 或 BroadcastReceiver)与已启动服务之间不需要或非常有限(单向)交互时,已启动服务非常有用。例如,一劳永逸的后台下载。您为下载器服务提供一个 URL,启动该服务,然后就不用管它了。下载器服务与用户交互的唯一方式是使用通知。同时,该 Activity 也可能会进入后台堆栈,您不在乎。请注意,在这种情况下,该服务正在为启动它的活动提供服务,并且不要求它对其他活动通用。

另一方面,绑定服务是一种更通用的服务,或者需要为多个活动提供服务,而且需要多个双向交互,即活动向服务发送消息,然后服务向活动发送回消息,依此类推。考虑背景音乐播放器服务的示例,其中您将音乐文件或远程流 URI/URL 传递给服务,然后另一个活动可以更改音量或切换到另一个曲目等。从服务返回到活动的消息可能是mp3 文件不完整或损坏,或者曲目已完成消息。

事实上,我来到这个问题是为了寻找这个确切问题的答案,但在@SagarPikhwal 提供的链接中找到了非常令人满意和完整的答案。诚然,就Android编程而言,我是一个新手,所以以上都是我所理解的!

编辑: 意识到我没有回答(尽我所能)关于您看到的 Google 相机代码的问题的另一部分。我认为他们创建绑定服务的原因是因为相机是一个公共共享资源,并且可能有多个用户同时使用该系统资源。使用相机服务捕获图像或视频的活动不是排他性用户。Google 相机应用程序是相机硬件的另一个用户,当然还可以有其他用户,并且所有这些应用程序都由绑定服务提供服务。