デバイスが「スリープ」モードになると、アクティビティの onCreate() メソッドが再び起動されますが、これは望ましくありません。
たとえば、onCreate メソッドで初期化される VideoView を使用したアクティビティがあるため、デバイスが「スリープ」すると、プレーヤーが再作成され、プレーヤーが起動します。
これを克服する方法は?システムブロードキャストに関連していますか?
デバイスが「スリープ」モードになると、アクティビティの onCreate() メソッドが再び起動されますが、これは望ましくありません。
たとえば、onCreate メソッドで初期化される VideoView を使用したアクティビティがあるため、デバイスが「スリープ」すると、プレーヤーが再作成され、プレーヤーが起動します。
これを克服する方法は?システムブロードキャストに関連していますか?
最終的には、一度onPause()
呼び出されたアプリケーションがシステムによって強制終了されるのを防ぐことはできません。再起動できるように、常にアプリケーションを作成する必要があります。実際には、これはonRetainNonConfigurationInstance()
、a) アプリの非常に短期間の破棄と再作成をキャッチするための実装、b)onSaveInstanceState(Bundle)
中期的な破棄/再作成をキャッチするためのオーバーライド、および c) 長期的な破棄/再作成onPause()
を処理するためのオーバーライドを意味します。創造。
ほとんどの場合、実際に実装する必要がonSaveInstanceState()
あるのは 1 つだけですが、本当の最適化になる可能性があります。onRetainNonConfigurationInstance()
特定のケースでonSaveInstanceState()
は、ビデオ ファイルの URI と最後に再生されたタイムスタンプをバンドルに書き込むことで、アプリが再作成されたときにビデオで最後に再生された場所に戻ることができます。
ウェイクロックに関しては、ビデオの視聴中にデバイスがスリープ状態にならないようにする場合などに使用できます。onCreate() をもう一度実行するという問題を経験する必要がないように、アプリケーションが強制終了されないようにするために、それらは受け入れられません。第一に、それはバッテリーを殺し、第二に、それはとにかく保証されません.
最後に 1 つ: そうしない場合は、ビデオ再生アクティビティに「singleTop」属性が設定されていることを確認して、アクティビティ スタックに複数のインスタンスが取得されないようにする必要があります。
AlarmManagerを使用して、ウィジェットの更新をトリガーできます。次のサイクルをスケジュールするときに、デバイスをウェイクアップするかどうかを定義できます(実際のタスクを実行することもできます)。
alarmManager.set(wakeUpType, triggerAtTime, pendingIntent);