0

我正在编写一个播放音频文件的应用程序,我希望它在最小化的同时继续这样做。我已经这样做了,但我希望音频播放在单独的线程上,因为根据 Android 开发者网站,CPU 密集型服务在单独的线程上工作得更好。

首先,我尝试使用 IntentService(这是完美的解决方案)。然而,由于一些愚蠢的原因,一旦代码执行,服务就会自行销毁——即在它开始播放文件之后。我无法阻止这一点。

然后我创建了一个运行服务的线程。但是,我不知道如何让线程在需要时停止服务——我能做的最好的事情是:

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 以停止它。但是,我认为线程必须一直在做检查,因此一直在做很多无用的工作。我什至不确定为什么该应用程序正常工作,它不是每秒进行数百万次检查吗?

我怎样才能正确地做到这一点?

4

1 回答 1

0

假设你不能阻塞服务运行所在的线程,如果你担心做太多的工作,你可以在循环的末尾添加一个 java.lang.Thread.Sleep。

您可能还想阅读线程调度和时间切片以了解您的应用程序仍在工作的原因(但可能使用了比必要更多的 CPU)。

于 2012-09-05T20:14:57.433 回答