چرخه زندگی را با Compose یکپارچه کنید

کتابخانه Lifecycle API های داخلی را ارائه می دهد که به شما امکان می دهد با Jetpack Compose یکپارچه شوید. API های کلیدی شامل موارد زیر است:

  • جریان برای Lifecycle.State فعلی.
  • LifecycleEffects که به شما امکان می دهد یک بلوک را بر اساس یک Lifecycle.Event خاص اجرا کنید.

این ادغام ها قلاب های مناسبی را برای مدیریت چرخه های زندگی در سلسله مراتب Compose فراهم می کنند. این سند نحوه استفاده از آنها را در برنامه خود توضیح می دهد.

جمع آوری حالت چرخه حیات با جریان

Lifecycle یک ویژگی 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 اجرا می‌شود. همچنین کلیدهایی را می پذیرد که مانند سایر کلیدهای Compose کار می کنند. هنگامی که کلید تغییر می کند، بلوک را دوباره فعال می کند.

هنگامی که یک رویداد Lifecycle.Event.ON_STOP وجود دارد یا اثر از ترکیب خارج می شود، بلوک onStopOrDispose را اجرا می کند. این اجازه می دهد تا هر کاری که بخشی از بلوک شروع است پاک شود.

LifecycleStartEffect {
  // ON_START code is executed here

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

LifecycleResumeEffect

LifecycleResumeEffect به همان روش LifecycleStartedEffect کار می کند، اما در عوض در رویداد Lifecycle.Event.ON_RESUME اجرا می شود. همچنین یک بلوک onPauseOrDispose فراهم می کند که پاکسازی را انجام می دهد.

LifecycleResumeEffect {
  // ON_RESUME code is executed here

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