1

私のAndroidアプリでは、バックグラウンドでオーディオを再生できるようにしたいと考えています。サービスでMediaPlayerを使用することは、まさに私が必要としていることだと思いました。そこで、Android開発者のWebサイトにあるGoogleのサンプルコードにほぼ従ってサービスを作成しました。ただし、私の問題は、サービスにバインドしようとする新しいアクティビティが開始されるたびに、新しいサービスが開始されることです(または、少なくともonCreateが再呼び出しされます)。私はドキュメントを読み通しました、そして私がしていることは完全に合法であるはずです。誰かがさらに洞察を提供できますか?ありがとう!

public class PlayerService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnBufferingUpdateListener {

public class PlayerBinder extends Binder {
    PlayerService getService() {
        return PlayerService.this;
    }
}

private final IBinder mBinder = new PlayerBinder();

public IBinder onBind(Intent intent) {
    return mBinder;
}

そして私の活動から私はからのサービスにバインドしますonCreate

private void doBindService() {
    this.bindService(new Intent(this, PlayerService.class), connection, Context.BIND_AUTO_CREATE);
}
4

1 に答える 1

3

を使用bindServiceすると、Serviceが作成され、のライフサイクルに関連付けられますActivity。つまり、あなたActivityが破壊されると、あなたも破壊されますService

開始したままにしておきたい場合は、Service最初にを呼び出す必要がありますstartService(Intent)。たとえば、アプリケーションでこれを呼び出すことができますonCreate()

その後も、バインドすることができます。バインドを解除すると、Androidがプロセスを強制終了するか、コード内のどこかからService呼び出すstopService(Intent)かを決定するまで、バインドが解除されたままになります。stopSelf()

より良い結果を得て、音楽の再生を中断しないようServiceにするには、をフォアグラウンドモードで実行するように設定する必要があります(これを参照)。

Androidがプロセスを強制終了して音楽の再生を停止する可能性はまだありますが、フォアグラウンドモードの場合、その可能性は非常に低いことに注意してください。

于 2012-11-29T04:10:20.073 に答える