שילוב של מחזור החיים עם 'כתיבה'

ספריית מחזור החיים כוללת ממשקי API מובנים שמאפשרים לשלב ב-Jetpack פיתוח נייטיב. ממשקי ה-API העיקריים כוללים את אלה:

  • העברה של Lifecycle.State הנוכחי.
  • LifecycleEffects שמאפשר להריץ חסימה על סמך ספציפי Lifecycle.Event.

השילובים האלה מספקים קטעי הוק (hooks) נוחים לניהול מחזורי חיים בתוך יצירת היררכיה. במסמך הזה מוסבר איך להשתמש בהם באפליקציה.

איסוף מצב מחזור החיים באמצעות תהליכים

מחזור החיים חושף מאפיין currentStateFlow שמספק את הערך הנוכחי של Lifecycle.State בתור StateFlow Kotlin. אפשר לאסוף את ה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 דומה ל-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
  }
}