向きが変更されたときに呼び出されるライフサイクルのメソッドはどれですか?アプリケーションがonResume()
メソッドを実行するか、アクティビティ全体をリロードします。これは、最初に実行されるかどうかを確認するブール値を1つ設定したためです。私は読んだonConfigurationChanged()
は方向の変更が発生したときに開始しますが、本当ですか?これをどのように処理しますか?
興味深いもの...
アクティビティは開始ですonResume()
は、デフォルトでXMLで宣言するものです。
そして、スタックオーバーフローに関する質問の答えから私が見つけたように:
アクティビティ1はローテーション時に非表示になっているため、「ビュー」がない(つまり、表示/表示できない)ため、onRestoreInstanceState
は呼び出されないと思います。また、縦長/横長の2つの完全に異なるレイアウトファイルを使用することも完全に可能です。これには、異なるIDを持つ異なるUI要素が含まれる可能性があります。
その結果、バンドルをonSaveInstanceState
で使用して独自のデータを保存する場合、onCreate
に追加のロジックを追加して(アクティビティ1で)処理する必要がありますそこにあなた自身のデータ(そしてonRestoreInstanceState
で条件付きでそれを行う)。
特に、「最後に認識された」方向フィールドを維持して、onCreate
が呼び出されていることに依存するのではなく、方向が変更されたために独自のデータを処理する必要があることをonRestoreInstanceState
に認識させることができます。
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)画面の向きを変更してみます(例:縦向き=>横向きモード)。
この代替案がアクティビティのライフサイクルをより深く理解してくれることを願っています。