0

向きの変更を処理しない限り、向きが変わると Android が現在のアクティビティを破棄して再作成することはわかっています。ライフサイクルメソッドが呼び出された後に向きが変わるとき

protected void onSaveInstanceState(Bundle outState)
protected void onStop()
protected void onDestroy()
public void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onRestoreInstanceState(Bundle savedInstanceState)
protected void onResume()

私の質問は、横向きから縦向きに変更したときにこれらのメソッドが 2 回呼び出され、縦向きから横向きに切り替えたときに 1 回だけ呼び出される理由です。

4

2 に答える 2

2

Activity API - Configuration Changesを確認してください。すべての質問に答えるはずです。

デバイスの構成 (Resources.Configuration クラスで定義) が変更された場合、ユーザー インターフェイスを表示するものはすべて、その構成に一致するように更新する必要があります。アクティビティはユーザーと対話するための主要なメカニズムであるため、構成の変更を処理するための特別なサポートが含まれています。

特に指定しない限り、構成の変更 (画面の向き、言語、入力デバイスなどの変更など) により、現在のアクティビティが破棄され、onPause()、onStop()、および onPause() の通常のアクティビティ ライフサイクル プロセスが実行されます。必要に応じて onDestroy()。アクティビティがフォアグラウンドにあるか、ユーザーに表示されていた場合、そのインスタンスで onDestroy() が呼び出されると、アクティビティの新しいインスタンスが作成されます。これには、前のインスタンスが onSaveInstanceState(Bundle) から生成した savedInstanceState が含まれます。

これは、レイアウト ファイルを含むすべてのアプリケーション リソースが任意の構成値に基づいて変更される可能性があるためです。したがって、構成の変更を処理する唯一の安全な方法は、レイアウト、ドローアブル、および文字列を含むすべてのリソースを再取得することです。アクティビティは状態を保存し、その状態から自身を再作成する方法を既に知っている必要があるため、これはアクティビティを新しい構成で再起動する便利な方法です。

いくつかの特殊なケースでは、1 つ以上のタイプの構成変更に基づいて、アクティビティの再開をバイパスしたい場合があります。これは、マニフェストの android:configChanges 属性で行われます。そこで処理する構成変更の種類については、再起動される代わりに、現在のアクティビティの onConfigurationChanged(Configuration) メソッドへの呼び出しを受け取ります。ただし、構成の変更に処理しないものが含まれている場合でも、アクティビティは再起動され、 onConfigurationChanged(Configuration) は呼び出されません。

于 2012-07-26T21:54:51.323 に答える
0

エミュレータの何らかのバグかもしれませんが、実際のデバイスでは発生していません。

于 2012-07-26T11:48:33.230 に答える