onCreateメソッドは、画面が回転するたびにActivityで呼び出されます。onCreateが再度呼び出されるだけですか、それともアクティビティ全体が再作成されますか?
2 に答える
onCreate()だけではありません。画面を回転させると、アクティビティが一時停止、停止、再開されます。詳細については、この質問を参照してください: アクティビティのライフサイクル-onCreateはすべての方向転換で呼び出されます
質問が「なぜこれが起こるのか」である場合。答えは、Androidのアクティビティとウィンドウ内の機能に関係しています。より具体的には、Androidには現在、向きが変更されたときにすべてのビューを移動、サイズ変更、およびリレーアウトする方法がありません。このシナリオの処理を可能にするために、アクティビティを破棄して別の方向に戻すという単純な実装が実装されました。
向きを変更すると、アクティビティが閉じていることを示すonDistroyメソッドが呼び出され、新しいアクティビティが新しい高さと幅で作成されます。
向きを変更すると、Activityクラスのすべてのオブジェクトが破棄され、Activityを再起動すると、オブジェクトが再度作成されます。大量のデータがある場合は、すべてのデータを再度読み込むのに時間がかかります。したがって、すべてのオブジェクトを分離して保存することをお勧めします。 Non-Activityクラスのデータと、NonActivityクラスへのオブジェクトを作成することによるActivityクラスでの使用。
方向の変更onSaveInstanceStateメソッドも呼び出さ
れ、onSaveInstanceStateを使用すると、アクティビティが破棄および再作成されたときにデータがいくつかの値を設定または保存します。
protected void onSaveInstanceState(Bundle icicle) {
super.onSaveInstanceState(icicle);
icicle.putLong("param", value);
}
アクティビティがoncreateメソッド呼び出しを再開すると、今回はバンドルがonSaveInstanceStateに保存した値を返します
public void onCreate(Bundle icicle) {
if (icicle != null){
value = icicle.getLong("param");
}
}