Memahami Cakupan Coroutine di Android

Apr 03 2023
Saat bekerja dengan coroutine di Android, penting untuk memahami berbagai cakupan yang tersedia untuk Anda. Dalam artikel ini, kita akan menjelajahi empat cakupan yang paling umum digunakan: GlobalScope, ViewModelScope, LifecycleScope, dan ingatCoroutineScope.

Saat bekerja dengan coroutine di Android, penting untuk memahami berbagai cakupan yang tersedia untuk Anda. Dalam artikel ini, kita akan menjelajahi empat cakupan yang paling umum digunakan: GlobalScope , ViewModelScope , LifecycleScope , dan reminderCoroutineScope . Kami akan memeriksa perbedaan antara cakupan ini dan memberikan contoh kode untuk mengilustrasikan penggunaannya.

GlobalScope
GlobalScope adalah cakupan tingkat atas yang dapat digunakan untuk meluncurkan coroutine yang memiliki masa hidup global . Coroutine yang diluncurkan dalam cakupan ini akan terus dijalankan hingga aplikasi dihentikan atau hingga dibatalkan secara eksplisit. GlobalScope harus digunakan dengan hemat, karena dapat dengan mudah menyebabkan kebocoran memori dan masalah lainnya.

Berikut adalah contoh cara menggunakan GlobalScope untuk meluncurkan coroutine yang mencatat pesan setiap detik:

GlobalScope.launch {
    while (true) {
        Log.d("Coroutine Example", "Logging a message every second")
        delay(1000)
    }
}

Berikut adalah contoh cara menggunakan ViewModelScope untuk meluncurkan coroutine yang mengambil data dari repositori:

class MyViewModel(private val repository: MyRepository): ViewModel() {
    fun fetchData() {
        viewModelScope.launch {
            val data = repository.getData()
            // Update UI with data
        }
    }
}

Berikut adalah contoh cara menggunakan LifecycleScope untuk meluncurkan coroutine yang mengambil data dari repositori:

class MyActivity : AppCompatActivity() {
    private val viewModel: MyViewModel by viewModels()
    private val scope = lifecycleScope

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        scope.launch {
            val data = viewModel.getData()
            // Update UI with data
        }

        scope.launchWhenCreated {
            val data = viewModel.getData()
            // Update UI with data
            // launchWhenCreated will launch coroutine if the lifecycle is at least on create state and gets suspended if it's on destroy state.
        }
        
        scope.launchWhenStarted {
            // Perform operations when the Activity is in the Started state
            // launchWhenStarted will launch coroutine if the lifecycle is at least on start state and gets suspended if it's on stop state.
        }
        scope.launchWhenResumed {
            // Perform operations when the Activity is in the Resumed state
            // launchWhenResumed will launch coroutine if the lifecycle is at least on resume state and gets suspended if it's on pause state.
        }
    }
}

RememberCoroutineScope adalah cakupan yang dapat digunakan dalam fungsi yang dapat disusun di Jetpack Compose . Coroutine yang diluncurkan dalam cakupan ini akan dibatalkan secara otomatis saat fungsi yang dapat disusun dihapus dari komposisi. Ini menjadikannya pilihan yang baik untuk melakukan operasi asinkron yang terkait dengan siklus hidup fungsi yang dapat disusun.

Berikut adalah contoh cara menggunakan reminderCoroutineScope untuk meluncurkan coroutine yang mengambil data dari repositori dalam fungsi yang dapat disusun:

@Composable
fun MyComposableFunction(viewModel: MyViewModel) {
    val scope = rememberCoroutineScope()
LaunchedEffect(Unit) {
        val data = viewModel.getData()
        // Update UI with data
    }
}

Jika Anda memiliki saran dan komentar, silakan tentukan.

Untuk lebih jelasnya;

  • Cakupan Coroutine Kotlin:https://kotlinlang.org/docs/coroutines-scopes.html
  • Cakupan Coroutine Global:https://developer.android.com/topic/libraries/architecture/coroutines#global-scope
  • Cakupan Coroutine ViewModel:https://developer.android.com/topic/libraries/architecture/coroutines#viewmodel-scope
  • Cakupan Coroutine Siklus Hidup:https://developer.android.com/topic/libraries/architecture/coroutines#lifecycle-scope
  • ingatCoroutineScope:https://developer.android.com/reference/kotlin/androidx/compose/runtime/package-summary.html#remembercoroutinescope-kotlin.coroutines.coroutinescope-