オーディオ ファイルを再生するアプリを作成していますが、最小化されている間も再生を続けたいと考えています。私はこれを行いましたが、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 に設定してサービスを停止します。ただし、スレッドは常にチェックを実行し続ける必要があるため、常に多くの無駄な作業を行っていると思います。なぜアプリが機能しているのかさえわかりませんが、毎秒何百万ものチェックを行っているのではないでしょうか?
どうすればこれを適切に行うことができますか?