Android - 在单独的线程中手动停止服务

时间:2012-09-05 15:22:17

标签: android multithreading

我正在编写一个播放音频文件的应用程序,我希望它能够在最小化的同时继续这样做。我已经完成了这个,但我希望音频播放在一个单独的线程上,因为根据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必须不断地进行检查,因此总是做很多无用的工作。我甚至不确定应用程序为什么会起作用,是不是每秒都要进行百万次检查?

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:0)

假设您无法阻止服务运行的线程,如果您担心做太多工作,可以在循环结束时添加java.lang.Thread.Sleep。

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