インスタンスの状態の保存と復元が簡単に!

シンプルなアプリを作る初心者として、あなたは、画面の回転は、ユーザーから収集したすべてのデータをリセットすることをテスト中に気づくことが 画面の回転は、Androidの多くのライフサイクルの変更の一つであり、アクティビティを破壊して再作成し、すべてのデータが失われる可能性があります! 素晴らしいユーザーエクスペリエンスではありません。

アクティビティライフサイクルへのこれらの変更のためにアプリを準備するには、MainActivityに追加してデータを保存および復元する二つの方法があります:

  1. onSaveInstanceState()
  2. onRestoreInstanceState()

onSaveInstanceState()メソッドを使用すると、アプリのoutStateにキーと値のペアを追加できます。 次に、onRestoreInstanceState()メソッドを使用すると、値を取得し、最初に収集された変数に戻すことができます。

これらを使用するようにアプリを準備するには、アプリの状態によってアクティビティが破棄されたときに保存する必要があるすべてのデータ これらの変数はメソッドの外にあり、クラス内のどこからでもアクセスできます。

また、このデータをユーザーに表示するビューを識別し、属性を使用してアクティビティが復元されたときにデータがここに表示され続けるように指定する:

android:freezesText="true"

onSaveInstanceState():

このメソッドは、古いバージョンのAndroidではonStop()の前に呼び出され、新しいバージョンではonStop()の後に呼び出すことができます。

 1 @Override
2 protected void onSaveInstanceState(Bundle outState) {
3 super.onSaveInstanceState(outState);
4 outState.putInt("AStringKey", variableData);
5 outState.putString("AStringKey2", variableData2);
6 }

このメソッドを打破しましょう:

  1. 1行目のオーバーライドは、メソッドの既定の宣言をオーバーライドすることを示します。
  2. 2行目のメソッドシグネチャは、アクセス修飾子”protected”で始まり、これはメソッドがクラス自体、パッケージ、またはサブクラス内でのみアクセスできることを このメソッドの戻り値の型は、データを返さないため”void”です。 このメソッドが受け取るパラメーターは、outStateという名前のBundle型オブジェクトです。
  3. このデフォルトのメソッドをオーバーライドしているので、すべてのデフォルトのoutStateデータを格納するためにsuper(3行目)を使用する必要があります。
  4. 4行目では、自分のデータを保存することができます。 onSavedInstanceState()は、アプリのアウトステートでドット表記を使用して呼び出されます。 最初の引数は任意の文字列で、2番目の引数に格納されている値にアクセスするためのキー(変数の設定と同様)として使用されます。 ここでは、整数値を格納するインスタンス変数を提供しました。 注意5行目は、文字列型の変数がoutStateに保存されていることを除いて、非常に似ています。

onRestoreInstanceState():

このメソッドはonStart()の後に呼び出されます。

 1 @Override
2 protected void onRestoreInstanceState(Bundle savedInstanceState){
3 super.onRestoreInstanceState(savedInstanceState);
4 variableData = savedInstanceState.getInt("AStringKey");
5 variableData2 = savedInstanceState.getString("AStringKey2");
6 }

この方法を打破しましょう:

  1. 1行目のオーバーライドは、メソッドの既定の宣言をオーバーライドすることを示します。
  2. 2行目のメソッドシグネチャは、アクセス修飾子”protected”で始まります。これは、メソッドがクラス自体、パッケージ、またはサブクラス内でのみアクセスできることを示します。 このメソッドの戻り値の型は、データを返さないため”void”です。 このメソッドが受け取るパラメーターは、savedInstanceStateという名前のバンドル型オブジェクトです。
  3. この既定のメソッドをオーバーライドしているので、すべての既定のsavedInstanceStateデータを復元するには、3行目のsuperを使用する必要があります。
  4. 関連するアプリデータをインスタンス変数に格納しているため、ドット表記を使用してsavedInstanceStateのgetメソッドを呼び出して、outStateに保存したデータを変数に設定

この説明が、これらの方法とその使用方法をよりよく理解するのに役立つことを願っています。 詳細については、Androidのアクティビティドキュメントをご覧ください。

ハッピーコーディング!