ผสานรวมวงจรกับ Compose

ไลบรารี Lifecycle มี API ในตัวที่ช่วยให้คุณผสานรวมกับ Jetpack เขียน API ที่สำคัญประกอบด้วย

  • ขั้นตอนสำหรับ Lifecycle.State ปัจจุบัน
  • LifecycleEffects ที่ให้คุณเรียกใช้การบล็อกตาม Lifecycle.Event

การผสานรวมเหล่านี้ทำให้เกิดฮุกที่สะดวกในการจัดการวงจรภายใน ลำดับชั้นการเขียน เอกสารนี้ระบุวิธีใช้การตั้งค่าดังกล่าวในแอป

รวบรวมสถานะของวงจรที่มีโฟลว์

วงจรจะแสดงพร็อพเพอร์ตี้ currentStateFlow ที่ระบุพร็อพเพอร์ตี้ Lifecycle.State เป็น Kotlin StateFlow คุณสามารถเก็บ Flow นี้เป็น State วิธีนี้ช่วยให้แอปของคุณอ่านการเปลี่ยนแปลงในวงจรระหว่าง องค์ประกอบ

val lifecycleOwner = LocalLifecycleOwner.current
val stateFlow = lifecycleOwner.lifecycle.currentStateFlow

val currentLifecycleState by stateFlow.collectAsState()

ตัวอย่างก่อนหน้านี้เข้าถึงได้โดยใช้โมดูล lifecycle-common เมธอด currentStateAsState() พร้อมใช้งานใน lifecycle-runtime-compose ซึ่งช่วยให้คุณอ่านสถานะของวงจรปัจจุบันได้อย่างสะดวกด้วย บรรทัดเดียว ตัวอย่างต่อไปนี้แสดงให้เห็นภาพดังกล่าว

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

เรียกใช้โค้ดในเหตุการณ์ในวงจร

นอกจากนี้ยังมี LifecycleEffects ที่ให้คุณเรียกใช้การบล็อก Lifecycle.Eventเกิดขึ้น

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

นอกจาก LifecycleEventEffect แล้ว คุณยังใช้ LifecycleStartEffect และ LifecycleResumeEffect API เหล่านี้เชื่อมโยงกับ กิจกรรมที่เจาะจงได้ และแสดงการบล็อกเพิ่มเติมภายในการบล็อกหลัก ซึ่งจะช่วยล้างโค้ดที่เหตุการณ์อาจเริ่มต้นขึ้น

LifecycleStartEffect

LifecycleStartEffect คล้ายกับ LifecycleEffect แต่ทำงานได้เท่านั้น ใน Lifecycle.Event.ON_START กิจกรรม และยังยอมรับคีย์ที่ทำงานเหมือนคีย์อื่นๆ ด้วย แป้นเขียน เมื่อมีการเปลี่ยนแปลงคีย์ การบล็อกจะทำงานอีกครั้ง

เมื่อมีเหตุการณ์ Lifecycle.Event.ON_STOP หรือเอฟเฟกต์ออกจากการจัดองค์ประกอบ จะมีการใช้การบล็อก onStopOrDispose วิธีนี้ช่วยให้คุณจัดการงานต่างๆ ให้เป็นระเบียบ นั่นเป็นส่วนหนึ่งของช่วงเริ่มต้น

LifecycleStartEffect {
  // ON_START code is executed here

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

เรซูเม่เอฟเฟกต์สำหรับวงจรการใช้งาน

LifecycleResumeEffect จะทำงานในลักษณะเดียวกับ LifecycleStartedEffect แต่ดำเนินการกับ Lifecycle.Event.ON_RESUME กิจกรรมแทน และยังมีบล็อก onPauseOrDispose ที่ดำเนินการ ทำความสะอาดได้

LifecycleResumeEffect {
  // ON_RESUME code is executed here

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