Mengintegrasikan Lifecycle dengan Compose

Library Lifecycle menawarkan API bawaan yang memungkinkan Anda berintegrasi dengan Jetpack Compose. API utama mencakup hal berikut:

  • Flow untuk Lifecycle.State saat ini.
  • LifecycleEffects yang memungkinkan Anda menjalankan blok berdasarkan Lifecycle.Event tertentu.

Integrasi ini memberikan hook yang mudah digunakan untuk mengelola Siklus Proses dalam hierarki Compose. Dokumen ini menguraikan cara menggunakannya di aplikasi Anda.

Mengumpulkan status siklus proses dengan alur

Lifecycle mengekspos properti currentStateFlow yang menyediakan Lifecycle.State saat ini sebagai StateFlow Kotlin. Anda dapat mengumpulkan Flow ini sebagai State. Hal ini memungkinkan aplikasi Anda membaca perubahan dalam Siklus Proses selama komposisi.

val lifecycleOwner = LocalLifecycleOwner.current
val stateFlow = lifecycleOwner.lifecycle.currentStateFlow
…
val currentLifecycleState by stateFlow.collectAsState()

Contoh sebelumnya dapat diakses menggunakan modul lifecycle-common. Metode currentStateAsState() tersedia di modul lifecycle-runtime-compose, yang memungkinkan Anda membaca status Siklus Proses saat ini dengan mudah dengan satu baris. Contoh berikut menunjukkan hal tersebut:

val lifecycleOwner = LocalLifecycleOwner.current
val currentLifecycleState = lifecycleOwner.lifecycle.currentStateAsState()

Menjalankan kode pada peristiwa siklus proses

Ada juga LifecycleEffects yang memungkinkan Anda menjalankan blok saat Lifecycle.Event tertentu terjadi.

LifecycleEventEffect(Lifecycle.Event.ON_START) {
  // do something here
}

Selain LifecycleEventEffect, Anda juga dapat menggunakan LifecycleStartEffect dan LifecycleResumeEffect. API ini terikat dengan peristiwa tertentu. Mereka juga menawarkan blok tambahan dalam blok utamanya yang membantu membersihkan kode yang mungkin telah dimulai oleh peristiwa.

{i>LifecycleStartEffect<i}

LifecycleStartEffect mirip dengan LifecycleEffect, tetapi hanya berjalan pada peristiwa Lifecycle.Event.ON_START. Metode ini juga menerima kunci yang berfungsi seperti kunci Compose lainnya. Saat kunci berubah, pemblokiran akan memicu pemblokiran berjalan lagi.

Saat ada peristiwa Lifecycle.Event.ON_STOP atau efek keluar dari komposisi, peristiwa tersebut akan mengeksekusi blok onStopOrDispose. Hal ini memungkinkan untuk membersihkan pekerjaan apa pun yang merupakan bagian dari blok awal.

LifecycleStartEffect {
  // ON_START code is executed here

  onStopOrDispose {
    // do any needed clean up here
  }
}

LifecycleResumeEffect

LifecycleResumeEffect berfungsi dengan cara yang sama seperti LifecycleStartedEffect, tetapi dieksekusi di peristiwa Lifecycle.Event.ON_RESUME. Kode ini juga menyediakan blok onPauseOrDispose yang menjalankan pembersihan.

LifecycleResumeEffect {
  // ON_RESUME code is executed here

  onPauseOrDispose {
    // do any needed clean up here
  }
}