サービスについて一般的な質問があります。これを行うサービスがあるとします:
private void finishCountdown() {
playFinishSound();
broadcastFinishedEvent();
logFinishedEventToDatabase();
stopSelf(); // has to stop itself because it's a started service,
// and may need to run again immediately.
}
stopSelf()
前のステートメントが何をしていたとしても完了するまで、呼び出しは常に待機しますか? 待機する必要がありますか、それとも、サービスに何が起こっても、これらの呼び出しが完了していることを確認するのに十分なだけですか? 私のアプリで奇妙なことが起こっています (「SQLiteConnection オブジェクトがリークされました!」、時々音が途切れたり、「リリース前にメディア プレーヤーがファイナライズされました」と表示されたりするなど)、これが原因ではないかと考えています。
これが私がすべきではないことである場合、これらすべて (ブロードキャスト、サウンドの再生、データベースへの書き込み) をサービス (できるだけ早く停止する必要があります) によって開始するための最良の方法は何でしょうか? このことを行うために別のサービスを呼び出してから、元のサービスを破棄した場合、他のサービスが停止する前に、これらすべての処理が完了するまで待機するようにするにはどうすればよいでしょうか?