ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
Activity (screen တစ်ခုချင်းစီ) မှာ lifecycle state (`onCreate`, `onStart`, `onResume`, `onPause`, `onStop`, `onDestroy`) ရှိပါတယ် — app ကို background ပို့လိုက်ရင် `onPause`/`onStop` ခေါ်ပြီး, ပြန်ဖွင့်ရင် `onResume` ခေါ်ပါတယ်။ Screen rotate (portrait → landscape) လုပ်ရင် default ဖြင့် Activity ကို destroy ပြီး ပြန် create ပါတယ် — `remember { mutableStateOf(...) }` ထဲက state က rotate လုပ်ရင် ပျောက်သွားနိုင်ပါတယ် (configuration change ကို survive မလုပ်ဘူး)။ `rememberSaveable` ကို သုံးရင် rotate ဖြစ်လည်း state ကို ထိန်းထားပေးပါတယ်.
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
Counter app (Intermediate lesson 2) ကို `remember` နဲ့ ရေးထားရင်, screen rotate လုပ်လိုက်ရင် count value က 0 ဆီ reset ဖြစ်သွားနိုင်ပါတယ် — `rememberSaveable { mutableStateOf(0) }` လို့ ပြောင်းရေးရင် rotate လုပ်လည်း count value ကို ထိန်းထားပေးပါတယ်.
အတူတူ ကြည့်မယ်
@Composable
fun Counter() {
// Survives rotation — remember alone would not
var count by rememberSaveable { mutableStateOf(0) }
Column {
Text("Count: $count")
Button(onClick = { count++ }) { Text("Increment") }
}
}Emulator ကို rotate (Ctrl+F11) လုပ်ကြည့်ပြီးတောင် count value မပျောက်ဘဲ ဆက်ရှိနေတာ တွေ့ရမည်။၅ မိနစ် စမ်းကြည့်
Counter ကို `remember` နဲ့ run ပြီး count ကို ၃ ခါ click ကာ emulator ကို rotate (Ctrl+F11) လုပ်ကြည့်ပါ — value ပျောက်သွားတာ တွေ့ရမည် — ပြီးရင် `rememberSaveable` ပြောင်းပြီး ထပ်စမ်းကြည့်ပါ (value ကျန်ရှိနေရမည်)။
သတိလေးတစ်ချက်
`rememberSaveable` က object အားလုံးကို save လုပ်ပေးနိုင်တာ မဟုတ်ပါ — primitive type (Int, String) နှင့် `Parcelable`/`Serializable` implement လုပ်ထားတဲ့ object ကိုသာ save လုပ်ပေးပါတယ်။