Jetpack Compose Academy · درس

‏stateIn وWhileSubscribed

خزّن التدفقات مؤقتًا وأوقف العمل عندما لا يستمع أحد

الدرس 3 من 413 خطوة

‏stateIn وWhileSubscribed درس مجاني في Jetpack Compose Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Jetpack Compose Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Jetpack Compose Academy 4 دروس في المجموع.

من التدفق البارد إلى الحالة الساخنة

ينبغي أن تكون حالة واجهة المستخدم ساخنة ومخزّنة مؤقتًا، بينما تكون التدفقات التي حوّلتها باردة. يحوّل العامل stateIn التدفق البارد إلى StateFlow.

ما الذي يفعله stateIn

يشغّل stateIn التدفق المصدر ضمن نطاق، ويشارك عملية تجميع واحدة بين جميع الجامعين، ويخزّن أحدث قيمة مؤقتًا للجامعين الجدد.

val ui = source.stateIn(
    viewModelScope, started, initial)

يحتاج إلى نطاق

الوسيطة الأولى هي scope، وغالبًا ما تكون viewModelScope، وهي تربط التدفق قيد التشغيل بدورة حياة ViewModel.

flow.stateIn(viewModelScope, ...)

يحتاج إلى قيمة ابتدائية

لأن StateFlow يحتفظ دائمًا بقيمة، يتطلب stateIn قيمة ابتدائية لعرضها قبل وصول أول إصدار فعلي.

flow.stateIn(scope, started,
    initialValue = UiState.Loading)

استراتيجية المشاركة

الوسيطة الوسطى هي سياسة SharingStarted. وهي تحدد بدقة متى يبدأ التدفق المصدر ومتى يتوقف عن العمل.

Eagerly وLazily

يبدأ SharingStarted.Eagerly التدفق فورًا ولا يوقفه مطلقًا، بينما يبدأ Lazily عند أول جامع ويستمر في العمل.

started = SharingStarted.Eagerly

تعرّف على WhileSubscribed

لا يشغّل WhileSubscribed التدفق المصدر إلا عند وجود جامع نشط واحد على الأقل، ثم يوقفه عند مغادرة آخر جامع.

started = SharingStarted.WhileSubscribed()

مهلة الثواني الخمس

يؤدي تمرير مهلة قصيرة إلى WhileSubscribed إلى إبقاء التدفق حيًا لفترة وجيزة بعد مغادرة آخر جامع، مما يجعله يتجاوز عمليات تدوير الشاشة السريعة.

SharingStarted.WhileSubscribed(5000)

لماذا تساعد المهلة

أثناء تدوير الشاشة، يغادر الجامع القديم ويصل جامع جديد بعد لحظات. تمنع timeout إعادة التشغيل غير الضرورية بينهما.

يوقف العمل المهدَر

باستخدام WhileSubscribed، يتوقف تدفق قاعدة البيانات أو الشبكة مؤقتًا عند إيقاف الشاشة، ثم يُستأنف عند عودة المستخدم. توفير للبطارية. 🔋

وصفة stateIn الكاملة

اجمع الأجزاء معًا: حوّل بياناتك، ثم استدعِ stateIn باستخدام النطاق وWhileSubscribed وحالة تحميل ابتدائية.

val ui = repo.flow().map { UiState(it) }
    .stateIn(viewModelScope,
        SharingStarted.WhileSubscribed(5000),
        UiState.Loading)

تحقّق سريعًا

حلّل دورات الحياة التي يتحكم فيها المشتركون.

مراجعة: stateIn وWhileSubscribed

أحسنت! يحوّل stateIn التدفق البارد إلى StateFlow مخزّن مؤقتًا، ويشغّله WhileSubscribed فقط أثناء مراقبته، وبذلك تتوقف عن إهدار العمل. 🎯

البدء مجانًا

تعلم Kotlin مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «‏stateIn وWhileSubscribed» مجاني؟

نعم — نص درس «‏stateIn وWhileSubscribed» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Jetpack Compose Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Jetpack Compose Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏stateIn وWhileSubscribed»؟

خزّن التدفقات مؤقتًا وأوقف العمل عندما لا يستمع أحد تتمرن على Jetpack Compose Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Jetpack Compose Academy؟

لا تُشترط خبرة سابقة. Jetpack Compose Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «‏stateIn وWhileSubscribed»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Jetpack Compose Academy هذا؟

نعم. كل درس في Jetpack Compose Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏StateFlow مقابل SharedFlow
  2. تعيين التدفقات ودمجها
  3. ‏stateIn وWhileSubscribed
  4. أحداث لمرة واحدة باستخدام Channels
← العودة إلى Jetpack Compose Academy