Android:后台计算选项

时间:2014-04-07 23:22:34

标签: android multithreading

我是Android应用程序开发的新手。我的第一个项目是创建一个调谐器,它需要录制音频并实时分析。

我已经在Android上阅读了很多关于后台操作的内容,但我无法决定使用什么:

  • Asynctask:Android文档说它应该保留用于简短的计算,但我需要分析数据超过几秒钟。

  • Intentservice:更适合长时间计算,但只要我想要一个按钮就无法停止。

  • 工作人员线程:限制似乎与Asynctask类似。

在以下链接中我发现的一个例子与我想要做的类似。工作线程仍然可以作为长计算的好选择吗?使用带有标志的while循环来停止计算是否安全?

http://developer.samsung.com/android/technical-docs/Displaying-Sound-Volume-in-Real-Time-While-Recording

编辑:我已成功创建绑定服务。在此服务中,创建一个新线程来更新循环中的值,然后进行广播。但是当我从服务解除绑定时,线程继续运行。即使我关闭应用程序并重新启动它,该值仍将更新。

所以我回到了我最初的问题。这样的线程是如何停止的?

编辑:问题通过onUnbind()中激活的简单标志解决,该标志停止了线程内的循环。

1 个答案:

答案 0 :(得分:0)

您实际上需要Service,而不是IntentService。您希望Service能够在后台运行,并且可以通过Activity进行控制(并且会在Activity关闭后继续工作)。这是此类任务的通用架构。以下是Android的开源音乐播放器示例:

https://github.com/kreed/vanilla/blob/master/src/org/kreed/vanilla/PlaybackService.java