初期化済みの情報の保存と復元

初期化の際に作成した ThingIFAPI のインスタンスが失われないよう、SDK では 2 通りの方法による保存と復元をサポートしています。

プロセス再起動時の保存と復元

アプリケーションがバックグラウンドに遷移したり言語設定が変更された場合に、アプリケーションや Activity などのインスタンスが Android のシステムによって再生成されます。その際に初期化処理で取得した ThingIFAPI のインスタンスは失われます。

Activity などが再生成される際に Thing-IF SDK に関する情報を復元させるには、アプリの側でインスタンスを Bundle に保存します。Activity に用意されている Activity#onSaveInstanceState 内で ThingIFAPI が実装している Parcelable インターフェイスを利用して、これらを保存してください。情報を復元するには、Activity#onCreate メソッドで復元処理を行ってください。

情報を保存・復元する例を以下に挙げます。

public class AppActivity extends Activity {
  private static final String BUNDLE_KEY_THING_IF_API = "ThingIFAPI";

  private ThingIFAPI mApi = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (savedInstanceState != null) {
      // Restore a Thing-IF API.
      mApi = savedInstanceState.getParcelable(BUNDLE_KEY_THING_IF_API);
    }

    setContentView(R.layout.activity_second);
  }

  @Override
  protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    // Save a Thing-IF API.
    outState.putParcelable(BUNDLE_KEY_THING_IF_API, mApi);
  }

}

Bundle のキー名はモバイルアプリの仕様に合わせて自由に変更できます。

上記の例では Activity#onCreate で復元していますが、Activity#onRestoreInstanceState で復元することも可能です。

なお、アクティビティのライフサイクルについては Google によるこちらのドキュメント を参照してください。

ストレージへのシリアライズ

作成した ThingIFAPI のインスタンスを長期間にわたって保存したい場合、ストレージ(Android の SharedPreferences)へのシリアライズ機能を利用できます。

ストレージへの保存は SDK によって自動的に行われます。

プロセスの再起動時、読み込みは以下のように行います。

try {
  // Load a Thing-IF API.
  ThingIFAPI api = ThingIFAPI.loadFromStoredInstance(getApplicationContext());
} catch (StoredThingIFAPIInstanceNotFoundException e) {
  // Handle the error.
}

タグを指定して複数インスタンスを作成していた場合、loadFromStoredInstance メソッドの第 2 引数にタグ名を追加して、指定されたタグの ThingIFAPI を復元することもできます。タグについては、初期化処理 をご覧ください。

removeStoredInstance メソッドによって保存されているインスタンスを削除することもできます。これら API の詳細については Javadoc を参照してください。

SharedPreferences へは ThingIFAPI_INSTANCE または ThingIFAPI_INSTANCE_タグ名 をキー名として値を保存します。これらのキー名で保存されている情報は上書きされます。