android - 服务或 IntentService 在录制后播放音频

标签 android service intentservice android-intentservice

我想实现以下目标:

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

我知道前 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 时间并随时播放。

哪个最适合需求 --> ServiceIntentService ??

我们将不胜感激任何建议。

最佳答案

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

特别是,使用绑定(bind)的 Service,它允许绑定(bind)到它的 Activity 和从 Service Activity

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

另一方面,绑定(bind)的 Service 将一直存在,直到它被显式停止或直到最后一个绑定(bind)组件解除绑定(bind)。这允许进行更长期的交互。

对于播放,如果您使用类似 MediaPlayer 的东西来处理其自己的线程以进行播放,则 Service 在 UI 线程上运行的事实不是问题。

此外,如果您使用绑定(bind)的ServiceMediaPlayerMediaController,您可以控制播放、停止、暂停、搜索等来自 Activity

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

关于android - 服务或 IntentService 在录制后播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29028141/

相关文章:

android - 为什么我的 Android 应用程序不在 ActionBar 中显示图标和文本?

android - 从 ListView 插入项目和子项目

Android 在网站上搜索信息

service - xinetd 错误服务/协议(protocol)组合不在/etc/services

android - Intentservice 不调用 runnable

java - 为什么不鼓励在 Android 中使用字符串文字?还有哪些其他/更好的选择?

java - 用于 Java/Spring 配置的 ZooKeeper?

c# - 服务定位器和工厂设计模式有什么区别?

android - 从服务中获取当前 fragment

android - 如何强制停止正在进行的 Intent Service?