我想实现以下目标:
- 录制音频
- 发送音频到服务器
- 播放音频
我知道前 2 个任务可以通过使用 Service 实现,就像我在之前的一个应用程序中所做的那样,但是当涉及到播放音频文件时,它需要从 Activity 。
因为从 Service 访问 Activity 可以通过使用 BroadcastReceiver 来实现,但是从 Activity 访问 Service 的方法呢?
那么,现在问题来了:是为 同时播放音频(由 Activity 触发) 寻求 Service 本身还是使用 IntentService.
文档说,
No easy or direct way to interact with user interface directly from IntentService.
和
Any tasks started using IntentService cannot be interrupted
我可能想停止录制 Ant 时间并随时播放。
哪个最适合需求 --> Service 或 IntentService ??
我们将不胜感激任何建议。
最佳答案
我会使用 Service
而不是 IntentService
来满足您的需求。
特别是,使用绑定(bind)的 Service
,它允许绑定(bind)到它的 Activity
和从 Service
到 Activity
。
IntentService
类是为使用自己的工作线程的一次性操作而设计的,一旦线程上的工作完成,线程就会终止并且 IntentService
调用 stopSelf()
终止自身。这意味着用户(通过 Activity
)和 IntentService
之间的任何用户交互都是有问题的。
另一方面,绑定(bind)的 Service
将一直存在,直到它被显式停止或直到最后一个绑定(bind)组件解除绑定(bind)。这允许进行更长期的交互。
对于播放,如果您使用类似 MediaPlayer
的东西来处理其自己的线程以进行播放,则 Service
在 UI 线程上运行的事实不是问题。
此外,如果您使用绑定(bind)的Service
、MediaPlayer
和MediaController
,您可以控制播放、停止、暂停、搜索等来自 Activity
。
编辑:有关更多信息,请参阅... Bound Services
关于android - 服务或 IntentService 在录制后播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29028141/