đ CoroutineScope in Jetpack Compose - āϏāĻšāĻ āĻাāώাā§ āĻŦোāĻাāϰ āĻাāĻāĻĄ
đ CoroutineScope in Jetpack Compose - āϏāĻšāĻ āĻাāώাā§ āĻŦোāĻাāϰ āĻাāĻāĻĄ
Jetpack Compose-āĻ CoroutineScope āĻšāϞো āĻŦ্āϝাāĻāĻ্āϰাāĻāύ্āĻĄ āĻাāϏ্āĻ āĻাāϞাāύোāϰ āĻāύ্āϝ āĻŦিāĻļেāώāĻাāĻŦে āĻŦ্āϝāĻŦāĻšৃāϤ āĻāĻāĻি āĻুāϞ।
āĻāĻĒāύি āϝāĻĻি āĻāĻŽāύ āĻাāĻ āĻāϰāϤে āĻাāύ āϝা āĻĻীāϰ্āĻāϏāĻŽā§ āĻāϞāĻŦে (āϝেāĻŽāύ: API āĻāϞ, āĻĄাāĻাāĻŦেāĻ āĻ āĻĒাāϰেāĻļāύ, āĻŦা āĻাāĻāĻŽাāϰ āĻাāϞাāύো) āĻিāύ্āϤু UI āĻŦ্āϞāĻ āĻāϰāĻŦে āύা, āϤাāĻšāϞে CoroutineScope āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāϤে āĻšāĻŦে! ✅
đĨ CoroutineScope āĻী?
āĻāĻāĻি CoroutineScope āĻŽূāϞāϤ Coroutine āĻাāϞাāύোāϰ āĻāύ্āϝ āĻāĻāĻি āĻāύ্āĻেāĻāύাāϰ। āĻāĻĒāύি āϝāĻāύ Coroutine āĻাāϞাāύ, āϤāĻāύ āϏেāĻা āĻāĻāĻি āύিāϰ্āĻĻিāώ্āĻ Scope-āĻāϰ āĻŽāϧ্āϝে āĻāϞāĻŦে।
āĻেāύ āĻĻāϰāĻাāϰ?
✔ UI āĻŦ্āϞāĻ āύা āĻāϰে āĻŦ্āϝাāĻāĻ্āϰাāĻāύ্āĻĄে āĻাāĻ āĻাāϞাāύোāϰ āĻāύ্āϝ
✔ āĻŦāĻĄ় āĻাāĻāĻুāϞোāĻে āĻāϞাāĻĻা āĻĨ্āϰেāĻĄে āĻাāϞিā§ে āĻ
্āϝাāĻĒāĻে āĻĢাāϏ্āĻ āĻāϰাāϰ āĻāύ্āϝ
✔ āĻŽেāĻŽোāϰি āϞিāĻ (Memory Leak) āĻāĻŽাāύোāϰ āĻāύ্āϝ
đ¯ CoroutineScope Jetpack Compose-āĻ āĻিāĻাāĻŦে āĻাāĻ āĻāϰে?
Jetpack Compose-āĻ, Coroutine āĻাāϞাāύোāϰ āĻāύ্āϝ āϏাāϧাāϰāĻŖāϤ rememberCoroutineScope() āĻŦা LaunchedEffect() āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰা āĻšā§।
✅ 1️⃣ rememberCoroutineScope() - UI āĻāĻেāύ্āĻেāϰ āĻāύ্āϝ
āĻāĻĒāύাāϰ UI-āϤে āϝāĻĻি āĻোāύো āĻŦোāϤাāĻŽ āĻাāĻĒāϞে Coroutine āĻাāϞাāϤে āĻাāύ, āϤাāĻšāϞে rememberCoroutineScope() āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāĻŦেāύ।
@Composable
fun MyButton() {
val coroutineScope = rememberCoroutineScope()
Button(onClick = {
coroutineScope.launch {
delay(2000) // 2 āϏেāĻেāύ্āĻĄ āĻ
āĻĒেāĻ্āώা āĻāϰāĻŦে
println("Button clicked!")
}
}) {
Text("Click Me")
}
}
đ āĻāĻি āĻী āĻāϰāĻŦে?
✔ āϝāĻāύ āĻŦোāϤাāĻŽ āĻাāĻĒা āĻšāĻŦে, āϤāĻāύ ⧍ āϏেāĻেāύ্āĻĄ āĻĒāϰ "Button clicked!" āĻĒ্āϰিāύ্āĻ āĻšāĻŦে ✅
✔ UI āĻŦ্āϞāĻ āĻšāĻŦে āύা!
✅ 2️⃣ LaunchedEffect() - āĻāĻŽ্āĻĒোāĻেāĻŦāϞ āϞোāĻĄ āĻšāϞে āĻ āĻোāĻŽেāĻিāĻ āĻাāϞাāύোāϰ āĻāύ্āϝ
āĻāĻĒāύি āϝāĻĻি āĻাāύ āĻāĻāĻি āϏ্āĻ্āϰিāύ āĻāĻĒেāύ āĻšāĻŦাāϰ āϏাāĻĨে āϏাāĻĨে Coroutine āĻাāϞু āĻšোāĻ, āϤাāĻšāϞে LaunchedEffect() āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāĻŦেāύ।
@Composable
fun MyScreen() {
LaunchedEffect(Unit) {
delay(3000) // 3 āϏেāĻেāύ্āĻĄ āĻ
āĻĒেāĻ্āώা āĻāϰāĻŦে
println("Screen Loaded!")
}
Text("Welcome to My App")
}
đ āĻāĻি āĻী āĻāϰāĻŦে?
✔ āϏ্āĻ্āϰিāύ āϞোāĻĄ āĻšāĻāϝ়াāϰ āĻĒāϰ ā§Š āϏেāĻেāύ্āĻĄ āĻ
āĻĒেāĻ্āώা āĻāϰে "Screen Loaded!" āĻĒ্āϰিāύ্āĻ āĻāϰāĻŦে ✅
✔ UI āĻŦ্āϞāĻ āĻšāĻŦে āύা!
✅ 3️⃣ viewModelScope - ViewModel āĻāϰ āĻŽāϧ্āϝে Coroutine āĻাāϞাāύোāϰ āĻāύ্āϝ
āϝāĻĻি Coroutine āĻাāϞাāϤে āĻšā§ ViewModel āĻāϰ āĻŽāϧ্āϝে, āϤাāĻšāϞে viewModelScope āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāϤে āĻšāĻŦে।
class MyViewModel : ViewModel() {
fun fetchData() {
viewModelScope.launch {
delay(2000)
println("Data Loaded!")
}
}
}
đ āĻāĻি āĻী āĻāϰāĻŦে?
✔ ViewModel āĻāϰ āĻŽāϧ্āϝে Coroutine āĻাāϞাāĻŦে ✅
✔ ViewModel Destroy āĻšāϞে Coroutine āĻ
āĻোāĻŽেāĻিāĻ āĻŦাāϤিāϞ āĻšāĻŦে (Cancel āĻšāĻŦে), āĻĢāϞে āĻŽেāĻŽোāϰি āϞিāĻ āĻšāĻŦে āύা! ✅
✅ 4️⃣ rememberUpdatedState() - āϝāĻāύ UI āϰিāĻĢ্āϰেāĻļ āĻšā§, āϤāĻāύāĻ Coroutine āĻāϰ āĻŽāϧ্āϝে āϞেāĻেāϏ্āĻ āĻ্āϝাāϞু āĻĒেāϤে
@Composable
fun TimerScreen(countdownTime: Int) {
val currentTime = rememberUpdatedState(countdownTime)
LaunchedEffect(Unit) {
while (currentTime.value > 0) {
delay(1000)
println("Countdown: ${currentTime.value}")
}
}
Text("Time Left: ${currentTime.value}")
}
đ āĻāĻি āĻী āĻāϰāĻŦে?
✔ countdownTime āĻāĻĒāĻĄেāĻ āĻšāϞেāĻ, Coroutine āϞেāĻেāϏ্āĻ āĻ্āϝাāϞু āĻāĻāĻ āĻāϰāĻŦে ✅
đ CoroutineScope-āĻ Dispatcher āĻীāĻাāĻŦে āĻাāĻ āĻāϰে?
CoroutineScope-āĻāϰ āĻাāĻ āĻāϰাāϰ āϧāϰāύ āύিā§āύ্āϤ্āϰāĻŖ āĻāϰা āϝাā§ Dispatcher āĻĻিā§ে।
| Dispatcher | āĻাāĻ |
|---|---|
| Dispatchers.Main | UI-āϤে āĻাāĻ āĻāϰাāϰ āĻāύ্āϝ (āϝেāĻŽāύ Text āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা) |
| Dispatchers.IO | āĻŦ্āϝাāĻāĻ্āϰাāĻāύ্āĻĄ āĻাāϏ্āĻ āĻাāϞাāύোāϰ āĻāύ্āϝ (āϝেāĻŽāύ API āĻāϞ, āĻĄাāĻাāĻŦেāĻ āĻ āĻĒাāϰেāĻļāύ) |
| Dispatchers.Default | āĻšেāĻি āĻāĻŽ্āĻĒিāĻāĻেāĻļāύাāϞ āĻাāĻ (āϝেāĻŽāύ āĻŦā§ āϞুāĻĒ āĻŦা āĻšিāϏাāĻŦ-āύিāĻাāĻļ) |
coroutineScope.launch(Dispatchers.IO) {
val data = fetchDataFromAPI()
withContext(Dispatchers.Main) {
println("Data Loaded: $data") // UI-āϤে āĻĻেāĻাāύোāϰ āĻāύ্āϝ Main Thread-āĻ āĻĒাāĻ াāĻ্āĻে
}
}
đ āĻāĻি āĻী āĻāϰāĻŦে?
✔ API āĻāϞ IO Thread-āĻ āĻাāϞাāĻŦে ✅
✔ Main Thread-āĻ āĻĢিāϰে āĻāϏে UI āĻāĻĒāĻĄেāĻ āĻāϰāĻŦে ✅
đ¯ Jetpack Compose-āĻ CoroutineScope āĻŦ্āϝāĻŦāĻšাāϰেāϰ āĻাāϞো āĻĒ্āϰ্āϝাāĻāĻিāϏ
✅ UI āĻāĻেāύ্āĻেāϰ āĻāύ্āϝ rememberCoroutineScope() āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰুāύ
✅ āϏ্āĻ্āϰিāύ āϞোāĻĄ āĻšāϞে LaunchedEffect() āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰুāύ
✅ ViewModel āĻāϰ āĻŽāϧ্āϝে Coroutine āĻাāϞাāύোāϰ āĻāύ্āϝ viewModelScope āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰুāύ
✅ āĻŦ্āϝাāĻāĻ্āϰাāĻāύ্āĻĄ āĻাāĻেāϰ āĻāύ্āϝ Dispatchers.IO āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰুāύ
✅ UI āĻāĻĒāĻĄেāĻেāϰ āĻāύ্āϝ Dispatchers.Main āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰুāύ
đ āĻļেāώ āĻāĻĨা
Jetpack Compose-āĻ CoroutineScope āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāϞে āĻŦ্āϝাāĻāĻ্āϰাāĻāύ্āĻĄ āĻাāĻ āϏāĻšāĻে āĻāϰা āϝাā§ āĻāĻŦং UI āϞ্āϝাāĻ āĻšā§ āύা! đđĨ
āĻāĻĒāύি āĻāĻāύ āĻাāύেāύ:
✔ rememberCoroutineScope() - UI āĻāĻেāύ্āĻেāϰ āĻāύ্āϝ
✔ LaunchedEffect() - āϏ্āĻ্āϰিāύ āϞোāĻĄ āĻšāϞে Coroutine āĻাāϞাāύোāϰ āĻāύ্āϝ
✔ viewModelScope - ViewModel āĻĨেāĻে Coroutine āĻাāϞাāύোāϰ āĻāύ্āϝ
✔ Dispatchers - Coroutine āĻোāĻĨাā§ āĻাāϞাāϤে āĻšāĻŦে āϤা āύিāϰ্āϧাāϰāĻŖ āĻāϰāϤে
āĻāĻāύ āĻāĻĒāύি CoroutineScope āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰে Jetpack Compose-āĻ Smooth & Responsive UI āϤৈāϰি āĻāϰāϤে āĻĒাāϰāĻŦেāύ! đ¨✨
Comments
Post a Comment