我是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