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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- rememberとmutableStateOfによるState
- 再コンポジションを理解する
- State Hoisting
- rememberSaveable