【问题标题】:Service OR IntentService playing audio after recordingService OR IntentService 在录制后播放音频
【发布时间】:2015-03-13 08:51:45
【问题描述】:

我想实现以下目标:

  • 录制音频
  • 向服务器发送音频
  • 播放音频

我知道前 2 个任务可以通过使用 Service 来完成,就像我在之前的一个应用程序中所做的那样,但是在播放音频文件时,它需要从活动。

因为使用BroadcastReceiver可以实现从Service访问Activity,但是从Activity访问Service的方法呢?

那么,现在的问题来了:是使用 Service 本身来播放音频(由活动触发) 还是使用 IntentService.

文档说,

没有简单或直接的方式直接从 IntentService 与用户界面交互。

任何使用 IntentService 启动的任务都不能被中断

我可能想停止记录蚂蚁时间并随时播放。

哪个最适合他的要求 --> Service OR IntentService ??

任何建议都将受到高度赞赏。

【问题讨论】:

  • 您可以使用意图服务上传音频并在活动的 ui 线程上播放您的音频。由于录制了音频,您可以将其保存并在 ui 线程上播放
  • 在录制和上传时选择 IntentService 而不是 Service 的因素是什么?
  • 但是正如问题中已经提到的,记录结束可能是由一个活动触发的,而文档说“任何使用 IntentService 开始的任务都不能被中断”
  • 我说一旦录制了音频,就使用意图服务进行上传。播放可以在ui线程上完成

标签: android service intentservice android-intentservice


【解决方案1】:

我会使用Service 而不是IntentService 来满足您的需要。

特别是使用绑定Service,它允许在绑定到它的Activity 之间以及从ServiceActivity 之间进行双向通信。

IntentService 类是为使用自己的工作线程的一次性操作而设计的,一旦线程上的工作完成,线程就会终止,IntentService 会调用 stopSelf() 来终止自身。这意味着用户(通过Activity)和IntentService 之间的任何用户交互都是有问题的。

另一方面,绑定的Service 将一直存在,直到它被显式停止或直到最后一个绑定的组件解除绑定。这样可以进行更长期的互动。

对于回放,如果您使用像MediaPlayer 这样处理自己的线程以进行回放的东西,Service 在 UI 线程上运行的事实不是问题。

此外,如果您使用绑定的ServiceMediaPlayerMediaController,您可以从Activity 控制播放、停止、暂停、搜索等。

编辑:有关更多信息,请参阅...Bound Services

【讨论】:

  • 完美。你能简要介绍一下“绑定服务”是什么意思吗?
  • @GAMA :我只能将您指向 Android 开发者网站上的绑定服务指南(请参阅答案底部的编辑)。它看起来很复杂,但并没有那么糟糕。忽略有关 IPC 和 AIDL 的任何内容,因为它们用于访问其他进程中的服务。在您自己的应用程序中创建绑定服务非常简单。
  • 这是一个很好的参考点:techotopia.com/index.php/…??
  • @GAMA :是的,这看起来是一个很好的基本解释和示例。一旦您了解了BinderServiceConnection 的概念,使用绑定服务就非常简单了。祝你好运。
  • @GAMA 这是另一个thenewcircle.com/s/post/60/servicesdemo_using_android_services,它展示了如何拥有有界服务。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
相关资源
最近更新 更多