web-dev-qa-db-ja.com

向きが変わったときにどのアクティビティメソッドが呼び出されますか?

向きが変更されたときに呼び出されるライフサイクルのメソッドはどれですか?アプリケーションがonResume()メソッドを実行するか、アクティビティ全体をリロードします。これは、最初に実行されるかどうかを確認するブール値を1つ設定したためです。私は読んだonConfigurationChanged()は方向の変更が発生したときに開始しますが、本当ですか?これをどのように処理しますか?

31

興味深いもの...

アクティビティは開始ですonResume()は、デフォルトでXMLで宣言するものです。

そして、スタックオーバーフローに関する質問の答えから私が見つけたように:

向きの変更

  • onSaveInstanceState
  • onPause
  • onStop
  • onCreate
  • onStart
  • onRestoreInstanceState
  • onResume

アクティビティ2に切り替え

  • onSaveInstanceState
  • onPause

アクティビティ2の方向転換

  • onStop
  • onCreate
  • onStart

スイッチバックBACK FROM Activity2

  • onResume

アクティビティ1はローテーション時に非表示になっているため、「ビュー」がない(つまり、表示/表示できない)ため、onRestoreInstanceStateは呼び出されないと思います。また、縦長/横長の2つの完全に異なるレイアウトファイルを使用することも完全に可能です。これには、異なるIDを持つ異なるUI要素が含まれる可能性があります。

その結果、バンドルをonSaveInstanceStateで使用して独自のデータを保存する場合、onCreateに追加のロジックを追加して(アクティビティ1で)処理する必要がありますそこにあなた自身のデータ(そしてonRestoreInstanceStateで条件付きでそれを行う)。

特に、「最後に認識された」方向フィールドを維持して、onCreateが呼び出されていることに依存するのではなく、方向が変更されたために独自のデータを処理する必要があることをonRestoreInstanceStateに認識させることができます。

38
Siten
public class MainActivity extends AppCompatActivity {
private final static String TAG = "AppActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate(Bundle) called");
    setContentView(R.layout.activity_main);
}

@Override
public void onStart() {
    super.onStart();
    Log.d(TAG, "onStart() called");
}

@Override
public void onPause() {
    super.onPause();
    Log.d(TAG, "onPause() called");
}

@Override
public void onResume() {
    super.onResume();
    Log.d(TAG, "onResume() called");
}

@Override
public void onStop() {
    super.onStop();
    Log.d(TAG, "onStop() called");
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy() called");
}

}

1)携帯電話やエミュレーターでアプリを実行して、Logcatを開きます=>ウィンドウの上部で[詳細]を選択します。

2)画面の向きを変更してみます(例:縦向き=>横向きモード)。

この代替案がアクティビティのライフサイクルをより深く理解してくれることを願っています。

1