Android:后台计算选项



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

我读了很多关于安卓系统后台操作的文章,但我很难决定使用什么:

  • Asynctask:安卓文档说它应该保留用于短期计算,但我需要分析数据几秒钟以上。

  • Intentservice:更适合长时间的计算,但它不能随时用按钮停止。

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

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

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

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

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

编辑:在onUnbind()中激活一个简单的标志来停止线程内的循环,从而解决了问题。

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

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

最新更新