Thuta Learning
ရှာဖွေရန်
IntermediateMobile Developmentintermediate

Activity & Composable Lifecycle

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Activity & Composable Lifecycle ကို ကြောက်စရာမလိုအောင် နားလည်မယ်
  • ကိုယ်တိုင် Android Studio/Compose code ကို run ကြည့်တတ်မယ်
  • Real project ထဲမှာ ဒီ concept ကို ချက်ချင်း အသုံးချတတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

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 ကို ထိန်းထားပေးပါတယ်.

အတူတူ ကြည့်မယ်

kotlin
@Composable
fun Counter() {
    // Survives rotation — remember alone would not
    var count by rememberSaveable { mutableStateOf(0) }

    Column {
        Text("Count: $count")
        Button(onClick = { count++ }) { Text("Increment") }
    }
}
You should see
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 လုပ်ပေးပါတယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Important user input state (form data) ကို `remember` (Saveable မဟုတ်) နဲ့ပဲ ထားခြင်း — rotate ဖြစ်ရင် user ရိုက်ထားတဲ့ data ပျောက်သွားနိုင်ပါတယ်
  • Lifecycle callback (`onPause`) ထဲမှာ heavy operation (large file write) ကို run ခြင်း — UI thread ကို block လုပ်နိုင်ပါတယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

Counter ကို `remember` နဲ့ run ပြီး count ကို ၃ ခါ click ကာ emulator ကို rotate (Ctrl+F11) လုပ်ကြည့်ပါ — value ပျောက်သွားတာ တွေ့ရမည် — ပြီးရင် `rememberSaveable` ပြောင်းပြီး ထပ်စမ်းကြည့်ပါ (value ကျန်ရှိနေရမည်)။

You'll know it worked when: Emulator ကို rotate (Ctrl+F11) လုပ်ကြည့်ပြီးတောင် count value မပျောက်ဘဲ ဆက်ရှိနေတာ တွေ့ရမည်။

Activity & Composable Lifecycle | Thuta Learning