Mengintegrasikan Lifecycle dengan Compose

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

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

Integrasi ini memberikan hook yang mudah untuk mengelola Siklus Proses dalam Hierarki Compose. Dokumen ini menjelaskan cara menggunakannya dalam aplikasi Anda.

Mengumpulkan status siklus proses dengan flow

Siklus proses mengekspos properti currentStateFlow yang menyediakan Lifecycle.State 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. Tujuan Metode currentStateAsState() tersedia di lifecycle-runtime-compose , yang memungkinkan Anda dengan mudah membaca status Siklus Proses saat ini dengan baris tunggal. 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 suatu Lifecycle.Event 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 apa pun yang mungkin telah dimulai.

LifecycleStartEffect

LifecycleStartEffect mirip dengan LifecycleEffect, tetapi hanya berjalan pada peristiwa Lifecycle.Event.ON_START. Model ini juga menerima kunci yang berfungsi seperti Kunci Compose. Ketika tombol berubah, hal ini akan memicu blok untuk berjalan lagi.

Saat ada peristiwa Lifecycle.Event.ON_STOP atau efek keluar dari komposisi, kode ini menjalankan blok onStopOrDispose. Hal ini memungkinkan untuk membersihkan semua pekerjaan itu adalah 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 berjalan di Lifecycle.Event.ON_RESUME tersebut. Kode ini juga menyediakan blok onPauseOrDispose yang menjalankan pembersihan data.

LifecycleResumeEffect {
  // ON_RESUME code is executed here

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