2012-01-25 11 views
4

アクティビティでは、ビデオを再生しているときにonConfigurationChanged()メソッドをオーバーライドします。デバイスの向きを変更した後、ビデオの再生を続行します。これはうまく動作します。動画はスムーズに再生され、向きは変更され、動画は画面のサイズに合わせて再調整されます。Android - onConfigurationChanged()は一時停止後にonResume()の前に呼び出されます。アクティビティ

  1. は、私はビデオの再生中に私のアプリを一時停止
  2. 私は向きを変更
  3. が、私は私のアプリ

まず「再開」:

は、しかし、私はこれらのステップが取られたときにバグを発見しました何が起こるか:onConfigurationChanged()が呼び出され、onResume()ではなく、すべてのフィールドがリストアされます。これにより、除算が原因として例外が発生します。一部のフィールドは、まだ復元されていないため0になります。もちろん、これは望ましい動作ではありません。

私のアクティビティが完全にロードされているかどうかを示すブール値を使用して、これを回避することができます。つまり、onResume()メソッドが実行されています。と呼ばれる。しかし、私はこれを非常にきれいな解決策ではないと考えます。

私の質問は:

  1. が、これは動作を意図しますか?私はonConfigurationChanged()がonResume()の前に呼び出されるのは変だと思う。これはバグですか?
  2. 私のアプリケーションがonConfigurationChanged()を一時的に(例えば、onPause()メソッドで登録を解除して)リッスンすることをプログラムから「登録解除する」ことはできますか?この方法は、あなたがそれにいくつかのリスナーを登録する必要がありますので、呼び出されませんが、あなたはAndroidManifest.xmlファイルに次の行を置くために呼び出されるよう:

    アンドロイド:configChangesは=「向き」

答えて

1

1 - いくつかの特殊なケースでhttp://developer.android.com/reference/android/app/Activity.html

での答えは、あなたが構成の変更の1つまたは複数のタイプに基づいて、あなたの 活動の再開をバイパスすることもできます。これはマニフェストのandroid:configChanges属性で行われた です。 の設定変更のタイプについては、そこで処理すると言いますが、 が再起動される代わりに、 が現在のアクティビティの onConfigurationChanged(設定)メソッドにコールを受け取ります。ただし、設定変更に が処理されないものが含まれている場合は、アクティビティは再開され、 onConfigurationChanged(Configuration)は呼び出されません。

onconfugrationchangedが再び活動を開始する前に変更できるように、先に呼び出されるように、通常の... 2 - 私はこのことについてわからない...

+1

私の質問への答えではありません。私はonResume()は、私のアプリケーションが実行されている場合、私はonConfigurationChanged()をオーバーライド呼び出されません知っている。アプリが一時停止している間にオリエンテーションが変更されるというコンテキストで質問されました。したがって、onResume()は再開時に呼び出される必要があります。それはonConfigurationChanged()の前に呼び出されることはありませんが、それが問題です。私はすでにあなたが提供したドキュメントを見て、私を啓発していないが、とにかくそれを教えてくれた。 – Timmos

関連する問題