Android application development 第13章:Configuration Change(構成の変更)とは

Androidでは、アプリの動作中に**「画面の状態やデバイスの構成が変わる」こと**があります。たとえば:

  • 画面の回転(縦 ↔ 横)
  • 言語の変更(日本語→英語)
  • 画面サイズの変更(マルチウィンドウなど)

これらの「構成の変化」が起こると、Activityは一度破棄され、再生成されるのが基本の挙動です。


■ なぜActivityが再生成されるの?

例えば、画面が縦から横に変わると、UIの配置も変わるかもしれませんよね。
そのためAndroidは「安全のために」一旦Activityを破棄して、必要なレイアウトなどを再読み込みし直すのです。

画面が回転する
↓
Activityの onDestroy() → onCreate() などが呼ばれる
↓
状態を保持していないと、入力していた内容が消えてしまう

■ 何が問題なの?

例えば、ユーザーがフォームに入力していたテキストが、画面回転で消えてしまう!
→ ユーザー体験が悪くなります。


■ 解決策(状況別に使い分け)

【方法①】Bundleを使って状態を保存・復元する

onSaveInstanceState()onRestoreInstanceState() を活用

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("memo", editText.getText().toString());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    String memo = savedInstanceState.getString("memo");
    editText.setText(memo);
}

→ 一時的な入力データの保存に有効です。


【方法②】ViewModel + LiveData を使う(Jetpack推奨)

  • ActivityやFragmentのライフサイクルに関係なく、データを保持できます。
  • 特に画面回転してもViewModel内のデータは保持されるので便利。
public class MyViewModel extends ViewModel {
    public MutableLiveData<String> memo = new MutableLiveData<>();
}

【方法③】構成変更を自分で処理する(Activityの再生成を抑止)

AndroidManifest.xml に追記:

<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize" />

そしてActivity側で:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // 回転後の画面に応じて再レイアウトなどを行う
}

ただしこの方法は公式としては非推奨です(複雑になりがちなので、ViewModelでの管理を優先しましょう)。


■ 補足:よく保持したい情報の例

保持対象手段
ユーザーが入力中のテキストonSaveInstanceState() or ViewModel
DBやAPIから取得したデータViewModel にキャッシュする
画像・ファイルなどの一時パス一時保存ディレクトリ or ViewModel
フラグメントの状態FragmentManager が自動的に保持してくれる(基本は意識しなくてOK)

■ まとめ

  • **構成変更(Configuration Change)**とは、画面回転や言語変更などでActivityが再生成されること。
  • 対応しないと、ユーザーの入力などが消えてしまう。
  • 解決方法は3つ:
    1. Bundleを使って一時保存
    2. ViewModelでデータを保持(推奨)
    3. configChangesで自前管理(上級者向け)

mh

Related Posts

Android application development 第33章:実践ミニアプリ:天気情報アプリ

Android application development 第32章:実践ミニアプリ:シンプルなToDoリスト

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第3章:IAM(Identity and Access Management):GCPの「誰が」「何に」「何ができるか」を管理する門番

  • 投稿者 mh
  • 6月 2, 2025
  • 0 views

現場で使えるChrome DevTools実践ガイド 第9章:Applicationパネルとストレージの確認

  • 投稿者 mh
  • 6月 2, 2025
  • 0 views

Kubernetes Learning 第29章:RBACの基礎とロール設計 〜「誰が、何を、どこで」できるのかを制御する〜

  • 投稿者 mh
  • 6月 2, 2025
  • 3 views

Android application development 第33章:実践ミニアプリ:天気情報アプリ

  • 投稿者 mh
  • 6月 2, 2025
  • 3 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第2章:リージョンとゾーン、グローバルリソース:GCPの「物理的な場所」の考え方

  • 投稿者 mh
  • 6月 1, 2025
  • 8 views

現場で使えるChrome DevTools実践ガイド 第8章:NetworkパネルでのHTTP通信確認

  • 投稿者 mh
  • 6月 1, 2025
  • 11 views