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 エンジニア向け教科書:実践から認定まで : 第13章:ストレージとデータベースの基礎 : オブジェクトストレージ: Cloud Storage(バケット、オブジェクト、ストレージクラス)- あなたの「データ置き場」

  • 投稿者 mh
  • 6月 23, 2025
  • 9 views

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

  • 投稿者 mh
  • 6月 21, 2025
  • 27 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第12章:Cloud CDN(Content Delivery Network):あなたのWebサイトを「世界中のユーザーに超高速で届ける宅配便ネットワーク」

  • 投稿者 mh
  • 6月 20, 2025
  • 35 views

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

  • 投稿者 mh
  • 6月 19, 2025
  • 40 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 43 views

Kubernetes Learning 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

  • 投稿者 mh
  • 6月 17, 2025
  • 42 views