複数の活動のバックグラウンドミュージックを再生するために使用しているサービスがあります。現在、すべての適切なアクティビティを実行していますが、ホームボタンを押してもシャットオフできません。ゲームは終了しますが、音楽はまだ再生されています。onUserLeaveHintメソッドを使用してみましたが、別のアクティビティに切り替えるたびに音楽がオフになります。ゲームを離れるときだけではありません。
3 に答える
すべてのアクティビティはサービスにバインドする必要があります。1つ以上のアクティビティがサービスにバインドされている場合にのみ、サービスが有効であるためです。したがって、サービスへのバインディングがない場合、サービスは破棄されます。サービスをバインド/アンバインドする方法については、この回答を確認してください。したがって、使用を避けstarservice()
(サービスを破棄するには、stopservice()を呼び出す必要があります)、サービスbindservice()
を開始するために使用します。この場合、onCreate()のみがサービスで呼び出されることに注意してください。
フラグメントの使用を検討しましたか?フラグメントを使用する場合は、メインアクティビティのonStop()メソッドでオーディオサービスを停止できます。アプリにフラグメントを使用したくない/使用できない場合は、すべてのアクティビティのonStop()からサービスを停止するか、各アクティビティにブロードキャストレシーバーを実装する必要があります。 get-broadcastreceiver-for-action-android-intent-action-main-and-android
アクティビティから別のアクティビティに移行するときに、2番目のonStart()がもう1つのonStop()の前に呼び出されるという事実を利用してください。
BIND_AUTO_CREATEフラグでバインドされたサービスは、バインドされたアクティビティがない場合は常に破棄されるという事実(この他の回答を確認してください)に加えて、任意のアクティビティonStart()メソッドでサービスにバインドし、onStop()でバインドを解除できます。
アクティビティ遷移があるときはいつでも、アクティブなバインドされたアクティビティがありますが、現在のアクティビティがバックグラウンドである場合(ホームコールまたは着信コールのため)、onStop()のみが呼び出されるため、サービスは無制限になります。