0Pricing
Android Academy · レッスン

rememberSaveable

設定変更後もStateを保持します

「rememberSaveable」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。

rememberの問題点

rememberは再コンポジションをまたいでStateを保持しますが、画面の回転などの構成変更には対応しません。アクティビティが再作成されると、rememberで保持していたStateは失われ、初期値に戻ります。

rememberSaveableの登場

rememberSaveableはrememberと同じように動作しますが、構成変更やプロセスの終了後も値を保存し、復元できます。

var count by rememberSaveable { mutableStateOf(0) }

回転の例

通常のrememberでは、スマートフォンを回転するとカウンターが0に戻ります。rememberSaveableを使うと、回転後もcountが保持されます。

保存の仕組み

内部では、rememberSaveableがアクティビティのsaved instance state Bundleに値を保存します。これは従来のViewシステムがonSaveInstanceStateに使用していたものと同じ仕組みです。

対応している型

Bundleに格納できる型は自動的に保存されます。プリミティブ型、String、Parcelableオブジェクトなどです。カスタム型には少し追加の作業が必要です。

プロセスの終了

Androidがメモリを確保するためバックグラウンドのアプリを終了し、その後ユーザーが戻ってきた場合、rememberSaveableが保存されたStateを復元するため、画面はユーザーが離れたときの状態になります。

カスタムSaver

自動的に保存できない型には、保存可能な形式との相互変換を行うSaverを指定します。ComposeにはlistSaverやmapSaverなどのヘルパーが用意されています。

val saver = listSaver<MyState, Any>(
    save = { listOf(it.a, it.b) },
    restore = { MyState(it[0] as Int, it[1] as String) }
)

カスタムSaverの使用

saverパラメータを介してSaverをrememberSaveableに渡すと、Composeがその型を永続化する方法を認識できます。

var state by rememberSaveable(stateSaver = saver) {
    mutableStateOf(MyState(0, ""))
}

使い分け

回転時に失われるとユーザーが困るState(フォーム入力、スクロール位置、選択中のタブなど)にはrememberSaveableを使用します。リセットされても問題ない一時的なUI Stateには、通常のrememberを使用します。

大きなデータには使わない

保存されるBundleの容量は小さいため、rememberSaveableに大きなデータ(ビットマップや長いリストなど)を保存しないでください。大きなデータはViewModelまたはリポジトリに保持し、小さな識別子だけを保存してください。

まとめ

rememberSaveable によって回転後も状態が保持されるフォームフィールドです。

@Composable
fun LoginField() {
    var email by rememberSaveable { mutableStateOf("") }
    TextField(
        value = email,
        onValueChange = { email = it }
    )
}

クイックチェック

remember にはなく、rememberSaveable にある機能は何ですか?

まとめ

rememberSaveable:

  • 再コンポジションだけでなく、画面の回転やプロセスの終了後も状態を保持します。
  • プリミティブ型、String、Parcelable を自動的に保存します。
  • カスタム型には Saver を使用します。
  • 保存するデータは小さく保ち、大きなデータは ViewModel に置きます。

よくある質問

「rememberSaveable」レッスンは無料ですか?

はい。「rememberSaveable」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。

「rememberSaveable」で何を学びますか?

設定変更後もStateを保持します ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Android Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「rememberSaveable」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAndroid Academyレッスンでコードを書いて実行できますか?

はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. rememberとmutableStateOfによるState
  2. 再コンポジションを理解する
  3. State Hoisting
  4. rememberSaveable
← Android Academyに戻る