0

オーディオ ファイルを再生するアプリを作成していますが、最小化されている間も再生を続けたいと考えています。私はこれを行いましたが、Android 開発者の Web サイトによると、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

Assuming you can't block the thread that the service runs in, you can add a java.lang.Thread.Sleep at the end of the loop if you're worried about doing too much work.

You might also want to read up thread scheduling and time slicing to understand why your app is still working (but probably using a lot more CPU than necessary).

于 2012-09-05T20:14:57.433 に答える