我正在编写一个播放音频文件的应用程序,我希望它能够在最小化的同时继续这样做。我已经完成了这个,但我希望音频播放在一个单独的线程上,因为根据Android开发人员网站,CPU密集型服务在单独的线程上运行得更好。
首先我尝试使用IntentService(这是完美的解决方案)。但是,由于一些愚蠢的原因,一旦代码执行,服务就会自行销毁 - 这是在开始播放文件之后。我无法阻止这一点。
然后我创建了一个运行Service的Thread。但是,我不知道如何让Thread在需要时停止服务 - 我能做的最好的事情是:
serviceThread = new Thread() {
public void run() {
while (true) {
if (playAudio) {
startService(new Intent(getApplicationContext(),
MusicService.class));
playAudio = false;
}
if (stopAudio) {
stopService(new Intent(getApplicationContext(),
MusicService.class));
stopAudio = false;
}
}
}
};
显然,之后我将startService设置为true以启动服务,并将stopService设置为true以停止它。但是,我相信Thread必须不断地进行检查,因此总是做很多无用的工作。我甚至不确定应用程序为什么会起作用,是不是每秒都要进行百万次检查?
我该如何正确地做到这一点?
答案 0 :(得分:0)
假设您无法阻止服务运行的线程,如果您担心做太多工作,可以在循环结束时添加java.lang.Thread.Sleep。
您可能还想阅读线程调度和时间切片,以了解您的应用仍在运行的原因(但可能使用的CPU比必要的多得多)。