مراحل النشاط

تنفِّذ المكوّنات التي تراعي مراحل النشاط إجراءات استجابةً لتغيير في حالة مراحل النشاط لمكوّن آخر، مثل الأنشطة واللقطات. تساعدك هذه المكوّنات في إنشاء تعليمات برمجية منظَّمة بشكل أفضل، وغالبًا ما تكون أخف وزنًا، ويسهل صيانتها.

يسرد هذا الجدول جميع العناصر في المجموعة androidx.lifecycle.

العناصر الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأوّلي
lifecycle-* 2.9.1 - - -
lifecycle-viewmodel-navigation3 - - - 1.0.0-alpha03
تم إجراء آخر تعديل على هذه المكتبة في: 2 يوليو 2025

تعريف التبعيات

لإضافة تبعية إلى Lifecycle، يجب إضافة مستودع Google Maven إلى مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.

أضِف التبعيات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle لتطبيقك أو وحدتك:

Kotlin

رائع

    dependencies {
        def lifecycle_version = "2.9.1"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
        // ViewModel utilities for Compose
        implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
        // Lifecycle utilities for Compose
        implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // ViewModel integration with Navigation3
        implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03"

        // Annotation processor
        kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.9.1"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
        // ViewModel utilities for Compose
        implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")
        // Lifecycle utilities for Compose
        implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // ViewModel integration with Navigation3
        implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03")

        // Annotation processor
        kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

Java

رائع

    dependencies {
        def lifecycle_version = "2.9.1"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // Annotation processor
        annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.9.1"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // Annotation processor
        annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

لمزيد من المعلومات حول العناصر التابعة، يُرجى الاطّلاع على إضافة عناصر تابعة للإنشاء.

الملاحظات

تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية من خلال النقر على زر النجمة.

إنشاء مشكلة جديدة

يُرجى الاطّلاع على مستندات Issue Tracker للحصول على مزيد من المعلومات.

‫Lifecycle ViewModel Navigation3 الإصدار 1.0.0

الإصدار 1.0.0-alpha03

‫2 يوليو 2025

تم طرح androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03 وandroidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha03. يحتوي الإصدار 1.0.0-alpha03 على عمليات الدمج هذه.

التغييرات في التبعيات

الإصدار 1.0.0-alpha02

‫18 يونيو 2025

تم طرح androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha02 وandroidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha02. يحتوي الإصدار 1.0.0-alpha02 على عمليات الإيداع هذه.

تحديثات التبعيات

الإصدار 1.0.0-alpha01

‫23 مايو 2025

تم طرح androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01. يحتوي الإصدار 1.0.0-alpha01 على عمليات الدمج هذه.

الميزات الجديدة

  • ‫Lifecycle ViewModel Navigation3 هي مكتبة جديدة تم إنشاؤها جنبًا إلى جنب مع Navigation3 لتوفير عمليات دمج مع ViewModels. يوفّر العنصر androidx.lifecycle:lifecycle-viewmodel-navigation3 ViewModelStoreNavEntryDecorator الذي يوفّر ViewModelStoreOwner فريدًا لمحتوى كل NavEntry. ويوفّر أيضًا rememberViewModelStoreNavEntryDecorator() لضمان أن يتم التعامل مع أداة التزيين بشكل صحيح من خلال تغييرات الإعدادات.
val viewModelDecorator = rememberViewModelStoreNavEntryDecorator()

NavDisplay(
  ,
  entryDecorators =
  listOf(
    rememberSceneSetupNavEntryDecorator(),
    rememberSavedStateNavEntryDecorator(),
    viewModelDecorator
  )
)

الإصدار 2.9

الإصدار 2.9.1

‫4 يونيو 2025

تم طرح androidx.lifecycle:lifecycle-*:2.9.1. يحتوي الإصدار 2.9.1 على عمليات الدمج هذه.

إصلاح الأخطاء

  • إصلاح مشكلة عدم محو حالات SavedStateHandle.remove(key)SavedStateHandle.getMutableStateFlow(key) (d5f939، b/418746333)

الإصدار 2.9.0

‫7 مايو 2025

تم طرح androidx.lifecycle:lifecycle-*:2.9.0. يحتوي الإصدار 2.9.0 على عمليات الدمج هذه.

التغييرات المهمة منذ الإصدار 2.8.0

  • يتوفّر عنصر androidx.lifecycle:lifecycle-viewmodel-testing KMP جديد يوفّر فئة ViewModelScenario لاختبار ViewModels بشكل منفصل، مع إتاحة onCleared وSavedStateHandle بالإضافة إلى اختبار إيقاف العملية وإعادة إنشائها من خلال recreate().
  • أضِف getMutableStateFlow إلى SavedStateHandle لعرض MutableStateFlow. هذه الدالة الجديدة حصرية للمفتاح ولا يمكن استخدامها مع getLiveData. سيتم عرض استثناء إذا حاولت استخدام كليهما للوصول إلى الحالة نفسها.
  • يتضمّن الإصدار CreationExtras الآن عمليات تحميل زائدة لعوامل التشغيل تشبه الخرائط من أجل إتاحة معالجة المحتوى بطريقة اصطلاحية في Kotlin. تتيح هذه الميزة استخدام in و+= و+ مع CreationExtras.

توافق KotlinX Serialization

  • من خلال إضافة دعم KotlinX Serialization في SavedState 1.3.0، قدّمنا saved، وهو عنصر تحكّم كسول في الخصائص، لتسهيل تخزين فئات @Serializable في SavedStateHandle واستعادة هذه الفئات تلقائيًا عند إيقاف العملية وإعادة إنشائها. يُرجى ملاحظة أنّ saved المفوَّض كسول ولن يستدعي تعبير lambda init أو يحفظ أي شيء في SavedStateHandle إلى أن يتم الوصول إليه.

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyViewModel(handle: SavedStateHandle) : ViewModel() {
        var person by handle.saved { Person("John", "Doe") }
    
        fun onPersonChanged(person: Person) {
            this.person = person
        }
    }
    

Kotlin Multiplatform

  • أصبح بإمكان الوحدة lifecycle-testing الآن العمل مع KMP، بما في ذلك واجهات برمجة التطبيقات مثل TestLifecycleOwner.
  • أصبح بإمكان الوحدة lifecycle-viewmodel-savedstate الآن العمل مع KMP، بما في ذلك واجهات برمجة التطبيقات مثل SavedStateHandle.
  • يتوفّر androidx.compose.ui.platform.LocalLifecycleOwner الآن في مجموعة المصادر الشائعة.
  • أصبحت السمة NewInstanceFactory متاحة الآن على أجهزة الكمبيوتر المكتبي وأجهزة Android التي تستخدم JVM.

التغييرات في السلوك

  • الحالة Lifecycle.DESTROYED هي حالة نهائية، وأي محاولة لنقل Lifecycle منها إلى أي حالة أخرى ستؤدي الآن إلى ظهور IllegalStateException.
  • لم يعُد SavedStateHandle يتضمّن أي SavedStateProvider.saveState() تكون فيها قيمة Bundle المعروضة فارغة.

الإصدار 2.9.0-rc01

‫23 أبريل 2025

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-rc01. يحتوي الإصدار 2.9.0-rc01 على عمليات الدمج هذه.

الإصدار 2.9.0-beta01

‫9 أبريل 2025

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-beta01. يحتوي الإصدار 2.9.0-beta01 على عمليات الدمج هذه.

تغييرات واجهة برمجة التطبيقات

  • تستخدم Lifecycle ViewModel Compose الآن إعداد Kotlin Multiplatform نفسه المستخدَم في Compose Runtime 1.7.1 والإصدارات الأحدث، وتمت إزالة عناصر -desktop وإضافة عناصر -jvmStubs و-linuxx64Stubs. لا يُفترض استخدام أي من هذه الأهداف، بل هي عناصر نائبة للمساعدة في جهود Jetbrains Compose. (I5cb14، b/406592090)

تحديثات التبعيات

  • تستهدف هذه المكتبة الآن مستوى لغة Kotlin 2.0 وتتطلّب الإصدار 2.0.0 أو إصدارًا أحدث من KGP. (Idb6b5)
  • يعتمد الإصدار Lifecycle ViewModel Compose الآن على Compose 1.7.8. (I5cb14، b/406592090)

الإصدار 2.9.0-alpha13

‫26 مارس 2025

تم إصدار androidx.lifecycle:lifecycle-*:2.9.0-alpha13 بدون أي تغييرات عامة مهمة. يحتوي الإصدار 2.9.0-alpha13 على عمليات الدمج هذه.

الإصدار 2.9.0-alpha12

‫12 مارس 2025

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha12. يحتوي الإصدار 2.9.0-alpha12 على عمليات الدمج هذه.

تغييرات واجهة برمجة التطبيقات

  • أضِف التعليق التوضيحي @MainThread إلى ViewModelProvider.get في جميع منصات KMP المتوافقة. (I7e8dd، b/397736115)
  • أعِد تسمية SavedState*Delegates إلى SavedState*Delegate. (I8589b، b/399629301)

الإصدار 2.9.0-alpha11

‫26 فبراير 2025

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha11. يحتوي الإصدار 2.9.0-alpha11 على عمليات الدمج هذه.

تغييرات واجهة برمجة التطبيقات

  • إضافة المَعلمة SavedStateConfig إلى مفوَّضي saved() (I39b3a)

الإصدار 2.9.0-alpha10

‫12 فبراير 2025

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha10. يحتوي الإصدار 2.9.0-alpha10 على عمليات الدمج هذه.

تغييرات واجهة برمجة التطبيقات

  • نقل MutableStateSerializer إلى savedstate-compose من lifecycle-viewmodel-compose (I4f690، b/378895074)

المساهمة الخارجية

  • تضيف هذه القاعدة مشكلة جديدة في Lint عند استدعاء Lifecycle::currentState في التركيب، وتقترح بدلاً من ذلك استخدام currentStateAsalue().value لضمان أن تؤدي التغييرات في حالة Lifecycle إلى إعادة التركيب بشكل صحيح. شكرًا "ستيفن شون"! (Iad484)

الإصدار 2.9.0-alpha09

‫29 يناير 2025

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha09. يحتوي الإصدار 2.9.0-alpha09 على عمليات الدمج هذه.

الميزات الجديدة

  • أضِف MutableStateSerializer لتسلسل androidx.compose.runtime.MutableState. (Idfc48، b/378895074)

تغييرات واجهة برمجة التطبيقات

  • استبدال دوال تفويض SavedStateHandle.saved() المحمّلة بشكل زائد بالمعلمات التلقائية (Icd1c1)
  • تم إيقاف AbstractSavedStateViewModelFactory نهائيًا لأنّه ينشئ SavedStateHandle لكل ViewModel، ما يؤدي إلى زيادة غير ضرورية في الحمل. استخدِم ViewModelProvider.Factory مع CreationExtras.createSavedStateHandle بدلاً من ذلك لإنشاء ViewModel أكثر فعالية. (Ia920b، b/388590327)

الإصدار 2.9.0-alpha08

‫11 ديسمبر 2024

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha08. يحتوي الإصدار 2.9.0-alpha08 على عمليات الدمج هذه.

الميزات الجديدة

  • أضِف ViewModelScenario.recreate لمحاكاة عملية إيقاف النظام وإعادة إنشاء ViewModel قيد الاختبار وجميع المكوّنات المرتبطة به. (Id6a69، b/381063087)
  • يمكن الآن حلّ مثيلات LifecycleOwner وViewModelStoreOwner التي تم استردادها من خلال واجهات برمجة التطبيقات findViewTree الخاصة بها من خلال العناصر الرئيسية المنفصلة لعرض، مثل ViewOverlay. لمزيد من المعلومات عن عناصر العرض المنفصلة الرئيسية، يُرجى الاطّلاع على ملاحظات الإصدار الأساسية أو المستندات في ViewTree.setViewTreeDisjointParent. (I800f4)

تغييرات واجهة برمجة التطبيقات

  • جعل التسميات وتنظيم الحِزم أكثر اتساقًا مع SavedStateRegistryOwnerDelegate (I8c135، b/376026744)

إصلاح الأخطاء

  • تستخدم هذه المكتبة الآن تعليقات توضيحية بشأن القيم الخالية في JSpecify، وهي تعليقات توضيحية خاصة بالاستخدام. على مطوّري Kotlin استخدام وسيطة المترجم البرمجي التالية لفرض الاستخدام الصحيح: -Xjspecify-annotations=strict (هذه هي القيمة التلقائية بدءًا من الإصدار 2.1.0 من المترجم البرمجي للغة Kotlin). (Ie4340، b/326456246)
  • مستند تسلسل محو ViewModel.onCleared (I586c7، b/363984116)

الإصدار 2.9.0-alpha07

‫13 نوفمبر 2024

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha07. يحتوي الإصدار 2.9.0-alpha07 على عمليات الدمج هذه.

التوافق مع Kotlin Multiplatform

  • أصبحت دورة الحياة ViewModel SavedState متوافقة الآن مع KMP. يتيح لك ذلك استخدام SavedStateHandle في الرمز البرمجي الشائع. (Ib6394، b/334076622)

توافق KotlinX Serialization

  • من خلال إضافة دعم KotlinX Serialization في SavedState 1.3.0-alpha05، قدّمنا saved، وهو عنصر تحكّم كسول في الخصائص، لتسهيل تخزين فئات @Serializable في SavedStateHandle واستعادة هذه الفئات تلقائيًا عند إيقاف العملية وإعادة إنشائها. يُرجى ملاحظة أنّ saved المفوَّض كسول ولن يستدعي تعبير lambda init أو يحفظ أي شيء في SavedStateHandle إلى أن يتم الوصول إليه. (I47a88، b/376026744)

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyViewModel(handle: SavedStateHandle) : ViewModel() {
        var person by handle.saved { Person("John", "Doe") }
    
        fun onPersonChanged(person: Person) {
            this.person = person
        }
    }
    

تغييرات واجهة برمجة التطبيقات

  • أضِف getMutableStateFlow إلى SavedStateHandle لعرض MutableStateFlow. هذه الدالة الجديدة حصرية للمفتاح ولا يمكن استخدامها مع getLiveData. سيتم عرض استثناء إذا حاولت استخدام كليهما للوصول إلى الحالة نفسها. (I04a4f، b/375408415)

الإصدار 2.9.0-alpha06

‫30 أكتوبر 2024

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha06. يحتوي الإصدار 2.9.0-alpha06 على عمليات الإيداع هذه.

التغييرات في السلوك

  • الحالة Lifecycle.DESTROYED هي حالة نهائية، وأي محاولة لنقل Lifecycle منها إلى أي حالة أخرى ستؤدي الآن إلى ظهور IllegalStateException. (I116c4، b/370577987)
  • لم يعُد SavedStateHandle يتضمّن أي SavedStateProvider.saveState() تكون فيها قيمة Bundle المعروضة فارغة. (I910b5، b/370577987)

إصلاح الأخطاء

  • يتم الآن إكمال Lifecycle.eventFlow بشكل صحيح عندما تكون قيمة Lifecycle هي DESTROYED (I293b2، b/374043130)

الإصدار 2.9.0-alpha05

‫16 أكتوبر 2024

تم إصدار androidx.lifecycle:lifecycle-*:2.9.0-alpha05 بدون أي تغييرات ملحوظة. يحتوي الإصدار 2.9.0-alpha05 على عمليات الدمج هذه.

الإصدار 2.9.0-alpha04

‫2 أكتوبر 2024

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha04. يحتوي الإصدار 2.9.0-alpha04 على عمليات الدمج هذه.

Kotlin Multiplatform

  • تم الآن ضبط وحدة lifecycle-viewmodel-savedstate لتكون متوافقة مع KMP استعدادًا لإتاحة واجهات برمجة التطبيقات، مثل SavedStateHandle، في مجموعة المصادر المشتركة في إصدار مستقبلي. (I503ed وI48764 وb/334076622)

الإصدار 2.9.0-alpha03

‫18 سبتمبر 2024

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha03. يحتوي الإصدار 2.9.0-alpha03 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • من دورة الحياة 2.8.6: تم تحسين توافق NullSafeMutableLiveData Lint مع عمليات التحويل الذكي، ما يؤدي إلى تجنُّب النتائج الموجبة الخاطئة. (85fed6، b/181042665)

تحديثات التبعيات

الإصدار 2.9.0-alpha02

‫4 سبتمبر 2024

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha02. يحتوي الإصدار 2.9.0-alpha02 على عمليات الدمج هذه.

إصلاح الأخطاء

المساهمة الخارجية

  • نقل androidx.compose.ui.platform.LocalLifecycleOwner إلى مجموعة المصادر المشتركة (KMP) نشكر "إيفان ماتكوف" من JetBrains على مساهمته. (8cd5d03)
  • من دورة الحياة 2.8.5: أصبح تفويض إضافة ‎`SavedStateHandle.saveable`‎ يتيح الآن استخدام قيم تقبل القيم الخالية. نشكر "رومان كالوكيويتش" على مساهمته. (0d78ea6)

الإصدار 2.9.0-alpha01

‫7 أغسطس 2024

تم طرح androidx.lifecycle:lifecycle-*:2.9.0-alpha01. يحتوي الإصدار 2.9.0-alpha01 على عمليات الإيداع هذه.

Kotlin Multiplatform

  • أصبحت "lifecycle-testing" متوافقة الآن مع KMP. (Iea41e)
  • إضافة دعم linuxArm64 لهدف Kotlin المتوافق مع أنظمة أساسية متعدّدة (I139d3، b/338268719)

الميزات الجديدة

  • يتوفّر عنصر androidx.lifecycle:lifecycle-viewmodel-testing KMP جديد يوفّر فئة ViewModelScenario لاختبار ViewModels بشكل مستقل، مع إتاحة onCleared (جميع الأنظمة الأساسية) وSavedStateHandle (نظام Android فقط). (337f68d, c9b3409, 9799a95c, b/264602919)
  • أصبحت عملية إنشاء ViewModel باستخدام ViewModelProvider آمنة الآن، وتمت إزالة التعليقات التوضيحية @MainThread. (Ifd978، b/237006831)

تغييرات واجهة برمجة التطبيقات

  • أضِف دالة المصنع CreationExtras.Key() لتبسيط عملية إنشاء عناصر CreationExtras.Key مجهولة الهوية. (I970ee)
  • يتضمّن الإصدار CreationExtras الآن عمليات تحميل زائدة لعوامل التشغيل تشبه الخرائط من أجل إتاحة معالجة المحتوى بطريقة اصطلاحية في Kotlin. تتيح هذه الميزة استخدام in و+= و+ مع CreationExtras. (Ib4353)
  • تتضمّن CreationExtras الآن طرق equals وhashCode وtoString. (Ib4353)
  • أصبحت السمة NewInstanceFactory متاحة الآن على أجهزة الكمبيوتر المكتبي وأجهزة Android التي تستخدم JVM. (d3d0892)
  • خاصية الإضافة المضمّنة لعرض التطبيق الأساسي بأمان في الإصدار 2.0 من لغة Kotlin (I39df2)

إصلاح الأخطاء

  • تمت إزالة التحديد اليدوي لإمكانية الوصول إلى واجهات برمجة التطبيقات الجديدة للمنصة لأنّ ذلك يحدث تلقائيًا من خلال تصميم واجهة برمجة التطبيقات عند استخدام R8 مع الإصدار 7.3 أو إصدار أحدث من "مكوّن Android الإضافي" (مثل الإصدار 3.3 من R8)، وجميع عمليات الإنشاء عند استخدام الإصدار 8.1 أو إصدار أحدث من "مكوّن Android الإضافي" (مثل الإصدار 8.1 من D8). ننصح العملاء الذين لا يستخدمون AGP بالترقية إلى الإصدار 8.1 أو إصدار أحدث من D8. يُرجى مراجعة هذه المقالة للاطّلاع على مزيد من التفاصيل. (If6b4c، b/345472586)

الإصدار 2.8

الإصدار 2.8.7

‫30 أكتوبر 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.7. يحتوي الإصدار 2.8.7 على عمليات الدمج هذه.

تغييرات واجهة برمجة التطبيقات

  • أصبحت androidx.compose.ui.platform.LocalLifecycleOwner متاحة الآن في مجموعة المصادر المشتركة (KMP). (6a3f5b3)
  • lifecycle-runtime-compose: تمت إزالة desktop عنصر وإضافة -jvmStubs و-linuxx64Stubs عنصر. لا يُفترض استخدام أي من هذه الأهداف، بل هي عناصر نائبة للمساعدة في جهود Jetbrains Compose. (6a3f5b3)

الإصدار 2.8.6

‫18 سبتمبر 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.6. يحتوي الإصدار 2.8.6 على عمليات الدمج هذه.

إصلاح الأخطاء

  • تم تحسين دعم أخطاء NullSafeMutableLiveData Lint لعمليات التحويل الذكي، ما يؤدي إلى تجنُّب النتائج الإيجابية الخاطئة. (85fed6، b/181042665)

تحديثات التبعيات

الإصدار 2.8.5

‫4 سبتمبر 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.5. يحتوي الإصدار 2.8.5 على عمليات الدمج هذه.

إصلاح الأخطاء

  • عدِّل androidx.lifecycle.ReportFragment قواعد ProGuard للسماح بالتشويش . (ff898e1)

المساهمة الخارجية

  • يمكن الآن استخدام قيم تقبل القيم الخالية في وكيل إضافة SavedStateHandle.saveable. نشكر "رومان كالوكيويتش" على مساهمته. (0d78ea6)

الإصدار 2.8.4

‫24 يوليو 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.4. يحتوي الإصدار 2.8.4 على عمليات الدمج هذه.

إصلاح الأخطاء

  • تعالج السمة LiveData.asFlow() الآن بشكلٍ صحيح الحالات التي يتم فيها إكمال Flow الذي تم عرضه مباشرةً بعد تلقّي قيمة تم ضبطها مسبقًا على LiveData (على سبيل المثال، عند استخدام take(1)). (I9c566)
  • أصبحت عملية إكمال Lifecycle*Effect الآن غير متكررة (أي إذا تم استدعاء onStopOrDispose بسبب إيقاف Lifecycle، لن يتم استدعاؤه مرة ثانية عند التخلص منه ما لم يعُد Lifecycle إلى STARTED مرة أخرى). (I5f607، b/352364595)

الإصدار 2.8.3

‫1 يوليو 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.3. يحتوي الإصدار 2.8.3 على عمليات الدمج هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم التوافق مع الإصدارات السابقة في Lifecycle 2.8 مع الإصدار 1.6.0 من Compose والإصدارات الأقدم عند استخدام تصغير الرمز البرمجي. (aosp/3133056، b/346808608)

الإصدار 2.8.2

‫12 يونيو 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.2. يحتوي الإصدار 2.8.2 على عمليات الدمج هذه.

إصلاح الأخطاء

  • تم إصلاح أخطاء CompositionLocal LocalLifecycleOwner not present عند استخدام الإصدار 2.8.X من Lifecycle مع الإصدار 1.6.X من Compose أو إصدار أقدم. يمكنك الآن استخدام الإصدار 2.8.2 من Lifecycle مع أي إصدار من Compose بدون الحاجة إلى أي حلول بديلة. (aosp/3105647، b/336842920)
  • لن يتعطّل ViewModelProvider بعد الآن عند دمج الإصدارات السابقة من تبعيات compileOnly Lifecycle مع الإصدارات 2.8 والإصدارات الأحدث، ما يؤدي إلى حلّ المشاكل في المكتبات، مثل LeakCanary. (I80383، b/341792251)

الإصدار 2.8.1

‫29 مايو 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.1. يحتوي الإصدار 2.8.1 على عمليات الدمج هذه.

إصلاح الأخطاء

  • تعتمد السمة lifecycle-viewmodel-compose الآن على السمة compose-runtime فقط، وتمت إزالة اعتمادها على السمة compose-ui. يحتفظ عنصر Android بـ compose-ui لضمان التوافق. (aosp/3079334 وb/339562627)
  • تستخدم عملية دمج saveable في ViewModel باستخدام عناصر تحكّم في الخصائص الآن اسم الفئة كجزء من المفتاح الذي يتم إنشاؤه تلقائيًا، ما يمنع حدوث تعارضات إذا كانت فئات متعددة تستخدم SavedStateHandle نفسه. (aosp/3063463)

الإصدار 2.8.0

‫14 مايو 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.0. يحتوي الإصدار 2.8.0 على عمليات الدمج هذه.

التغييرات المهمة منذ الإصدار 2.7.0

  • تم نقل LocalLifecycleOwner من واجهة مستخدم Compose إلى lifecycle-runtime-compose حتى يمكن استخدام واجهات برمجة التطبيقات المساعدة المستندة إلى Compose خارج واجهة مستخدم Compose.
  • يحتوي العنصر lifecycle-runtime-compose الآن على واجهتَي برمجة التطبيقات dropUnlessResumed وdropUnlessStarted اللتين تسمحان لك بإيقاف النقرات أو الأحداث الأخرى التي تحدث حتى بعد أن ينخفض LifecycleOwner إلى ما دون Lifecycle.State المحدّد. على سبيل المثال، يمكن استخدام ذلك مع Navigation Compose لتجنُّب معالجة أحداث النقر بعد أن يبدأ الانتقال إلى شاشة أخرى: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • أصبحت ViewModel.viewModelScope الآن مَعلمة إنشاء قابلة للتجاهل، ما يتيح لك إدخال أداة إرسال خاصة بك وSupervisorJob() أو تجاهل الإعداد التلقائي باستخدام backgroundScope المتاح ضمن runTest. (I2817c، b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    
  • تمت إعادة كتابة ViewModel بلغة Kotlin، وأصبحت تستخدم الآن AutoClosable بدلاً من Closeable. يتيح الآن إضافة عناصر AutoCloseable مع key يسمح باستردادها عبر getCloseable().

  • أصبح استدعاء LifecycleStartEffect وLifecycleResumeEffect بدون مفتاح خطأ الآن، وذلك وفقًا للأسلوب نفسه الذي تتّبعه واجهة برمجة التطبيقات DisposableEffect التي تحاكيها هاتان الواجهتان.

  • تم إيقاف LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) نهائيًا واستبداله بـ LiveData.toPublisher(lifecycleOwner).

  • تم الآن نقل إضافات lifecycle-livedata-core-ktx Kotlin إلى الوحدة lifecycle-livedata-core.

  • تمت إعادة تصميم NullSafeMutableLiveData لتجنُّب العديد من النتائج الإيجابية الخاطئة.

توافق Lifecycle مع Kotlin Multiplatform

تتوفّر الآن واجهات برمجة التطبيقات الأساسية لدورة الحياة في Lifecycle وLifecycleOwner وLifecycleObserver وLifecycle.State وLifecycle.Event وLifecycleRegistry في عناصر متوافقة مع Kotlin Multiplatform.

العناصر المتأثرة:

  • تنقل lifecycle-common معظم واجهات برمجة التطبيقات إلى common وتتيح استخدام jvm وiOS بالإضافة إلى Android.
  • تنقل lifecycle-runtime معظم واجهات برمجة التطبيقات إلى common وتتيح استخدام jvm وiOS بالإضافة إلى Android.
  • أصبحت lifecycle-runtime-ktx فارغة الآن، وتم نقل جميع واجهات برمجة التطبيقات إلى lifecycle-runtime.
  • تنقل lifecycle-runtime-compose جميع واجهات برمجة التطبيقات إلى common وتوفّر عنصر Android مطابقًا لإمكانية التوافق مع عدة منصات في androidx.compose.

توافق ViewModel مع Kotlin Multiplatform

يتم الآن شحن العنصر lifecycle-viewmodel وواجهات برمجة التطبيقات مثل ViewModel وViewModelStore وViewModelStoreOwner وViewModelProvider في عناصر متوافقة مع Kotlin Multiplatform.

لاستيعاب هذا التغيير، أصبحت الطرق التي كانت تستغرق java.lang.Class<T>، مثل تلك المتوفّرة في ViewModelProvider، تتضمّن الآن طريقة مكافئة تستغرق kotlin.reflect.KClass<T>.

تم الحفاظ على التوافق الثنائي على Android، ولكن هناك بعض التغييرات الملحوظة عند مقارنة مساحة واجهة برمجة تطبيقات Android بمساحة واجهة برمجة التطبيقات المشتركة:

  • يتم الآن إنشاء مثيل ViewModelProvider من خلال طرق ViewModelProvider.create() بدلاً من استدعاء أداة الإنشاء مباشرةً.
  • ولا يتوفّر كل من ViewModelProvider.NewInstanceFactory وViewModelProvider.AndroidViewModelFactory إلا على أجهزة Android.
    • يُنصح باستخدام "المصانع المخصّصة" لتوسيع نطاق ViewModelProvider.Factory واستخدام طريقة create التي تأخذ CreationExtras أو استخدام viewModelFactory Kotlin DSL.
  • سيؤدي استخدام ViewModelProvider بدون مصنع مخصّص على منصات غير JVM إلى حدوث UnsupportedOperationException. على منصات JVM، يتم الحفاظ على التوافق من خلال استخدام الدالة الإنشائية ViewModel التي لا تتضمّن وسيطات في حال عدم توفير مصنع مخصّص.
  • سيتم استخدام viewModelScope كبديل لـ EmptyCoroutineContext في المنصات التي لا يتوفّر فيها Dispatchers.Main (مثل Linux).

العناصر المتأثرة:

  • تنقل lifecycle-viewmodel معظم واجهات برمجة التطبيقات إلى common وتتيح استخدام jvm وiOS بالإضافة إلى Android.
  • أصبحت lifecycle-viewmodel-ktx فارغة الآن، وتم نقل جميع واجهات برمجة التطبيقات إلى lifecycle-viewmodel.
  • تنقل lifecycle-viewmodel-compose جميع واجهات برمجة التطبيقات إلى common وتوفّر عنصر Android مطابقًا لإمكانية التوافق مع عدة منصات في androidx.compose.

التغييرات في السلوك

  • ستعرض الدالة InitializerViewModelFactory (بما في ذلك دالة الإنشاء viewModelFactory) الآن الخطأ IllegalArgumentException إذا تمت إضافة initializer بالاسم clazz: KClass<VM : ViewModel> نفسه من قبل. (Ic3a36)

المشاكل المعروفة

الإصدار 2.8.0-rc01

‫1 مايو 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.0-rc01. يحتوي الإصدار 2.8.0-rc01 على عمليات الدمج هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم تجميع "الملف الأساسي" لفئات lifecycle-common بشكلٍ صحيح. يتم الآن تجميع هذه الملفات في lifecycle-runtime AAR. (aosp/3038274، b/322382422)
  • تم إصلاح تغيير غير مقصود في ترتيب طريقة محو مثيلات AutoCloseable المرفقة بـ ViewModel، وتمت استعادة الترتيب السابق addCloseable(String, AutoCloseable) ثم addClosable(AutoCloseable) ثم onCleared(). (aosp/3041632)
  • تحسين السلوك التلقائي لإنشاء viewModelScope في بيئات JVM وNative Desktop (aosp/3039221)

المساهمة الخارجية

  • نشكر Victor Kropp على تحسين عملية التحقّق من السلسلة الرئيسية على JVM Desktop. (aosp/3037116)

الإصدار 2.8.0-beta01

‫17 أبريل 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.0-beta01. يحتوي الإصدار 2.8.0-beta01 على عمليات الدمج هذه.

الميزات الجديدة

  • أصبح العنصر lifecycle-runtime-compose متوافقًا الآن مع Kotlin Multiplatform، وتم نقل رمزه إلى common، كما يتم شحن عنصر Android، بما يتوافق مع إمكانية استخدام androidx.compose على أنظمة أساسية متعدّدة. (If7a71، I4f4a0، b/331769623)

الإصدار 2.8.0-alpha04

‫3 أبريل 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.0-alpha04. يحتوي الإصدار 2.8.0-alpha04 على عمليات الدمج هذه.

الميزات الجديدة

  • أصبح العنصر lifecycle-viewmodel-compose متوافقًا الآن مع Kotlin Multiplatform، وتم نقل رمزه إلى common، كما يتم شحن عنصر Android، بما يتوافق مع إمكانية استخدام androidx.compose على أنظمة أساسية متعدّدة. لاستيعاب هذا التغيير، تقبل الآن الدالة البرمجية Composable viewModel وسيطة KClass بالإضافة إلى java.lang.Class. (b/330323282)

إصلاح الأخطاء

  • تمت إعادة تصميم NullSafeMutableLiveData لتجنُّب العديد من النتائج الإيجابية الخاطئة. (I2d8c1 وIafb18 وI03463 وI7ecef)

تعديل التبعية

الإصدار 2.8.0-alpha03

‫20 مارس 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.0-alpha03. يحتوي الإصدار 2.8.0-alpha03 على عمليات الدمج هذه.

الميزات الجديدة

  • أصبحت ViewModel.viewModelScope الآن مَعلمة إنشاء قابلة للتجاهل، ما يتيح لك إدخال أداة إرسال خاصة بك وSupervisorJob() أو تجاهل الإعداد التلقائي باستخدام backgroundScope المتاح ضمن runTest. (I2817c، b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    

التوافق مع Kotlin Multiplatform

يتم الآن شحن العنصر lifecycle-viewmodel وواجهات برمجة التطبيقات مثل ViewModel وViewModelStore وViewModelStoreOwner وViewModelProvider في عناصر متوافقة مع Kotlin Multiplatform. (b/214568825)

لاستيعاب هذا التغيير، أصبحت الطرق التي كانت تستغرق java.lang.Class<T>، مثل تلك المتوفّرة في ViewModelProvider، تتضمّن الآن طريقة مكافئة تستغرق kotlin.reflect.KClass<T>.

تم الحفاظ على التوافق الثنائي على Android، ولكن هناك بعض التغييرات الملحوظة عند مقارنة مساحة واجهة برمجة تطبيقات Android بمساحة واجهة برمجة التطبيقات المشتركة:

  • يتم الآن إنشاء مثيل ViewModelProvider من خلال طرق ViewModelProvider.create() بدلاً من استدعاء أداة الإنشاء مباشرةً.
  • ولا يتوفّر كل من ViewModelProvider.NewInstanceFactory وViewModelProvider.AndroidViewModelFactory إلا على أجهزة Android.
    • يُنصح باستخدام "المصانع المخصّصة" لتوسيع نطاق ViewModelProvider.Factory واستخدام طريقة create التي تأخذ CreationExtras أو استخدام viewModelFactory Kotlin DSL.
  • سيؤدي استخدام ViewModelProvider بدون مصنع مخصّص على منصات غير JVM إلى حدوث UnsupportedOperationException. على منصات JVM، يتم الحفاظ على التوافق من خلال استخدام الدالة الإنشائية ViewModel التي لا تتضمّن وسيطات في حال عدم توفير مصنع مخصّص.
  • سيتم استخدام viewModelScope كبديل لـ EmptyCoroutineContext في المنصات التي لا يتوفّر فيها Dispatchers.Main (مثل Linux).

التغييرات في السلوك

  • ستعرض الدالة InitializerViewModelFactory (بما في ذلك دالة الإنشاء viewModelFactory) الآن الخطأ IllegalArgumentException إذا تمت إضافة initializer بالاسم clazz: KClass<VM : ViewModel> نفسه من قبل. (Ic3a36)

إصلاح الأخطاء

  • يتعامل ViewModel.getCloseable الآن مع المفاتيح المكرّرة: إذا كان key يتضمّن حاليًا مصدر AutoCloseable مرتبطًا به، سيتم استبدال المصدر القديم وإغلاقه على الفور. (Ibeb67)
  • أصبح الوصول إلى viewModelScope الخاص بـ ViewModel آمنًا الآن. (If4766، b/322407038)

المساهمة الخارجية

  • تم نقل LocalLifecycleOwner من Compose UI إلى lifecycle-runtime-compose حتى يمكن استخدام واجهات برمجة التطبيقات المساعدة المستندة إلى Compose خارج Compose UI. نشكر "جيك وارتون" على مساهمته. (I6c41b، b/328263448)

الإصدار 2.8.0-alpha02

‫21 فبراير 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.0-alpha02. يحتوي الإصدار 2.8.0-alpha02 على عمليات الإيداع هذه.

الميزات الجديدة

  • تمت إضافة واجهتَي برمجة التطبيقات dropUnlessResumed وdropUnlessStarted اللتين تتيحان لك تجاهل النقرات أو الأحداث الأخرى التي تحدث حتى بعد انخفاض LifecycleOwner إلى ما دون Lifecycle.State المحدّدة. على سبيل المثال، يمكن استخدام هذا الرمز مع Navigation Compose لتجنُّب معالجة أحداث النقر بعد بدء الانتقال إلى شاشة أخرى: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } (Icba83، b/317230685)

Kotlin Conversions

  • تمت إعادة كتابة ViewModel بلغة Kotlin (I16f26، b/214568825)
  • تم نقل lifecycle-viewmodel-ktx إضافات Kotlin الآن إلى وحدة دورة الحياة الأساسية. (Id787b، b/274800183)
  • تم نقل lifecycle-runtime-ktx إضافات Kotlin الآن إلى وحدة دورة الحياة الأساسية. (Ic3686، b/274800183)
  • تم نقل lifecycle-livedata-core-ktx إضافات Kotlin الآن إلى وحدة دورة الحياة الأساسية. (I54a3d، b/274800183)

التوافق مع Kotlin Multiplatform

  • تتوفّر الآن واجهات برمجة التطبيقات الأساسية لدورة الحياة في Lifecycle وLifecycleOwner وLifecycleObserver وLifecycle.State وLifecycle.Event وLifecycleRegistry في عناصر متوافقة مع Kotlin Multiplatform. (b/317249252)

تغييرات واجهة برمجة التطبيقات

  • أصبح استدعاء LifecycleStartEffect وLifecycleResumeEffect بدون مفتاح خطأ الآن، وذلك وفقًا للأسلوب نفسه الذي تتّبعه واجهة برمجة التطبيقات DisposableEffect التي تحاكيها هاتان الواجهتان. (Ib0e0c، b/323518079)
  • يتم الآن استخدام AutoCloseable بدلاً من Closeable في ViewModel. هذا تغيير متوافق مع الإصدارات القديمة. (I27f8e، b/214568825)
  • تم إيقاف LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) نهائيًا واستبداله بـ LiveData.toPublisher(lifecycleOwner). (Iabe29، b/262623005)

المساهمة الخارجية

  • نشكر "إيفان ماتكوف" من Jetbrains على المساعدة في نقل Lifecycle إلى Kotlin Multiplatform. (aosp/2926690، I0c5ac، If445d)

الإصدار 2.8.0-alpha01

‫24 يناير 2024

تم طرح androidx.lifecycle:lifecycle-*:2.8.0-alpha01. يحتوي الإصدار 2.8.0-alpha01 على عمليات الإيداع هذه.

الميزات الجديدة

  • يتيح ViewModel الآن إضافة عناصر Closeable مع key يسمح باستردادها عبر getCloseable(). (I3cf63)

الإصدار 2.7

الإصدار 2.7.0

‫10 يناير 2024

تم طرح androidx.lifecycle:lifecycle-*:2.7.0. يتضمّن الإصدار 2.7.0 عمليات الدمج هذه.

التغييرات المهمة منذ الإصدار 2.6.0

  • يتضمّن TestLifecycleOwner الآن دالة تعليق setCurrentState() تضمن اكتمال تغيير الحالة وجميع عمليات ردّ الاتصال LifecycleObserver قبل العودة. يُرجى العِلم أنّه على عكس ضبط السمة currentState مباشرةً، لا تستخدم هذه الطريقة runBlocking، ما يجعلها آمنة للاستخدام ضمن روتين فرعي مثل الروتين الذي توفّره runTest.
  • تعكس الآن الإضافات LiveData لكل من map وswitchMap سلوك distinctUntilChanged - إذا كان LiveData يتضمّن مجموعة value، سيتم استدعاء الدالة map/switchMap على الفور لتعبئة value الخاص بـ LiveData الذي تم إرجاعه. يضمن ذلك ضبط القيمة الأولية كجزء من التركيب الأول (عند استخدامها مع observeAsState())، ولكنّه لا يغيّر سلوك المراقبة، إذ لن يتم تطبيق قيم التحديثات من المصدر LiveData إلا بعد بدء مراقبة LiveData.
  • يحلّ هذا الإصدار مشكلة عدم استعادة فئات Parcelable المخصّصة بشكلٍ سليم بعد إيقاف العملية وإعادة إنشائها.SavedStateHandle بسبب فقدان معلومات النوع من خلال إطار عمل Android، تتطلّب مصفوفات Parcelable المخصّصة عملاً إضافيًا (إنشاء مصفوفة مكتوبة يدويًا من النوع الصحيح)، وتشير المستندات حول get وgetLiveData وgetStateFlow الآن تحديدًا إلى هذا القيد.
  • تمت إزالة قواعد Proguard keep المرتبطة بـ LifecycleObserver. وهذا يعني أنّ الرمز البرمجي الذي تمّت حمايته باستخدام ProGuard والذي يريد استخدام واجهات برمجة التطبيقات من خلال الانعكاس (مثل استخدام التعليق التوضيحي @OnLifecycleEvent الذي تمّ إيقافه نهائيًا منذ فترة طويلة) سيحتاج إلى توفير قواعد الاحتفاظ الخاصة به لحالة الاستخدام المحدّدة.

مراقبة أحداث دورة الحياة

  • كبديل لاستخدام LifecycleEventObserver، يمكنك الآن مراقبة Flow من Lifecycle.Event من خلال طريقة إضافة Lifecycle.asFlow().
  • يمكن لمستخدمي Jetpack Compose الآن استخدام LifecycleEventEffect لتشغيل التأثيرات الجانبية في Compose استنادًا إلى Lifecycle.Event.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • يمكن لمستخدمي Jetpack Compose استخدام LifecycleStartEffect وLifecycleResumeEffect للتعامل مع أزواج الأحداث، أي من "بدأ" إلى "توقّف" ومن "استئناف" إلى "إيقاف مؤقت" على التوالي. تتطابق واجهة برمجة التطبيقات هذه مع تلك المتوفّرة في DisposableEffect، وهي مناسبة للحالات التي يجب فيها عكس التغيير الذي يتم إجراؤه عند الانتقال إلى الأعلى عند الرجوع إلى الأسفل.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

اطّلِع على مقالة تنفيذ الرمز البرمجي عند وقوع أحداث دورة الحياة لمزيد من المعلومات.

مراقبة حالة دورة الحياة

  • يمكن الآن مراقبة Lifecycle.State الحالي من خلال السمة Lifecycle.currentStateFlow التي تعرض StateFlow حيث يمثّل value Lifecycle.State الحالي.
  • يمكن لمستخدمي Jetpack Compose استخدام الإضافة Lifecycle.currentStateAsState() لعرض Lifecycle.State مباشرةً على أنّه State في Compose. هذا التوجيه مكافئ (وبديل أقصر) للتوجيه lifecycle.currentStateFlow.collectAsState().

اطّلِع على مقالة جمع بيانات حالة مراحل النشاط باستخدام التدفقات للحصول على مزيد من المعلومات.

الإصدار 2.7.0-rc02

‫13 كانون الأول (ديسمبر) 2023

تم طرح androidx.lifecycle:lifecycle-*:2.7.0-rc02. يتضمّن الإصدار 2.7.0-rc02 عمليات الدمج هذه.

إصلاح الأخطاء

  • تم إصلاح المشكلة التي كانت تؤدي إلى عدم استعادة فئات Parcelable المخصّصة بشكلٍ صحيح بعد إيقاف العملية وإعادة إنشائها.SavedStateHandle بسبب فقدان معلومات النوع من خلال إطار عمل Android، تتطلّب مصفوفات Parcelable المخصّصة عملاً إضافيًا (إنشاء مصفوفة مكتوبة يدويًا من النوع الصحيح)، وتشير المستندات حول get وgetLiveData وgetStateFlow الآن تحديدًا إلى هذا القيد. (I0b55a)

الإصدار 2.7.0-rc01

‫15 تشرين الثاني (نوفمبر) 2023

تم طرح androidx.lifecycle:lifecycle-*:2.7.0-rc01. يحتوي الإصدار 2.7.0-rc01 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تتخلص الدالتان LifecycleStartEffect وLifecycleResumeEffect الآن بشكل صحيح من كتلة التأثير وتعيدان إنشاءها في حال تغيير LifecycleOwner. (Ia25c6)

الإصدار 2.7.0-beta01

‫1 نوفمبر 2023

تم إصدار androidx.lifecycle:lifecycle-*:2.7.0-beta01 بدون أي تغييرات. يحتوي الإصدار 2.7.0-beta01 على عمليات الدمج هذه.

  • زيادة في رقم الإصدار التجريبي، بدون إجراء تغييرات كبيرة على هذا الإصدار.

الإصدار 2.7.0-alpha03

‫18 أكتوبر 2023

تم طرح androidx.lifecycle:lifecycle-*:2.7.0-alpha03. يحتوي الإصدار 2.7.0-alpha03 على عمليات الإيداع هذه.

الميزات الجديدة

  • يحتوي lifecycle-runtime-testing الآن على عملية فحص جديدة باستخدام أداة Lint لتجنُّب ضبط Lifecycle.State الخاص بـ TestLifecycleOwner باستخدام الحقل currentState عندما يكون داخل روتين فرعي. يقترح فحص Lint الآن تعليق setCurrentState الذي يسمح بضبط Lifecycle.State بدون حظر. (Icf728، b/297880630)

إصلاح الأخطاء

  • تم إصلاح مشكلة في LiveData.switchMap حيث كان عرض مثيل LiveData نفسه في كل من المكالمة الأولية والمكالمة اللاحقة يمنع إضافة مثيل LiveData كمصدر. (Ibedcba7)

الإصدار 2.7.0-alpha02

‫6 سبتمبر 2023

تم طرح androidx.lifecycle:lifecycle-*:2.7.0-alpha02. يحتوي الإصدار 2.7.0-alpha02 على عمليات الإيداع هذه.

الميزات الجديدة

  • يتضمّن TestLifecycleOwner الآن الدالة المعلقة setCurrentState() لمنح المستخدمين خيار استخدام TestLifecycleOwner من داخل روتين فرعي، مثل الروتين الذي يوفّره runTest. (I329de، b/259344129)

تغييرات واجهة برمجة التطبيقات

  • تم نقل جميع الملفات من وحدات lifecycle-livedata-ktx إلى وحدة lifecycle-livedata الرئيسية. (I10c6f، b/274800183)

التغييرات في السلوك

  • تضبط الإضافتان LiveData.map() وLiveData.switchMap() الآن value لـ LiveData المعروضة إذا كانت LiveData السابقة قد تم ضبط قيمة لها، ما يضمن أنّ استخدام LiveData الناتجة في Jetpack Compose يتضمّن الحالة الصحيحة في التركيب الأوّلي. (I91d2b، b/269479952)
  • يُغلق addCloseable() في ViewModel الآن Closeable على الفور إذا سبق أن تلقّى ViewModel طلبًا لإجراء onCleared(). (I4712e، b/280294730)

إصلاح الأخطاء

  • من دورة الحياة 2.6.2: تم إصلاح مشكلة عدم استعادة SavedStateHandle بشكل صحيح بعد إيقاف العملية إذا تمت استعادة الحالة، وتم استدعاء save() بدون حفظ الحالة فعليًا في SavedStateRegistry الأصل، ثم تمت استعادة الحالة مرة أخرى. يحلّ هذا الخطأ مشكلة التفاعل بين rememberSaveable وNavHost في Navigation Compose. (aosp/2729289)

الإصدار 2.7.0-alpha01

‫26 يوليو 2023

تم طرح androidx.lifecycle:lifecycle-*:2.7.0-alpha01. يحتوي الإصدار 2.7.0-alpha01 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • يمكن الآن مراقبة Lifecycle.State باستخدام Compose من خلال Lifecycle.currentStateFlow، ما يؤدي إلى عرض StateFlow حيث يكون value هو Lifecycle.State الحالي. (Ib212d، b/209684871)
  • يمكن الآن مراقبة Lifecycle.Event كـ Flow مع Lifecycle.asFlow(). (If2c0f، b/176311030)
  • تمت إضافة واجهة برمجة التطبيقات LifecycleResumeEffect لتشغيل SideEffects في Compose استنادًا إلى عمليات معاودة الاتصال الخاصة بالحدثين Lifecycle.Event.ON_RESUME وLifecycle.Event.ON_PAUSE. (I60386، b/235529345)
  • تمت إضافة واجهة برمجة التطبيقات LifecycleStartEffect لتشغيل SideEffect Compose استنادًا إلى عمليات معاودة الاتصال بالأحداث Lifecycle.Event.ON_START وLifecycle.Event.ON_STOP. (I5a8d1، b/235529345)
  • تمت إضافة واجهة برمجة التطبيقات LifecycleEventEffect لتشغيل SideEffect من Compose استنادًا إلى Lifecycle.Event. (Ic9794، b/235529345)
  • تمت إضافة الإضافة Lifecycle.collectAsState() لعرض Lifecycle.State مباشرةً على أنّه State في Compose. هذا التوجيه مكافئ (وبديل أقصر) للتوجيه lifecycle.currentStateFlow.collectAsState(). (I11015، b/235529345)

إصلاح الأخطاء

  • يضبط الآن الامتداد LiveData.distinctUntilChanged() السمة value للعنصر LiveData الذي تم عرضه إذا كانت السمة LiveData السابقة تتضمّن قيمة. لا يؤدي ذلك إلى تغيير سلوك المراقبة، إذ لن يتم تطبيق القيم المعدَّلة من المصدر LiveData إلا بعد بدء مراقبة LiveData التي تم إرجاعها من distinctUntilChanged(). (Ib482f)
  • تمت إزالة قواعد Proguard keep المرتبطة بـ LifecycleObserver. وهذا يعني أنّ الرمز البرمجي الذي تمّت حمايته باستخدام ProGuard والذي يريد استخدام واجهات برمجة التطبيقات من خلال الانعكاس سيحتاج إلى توفير قواعد الاحتفاظ الخاصة به لحالة الاستخدام المحدّدة. (Ia12fd)

الإصدار 2.6

الإصدار 2.6.2

‫6 سبتمبر 2023

تم طرح androidx.lifecycle:lifecycle-*:2.6.2. يتضمّن الإصدار 2.6.2 عمليات الدمج هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم استعادة SavedStateHandle بشكل صحيح بعد إيقاف العملية إذا تمت استعادة الحالة، وتم استدعاء save() بدون حفظ الحالة فعليًا في العنصر الرئيسي SavedStateRegistry، ثم تمت استعادة الحالة مرة أخرى. يحلّ هذا الخطأ مشكلة التفاعل بين rememberSaveable وNavHost في Navigation Compose. (aosp/2729289)

الإصدار 2.6.1

‫22 مارس 2023

تم طرح androidx.lifecycle:lifecycle-*:2.6.1. يتضمّن الإصدار 2.6.1 عمليات الدمج هذه.

تحديثات التبعيات

الإصدار 2.6.0

‫8 مارس 2023

تم طرح androidx.lifecycle:lifecycle-*:2.6.0. يتضمّن الإصدار 2.6.0 عمليات الدمج هذه.

التغييرات المهمة منذ الإصدار 2.5.0

  • يتضمّن LiveData الآن السمة الجديدة isInitialized التي تشير إلى ما إذا تمّ ضبط قيمة صريحة على LiveData من قبل، ما يتيح لك التمييز بين liveData.value التي تعرض null لأنّه لم يتمّ ضبط أيّ قيمة من قبل أو قيمة null صريحة.
  • يتضمّن MediatorLiveData الآن دالة إنشاء لضبط قيمة أولية.
  • تمت إضافة إضافة جديدة في StateFlow وFlow من collectAsStateWithLifecycle() تجمع البيانات من التدفقات وتمثّل أحدث قيمة لها كحالة Compose بطريقة تراعي مراحل النشاط.
  • تم إيقاف طريقتَي Lifecycle.launchWhenX وLifecycle.whenX نهائيًا لأنّ استخدام أداة إرسال مؤقتة يمكن أن يؤدي إلى إهدار الموارد في بعض الحالات. ننصحك باستخدام Lifecycle.repeatOnLifecycle. لمزيد من المعلومات حول تعليق العمل مؤقتًا، يُرجى الاطّلاع على هذا التوضيح حول سبب عدم أمان هذه العملية بطبيعتها.
  • تحويل Kotlin: تم تحويل عدد كبير من فئات Lifecycle إلى Kotlin. تحتفظ جميع الفئات المحوَّلة بتوافقها الثنائي مع الإصدارات السابقة. تحتوي الفئات التالية على تغييرات غير متوافقة مع المصدر للفئات المكتوبة بلغة Kotlin: ViewTreeLifecycleOwner وLiveDataReactiveStreams وHasDefaultViewModelProviderFactory وViewTreeViewModelStoreOwner وTransformations وViewModelStoreOwner وLifecycleOwner

يقدّم الجدول أدناه الإحالات الناجحة المصدر للإصدار الجديد من مراحل النشاط.

مراحل النشاط 2.5 Lifecycle 2.5 (KTX) مراحل النشاط 2.6
Transformations.switchMap(liveData) {...} liveData.switchMap {...} liveData.switchMap {...}
Transformations.map(liveData) {...} liveData.map {...} liveData.map {...}
Transformations.distinctUntilChanged(liveData) {...} liveData.distinctUntilChanged{...} liveData.distinctUntilChanged{...}
LiveDataReactiveStreams.fromPublisher(publisher) publisher.toLiveData() publisher.toLiveData()
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) liveData.toPublisher(lifecycleOwner) liveData.toPublisher(lifecycleOwner)
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override val defaultViewModelProviderFactory = factory
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override val defaultViewModelProviderCreationExtras = extras
ViewTreeLifecycleOwner.set(view, owner) ViewTreeLifecycleOwner.set(view, owner) view.setViewTreeLifecycleOwner(owner)
ViewTreeLifecycleOwner.get(view) view.findViewTreeLifecycleOwner() view.findViewTreeLifecycleOwner()
override fun getViewModelStore(): ViewModelStore = store override fun getViewModelStore(): ViewModelStore = store override val viewModelStore: ViewModelStore = store
override fun getLifecycle(): Lifecycle = registry override fun getLifecycle(): Lifecycle = registry override val lifecycle: Lifecycle get() = registry
  • تتطابق الآن قيمة إمكانية قبول القيم الخالية لطريقة onChanged الخاصة بكائن Observer تم إنشاؤه في Kotlin مع قيمة إمكانية قبول القيم الخالية للنوع العام. إذا كنت تريد أن يقبل Observer.onChanged() نوعًا قابلاً للتصغير، يجب إنشاء مثيل Observer بنوع قابل للتصغير.
  • تم أيضًا تحويل هذه الفئات إلى Kotlin، ولكنها تظل متوافقة مع المصدر: DefaultLifecycleObserver وLifecycleEventObserver وLifecycle وLifecycleRegistry وLifecycleObserver وViewModelStore وAndroidViewModel وAbstractSavedStateViewModelFactory وLifecycleService وServiceLifecycleDispatcher وProcessLifecycleOwner

الإصدار 2.6.0-rc01

‫22 فبراير 2023

تم طرح androidx.lifecycle:lifecycle-*:2.6.0-rc01. يحتوي الإصدار 2.6.0-rc01 على عمليات الإيداع التالية.

إصلاح الأخطاء

  • يضبط الآن الامتداد LiveData.distinctUntilChanged() السمة value للعنصر LiveData الذي تم عرضه إذا كانت السمة LiveData السابقة تتضمّن قيمة. لا يؤدي ذلك إلى تغيير سلوك المراقبة، إذ لن يتم تطبيق القيم المعدَّلة من المصدر LiveData إلا بعد بدء مراقبة LiveData التي تم إرجاعها من distinctUntilChanged(). (Ib482f)

الإصدار 2.6.0-beta01

‫8 شباط (فبراير) 2023

تم طرح androidx.lifecycle:lifecycle-*:2.6.0-beta01. يحتوي الإصدار 2.6.0-beta01 على عمليات الإيداع هذه.

Kotlin Conversions

  • تمت إعادة كتابة LifecycleOwner بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للفئات المكتوبة بلغة Kotlin، إذ يجب الآن إلغاء السمة lifecycle بدلاً من تنفيذ الدالة getLifecycle() السابقة. (I75b4b، b/240298691)
  • أصبحت ViewModelStoreOwner متوفّرة الآن بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للفئات المكتوبة بلغة Kotlin، إذ يجب الآن إلغاء السمة viewModelStore بدلاً من تنفيذ الدالة getViewModelStore() السابقة. (I86409، b/240298691)
  • تم نقل إضافة Kotlin التي توفّر الحقل lifecycleScope في LifecycleOwner إلى العنصر lifecycle-common من lifecycle-runtime-ktx. (I41d78، b/240298691)
  • تم نقل إضافة Kotlin التي توفّر الحقل coroutineScope في Lifecycle إلى العنصر lifecycle-common من lifecycle-runtime-ktx. (Iabb91، b/240298691)

الإصدار 2.6.0-alpha05

‫25 كانون الثاني (يناير) 2023

تم طرح androidx.lifecycle:lifecycle-*:2.6.0-alpha05. يحتوي الإصدار 2.6.0-alpha05 على عمليات الدمج هذه.

Kotlin Conversions

  • تمت إعادة كتابة Transformations بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للفئات المكتوبة بلغة Kotlin والتي كانت تستخدم مباشرةً بنية مثل Transformations.map - يجب الآن على رمز Kotlin البرمجي استخدام بنية طريقة إضافة Kotlin التي كانت متاحة سابقًا فقط عند استخدام lifecycle-livedata-ktx. عند استخدام لغة البرمجة Java، تم إيقاف نهائيًا إصدارات هذه الطرق التي تستخدم طريقة androidx.arch.core.util.Function واستبدالها بالإصدارات التي تستخدم Function1 في Kotlin. يحافظ هذا التغيير على التوافق الثنائي. (I8e14f)
  • تمت إعادة كتابة ViewTreeViewModelStoreOwner بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للفئات المكتوبة بلغة Kotlin، ويجب الآن استيراد طرق إضافة Kotlin واستخدامها مباشرةً في View من androidx.lifecycle.setViewTreeViewModelStoreOwner وandroidx.lifecycle.findViewTreeViewModelStoreOwner لضبط المالك الذي تم ضبطه سابقًا والعثور عليه. وهي متوافقة مع الرموز الثنائية وتظل متوافقة مع المصدر بالنسبة إلى عمليات التنفيذ المكتوبة بلغة البرمجة Java. (Ia06d8 وIb22d8 وb/240298691)
  • تمت إعادة كتابة واجهة HasDefaultViewModelProviderFactory باستخدام لغة Kotlin. هذا تغيير غير متوافق مع المصدر للفئات المكتوبة بلغة Kotlin، إذ يجب الآن إلغاء السمتَين defaultViewModelProviderFactory وdefaultViewModelCreationExtras بدلاً من تنفيذ الدوال المقابلة السابقة. (Iaed9c، b/240298691)
  • تمت إعادة كتابة Observer بلغة Kotlin. تستخدم الطريقة onChanged() الآن الاسم value للمَعلمة. (Iffef2 وI4995e وb/240298691)
  • تتم كتابة AndroidViewModel وAbstractSavedStateViewModelFactory وLifecycleService وServiceLifecycleDispatcher وProcessLifecycleOwner الآن بلغة Kotlin (I2e771 وIbae40 وI160d7 وI08884 وI1cda7 وb/240298691)

الإصدار 2.6.0-alpha04

‫11 يناير 2023

تم طرح androidx.lifecycle:lifecycle-*:2.6.0-alpha04. يحتوي الإصدار 2.6.0-alpha04 على عمليات الإيداع هذه.

الميزات الجديدة

  • يتضمّن LiveData الآن السمة الجديدة isInitialized التي تشير إلى ما إذا تمّ ضبط قيمة صريحة على LiveData من قبل، ما يتيح لك التمييز بين liveData.value التي تعرض null لأنّه لم يتمّ ضبط أيّ قيمة من قبل أو قيمة null صريحة. (Ibd018)

تغييرات واجهة برمجة التطبيقات

  • لم تعُد واجهات برمجة التطبيقات collectAsStateWithLifecycle() الخاصة بـ lifecycle-runtime-compose في حالة تجريبية. (I09d42، b/258835424)
  • تم إيقاف طريقتَي Lifecycle.launchWhenX وLifecycle.whenX نهائيًا لأنّ استخدام أداة إرسال مؤقتة يمكن أن يؤدي إلى إهدار الموارد في بعض الحالات. ننصحك باستخدام Lifecycle.repeatOnLifecycle. (Iafc54، b/248302832)

Kotlin Conversions

  • تمت إعادة كتابة ViewTreeLifecycleOwner بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للفئات المكتوبة بلغة Kotlin، ويجب الآن استيراد طرق إضافة Kotlin واستخدامها مباشرةً في View من androidx.lifecycle.setViewTreeLifecycleOwner وandroidx.lifecycle.findViewTreeLifecycleOwner لضبط المالك الذي تم ضبطه سابقًا والعثور عليه. يحل هذا الإصدار محل إضافة Kotlin السابقة في lifecycle-runtime-ktx. وهي متوافقة مع الرموز الثنائية وتظل متوافقة مع المصدر بالنسبة إلى عمليات التنفيذ المكتوبة بلغة البرمجة Java. (I8a77a، I5234e، b/240298691)
  • تمت إعادة كتابة LiveDataReactiveStreams بلغة Kotlin. تم نقل إضافات Kotlin التي كانت سابقًا في lifecycle-reactivestreams-ktx إلى الوحدة lifecycle-reactivestreams وأصبحت هي الواجهة الأساسية للرموز المكتوبة بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للرمز المكتوب بلغة Kotlin إذا لم تكن تستخدم واجهات برمجة التطبيقات لطُرق إضافة Kotlin. (I2b1b9 وI95d22 وb/240298691)
  • تتم كتابة DefaultLifecycleObserver وLifecycleEventObserver وLifecycle وLifecycleRegistry وLifecycleObserver وViewModelStore الآن بلغة Kotlin (Iadffd، (I60034، I8c52c، I9593d، I01fe1، I59a23، b/240298691)

إصلاح الأخطاء

  • لم يعُد SavedStateHandle يتعطّل بسبب ClassCastException عند الاتصال بـ get() باستخدام نوع فئة غير صحيح. (I6ae7c)

الإصدار 2.6.0-alpha03

‫24 أكتوبر 2022

تم طرح androidx.lifecycle:lifecycle-*:2.6.0-alpha03. يحتوي الإصدار 2.6.0-alpha03 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم عمل القيود بين وحدات Lifecycle المختلفة على النحو المطلوب. (I18d0d، b/249686765)
  • تتضمّن الأخطاء التي يتم عرضها من خلال LifecycleRegistry.moveToState() الآن رسائل خطأ أكثر فائدة تُعلم المطوّرين بالمكوّن الذي يتسبّب في حدوث الخطأ. (Idf4b2، b/244910446)

الإصدار 2.6.0-alpha02

‫7 أيلول (سبتمبر) 2022

تم طرح androidx.lifecycle:lifecycle-*:2.6.0-alpha02. يحتوي الإصدار 2.6.0-alpha02 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • يتضمّن MediatorLiveData الآن دالة إنشاء لضبط قيمة أولية. (Ib6cc5، b/151244085)

إصلاح الأخطاء

  • تتضمّن حِزم Lifecycle الآن قيودًا تضمن استخدام جميع حِزم Lifecycle المترابطة للإصدار نفسه، وتتم ترقية التبعيات الأخرى تلقائيًا عند ترقية إحدى الحِزم. b/242871265
  • تُنشئ FlowLiveData.asFlow() الآن callbackFlow بدلاً من استخدام تنفيذ Channel الخاص بها لضمان أمان سلسلة المحادثات والحفاظ على السياق. (I4a8b2، b/200596935)
  • ستحتفظ الدالة FlowLiveData الخاصة بـ asLiveData الآن بالقيمة الأولية لـ StateFlow عند إنشاء الكائن LiveData الجديد. (I3f530، b/157380488)
  • من دورة الحياة 2.5.1: عمليات التنفيذ المخصّصة لـ AndroidViewModelFactory تستدعي الآن الدالة create(modelClass) بشكلٍ صحيح عند استخدام أداة الإنشاء ذات الحالة مع Lifecycle 2.4 والإصدارات الأحدث (I5b315، b/238011621)

الإصدار 2.6.0-alpha01

‫29 يونيو 2022

تم طرح androidx.lifecycle:lifecycle-*:2.6.0-alpha01. يحتوي الإصدار 2.6.0-alpha01 على عمليات الإيداع هذه.

الميزات الجديدة

  • تمت إضافة إضافة جديدة في StateFlow وFlow من collectAsStateWithLifecycle تجمع البيانات من التدفقات وتمثّل أحدث قيمة لها كحالة Compose بطريقة تراعي مراحل النشاط. يتم جمع التدفق وضبط القيمة الجديدة للانبعاث على قيمة الحالة عندما تكون مدة النشاط في Lifecycle.State معيّن على الأقل. عندما تنخفض دورة الحياة إلى ما دون Lifecycle.State، يتوقف جمع البيانات في التدفق ولا يتم تعديل قيمة الحالة. (I1856e، b/230557927)

الإصدار 2.5

الإصدار 2.5.1

‫27 يوليو 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.1. يحتوي الإصدار 2.5.1 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تستدعي عمليات التنفيذ المخصّصة لـ AndroidViewModelFactory الآن الدالة create(modelClass) بشكلٍ صحيح عند استخدام أداة إنشاء AndroidViewModelFactory ذات الحالة مع Lifecycle 2.4 أو إصدار أحدث. (I5b315، b/238011621)

الإصدار 2.5.0

‫29 يونيو 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.0. يتضمّن الإصدار 2.5.0 عمليات الإيداع هذه.

التغييرات المهمة منذ الإصدار 2.4.0

  • توفّر SavedStateHandle الآن واجهة برمجة تطبيقات getStateFlow() تعرض قيمة StateFlow في Kotlin لتتبُّع التغييرات في القيم كبديل لاستخدام LiveData.

  • ViewModel CreationExtras: عند كتابة ViewModelProvider.Factory مخصّص، لم يعُد من الضروري توسيع AndroidViewModelFactory أو AbstractSavedStateViewModelFactory للوصول إلى Application أو SavedStateHandle على التوالي. بدلاً من ذلك، يتم توفير هذه الحقول لكل فئة فرعية من ViewModelProvider.Factory كـ CreationExtras من خلال التحميل الزائد الجديد لـ create: create(Class<T>, CreationExtras). يتم توفير هذه البيانات الإضافية تلقائيًا من خلال "النشاط" أو "الجزء" عند استخدام Activity 1.5.0 وFragment 1.5.0 على التوالي.

    class CustomFactory : ViewModelProvider.Factory {
        override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
            return when (modelClass) {
                HomeViewModel::class -> {
                    // Get the Application object from extras
                    val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                    // Pass it directly to HomeViewModel
                    HomeViewModel(application)
                }
                DetailViewModel::class -> {
                    // Create a SavedStateHandle for this ViewModel from extras
                    val savedStateHandle = extras.createSavedStateHandle()
                    DetailViewModel(savedStateHandle)
                }
                else -> throw IllegalArgumentException("Unknown class $modelClass")
            } as T
        }
    }
    
  • توفّر lifecycle-viewmodel الآن viewModelFactory Kotlin DSL التي تتيح لك تحديد ViewModelProvider.Factory من حيث أداة تهيئة واحدة أو أكثر من نوع lambda، واحدة لكل فئة ViewModel معيّنة تتوافق مع المصنع المخصّص، وذلك باستخدام CreationExtras كمصدر البيانات الأساسي.

    val customFactory = viewModelFactory {
        // The return type of the lambda automatically sets what class this lambda handles
        initializer {
            // Get the Application object from extras provided to the lambda
            val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY))
            HomeViewModel(application)
        }
        initializer {
            val savedStateHandle = createSavedStateHandle()
            DetailViewModel(savedStateHandle)
        }
    }
    
  • توفّر lifecycle-viewmodel-compose الآن واجهة برمجة تطبيقات viewModel() تأخذ مصنع lambda لإنشاء مثيل ViewModel بدون الحاجة إلى إنشاء ViewModelProvider.Factory مخصّص.

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • دمج أداة الحفظ في Compose مع SavedStateHandle: يحتوي العنصر lifecycle-viewmodel-compose الآن على واجهات برمجة تطبيقات تجريبية جديدة في SavedStateHandle.saveable تتيح سلوكًا مشابهًا لسلوك rememberSaveable الذي يستند إلى SavedStateHandle في `ViewModel`.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • تمت إضافة واجهة برمجة التطبيقات addCloseable() ورمز تحميل جديد يسمح لك بإضافة عنصر واحد أو أكثر من عناصر Closeable إلى ViewModel الذي سيتم إغلاقه عند محو ViewModel بدون الحاجة إلى أي عمل يدوي في onCleared().

    على سبيل المثال، لإنشاء نطاق روتين فرعي يمكنك إدراجه في ViewModel، ولكن يمكنك التحكّم فيه من خلال الاختبار، يمكنك إنشاء CoroutineScope ينفّذ Closeable:

    class CloseableCoroutineScope(
        context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate
    ) : Closeable, CoroutineScope {
        override val coroutineContext: CoroutineContext = context
        override fun close() {
            coroutineContext.cancel()
       }
    }
    

    ويمكن استخدامها بعد ذلك في الدالة الإنشائية ViewModel مع الحفاظ على مدة البقاء نفسها كما في viewModelScope:

    class TestScopeViewModel(
        val customScope: CloseableCoroutineScope = CloseableCoroutineScope()
    ) : ViewModel(customScope) {
        // You can now use customScope in the same way as viewModelScope
    }
    

تغييرات السلوك

  • ستؤدي محاولة نقل Lifecycle.State من INITIALIZED إلى DESTROYED دائمًا إلى عرض IllegalStateException بغض النظر عما إذا كان Lifecycle يتضمّن مراقبًا مرفقًا.
  • ستزيل LifecycleRegistry الآن المراقبين عندما تصل إلى الحالة DESTROYED.

الإصدار 2.5.0-rc02

‫15 يونيو 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.0-rc02. يحتوي الإصدار 2.5.0-rc02 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • لن يتعطّل ViewModelProvider بعد الآن عند دمج إصدارات سابقة من تبعيات Lifecycle التي تستخدم compileOnly مع الإصدارات 2.5 والإصدارات الأحدث. (I81a66، b/230454566)

الإصدار 2.5.0-rc01

‫11 مايو 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.0-rc01. يحتوي الإصدار 2.5.0-rc01 على عمليات الإرسال هذه.

إصلاح الأخطاء

  • تعرض السمة MediatorLiveData.addSource() الآن الخطأ NullPointerException عند تمرير مصدر null إليها بدلاً من نشر مصدر null إلى المراقبين.(Ibd0fb، b/123085232)

الإصدار 2.5.0-beta01

‫20 أبريل 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.0-beta01. يحتوي الإصدار 2.5.0-beta01 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة مفوّضات السمة SavedStateHandle.saveable لاستخدام أسماء السمات كمفاتيح لتخزين الحالة في SavedStateHandle (I8bb86، b/225014345)

إصلاح الأخطاء

  • تم إصلاح مشكلة كانت تؤدي إلى ظهور IllegalStateException عند استخدام حِزم احتياطية متعددة، وذلك عند تضمين NavHost داخل NavHost أخرى في علامة تبويب غير أساسية في شريط التنقّل السفلي. (I11bd5، b/228865698)

الإصدار 2.5.0-alpha06

‫6 أبريل 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.0-alpha06. يحتوي الإصدار 2.5.0-alpha06 على عمليات الدمج هذه.

الميزات الجديدة

  • إضافة تحميل زائد تجريبي MutableState إلى SavedStateHandle.saveable لتحقيق التكافؤ مع rememberSaveable (I38cfe، b/224565154)

تغييرات واجهة برمجة التطبيقات

  • أصبحت السمة CreationExtras الآن مجرّدة بدلاً من أن تكون محكمة الإغلاق. (Ib8a7a)

إصلاح الأخطاء

  • تم إصلاح الخطأ IllegalStateException: Already attached to lifecycleOwner الناتج عن SavedStateHandleController. (I7ea47، b/215406268)

الإصدار 2.5.0-alpha05

‫23 مارس 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.0-alpha05. يحتوي الإصدار 2.5.0-alpha05 على عمليات الإيداع هذه.

الميزات الجديدة

  • يوفّر وحدة lifecycle-viewmodel-compose الآن SavedStateHandleSaver، وهي واجهة برمجة تطبيقات تجريبية تضمن دمج القيم في SavedStateHandle بشكل صحيح مع حالة المثيل المحفوظة نفسها التي تستخدمها rememberSaveable. (Ia88b7، b/195689777)

تغييرات واجهة برمجة التطبيقات

  • تم إصلاح مشكلة التوافق مع الإصدار 2.3 والإصدارات الأحدث من Lifecycle في Java. (I52c8a، b/219545060)

إصلاح الأخطاء

  • يتيح SavedStateViewFactory الآن استخدام CreationExtras حتى إذا تم إعداده باستخدام SavedStateRegistryOwner. في حال توفير عناصر إضافية، سيتم تجاهل الوسيطات التي تمّت تهيئتها. (I6c43b، b/224844583)

الإصدار 2.5.0-alpha04

‫9 مارس 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.0-alpha04. يحتوي الإصدار 2.5.0-alpha04 على عمليات الدمج هذه.

تغييرات واجهة برمجة التطبيقات

  • توفّر SavedStateHandle الآن واجهة برمجة تطبيقات getStateFlow() تعرض Kotlin StateFlow لتتبُّع التغييرات في القيم كبديل لاستخدام LiveData. (Iad3ab، b/178037961)

الإصدار 2.5.0-alpha03

‫23 فبراير 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.0-alpha03. يحتوي الإصدار 2.5.0-alpha03 على عمليات الإيداع هذه.

الميزات الجديدة

  • تمت إضافة واجهة برمجة التطبيقات addCloseable() ورمز تحميل جديد لإنشاء العناصر يتيح لك إضافة عنصر واحد أو أكثر من عناصر Closeable إلى ViewModel التي سيتم إغلاقها عند محو ViewModel بدون الحاجة إلى أي عمل يدوي في onCleared(). (I55ea0)
  • توفّر lifecycle-viewmodel الآن InitializerViewModelFactory تتيح لك إضافة تعبير lambda لمعالجة فئات ViewModel معيّنة، باستخدام CreationExtras كمصدر البيانات الأساسي. (If58fc، b/216687549)
  • توفّر السمة lifecycle-viewmodel-compose الآن واجهة برمجة تطبيقات viewModel() تأخذ مصنع lambda لإنشاء مثيل ViewModel بدون الحاجة إلى إنشاء ViewModelProvider.Factory مخصّص. (I97fbb، b/216688927)

تغييرات واجهة برمجة التطبيقات

  • يمكنك الآن إنشاء ViewModel باستخدام CreationExtras من خلال lifecycle-viewmodel-compose. (I08887، b/216688927)

تغييرات السلوك

  • ستؤدي محاولة نقل Lifecycle.State من INITIALIZED إلى DESTROYED دائمًا إلى عرض IllegalStateException بغض النظر عما إذا كان Lifecycle يتضمّن مراقبًا مرفقًا. (I7c390، b/177924329)
  • سيزيل LifecycleRegistry الآن المراقبين عندما يصل إلى الحالة DESTROYED. (I4f8dd، b/142925860)

الإصدار 2.5.0-alpha02

‫9 فبراير 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.0-alpha02. يحتوي الإصدار 2.5.0-alpha02 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تم تحويل SavedStateHandle وSavedStateViewModelFactory إلى Kotlin. وقد أدّى ذلك إلى تحسين إمكانية قبول القيم الخالية في الأنواع العامة في كلتا الفئتين. (Ib6ce2، b/216168263، I9647a، b/177667711)
  • يمكن أن تتضمّن مَعلمة الدالة LiveData switchMap الآن قيمة فارغة. (I40396، b/132923666)
  • تمت الآن إضافة التعليق التوضيحي @CheckResult إلى إضافات LiveData -ktx لفرض استخدام النتيجة عند استدعاء هذه الدوال. (Ia0f05، b/207325134)

تغييرات السلوك

  • تعمل السمة SavedStateHandle الآن على تخزين القيمة التلقائية بشكل صحيح عندما لا تتوفّر قيمة للمفتاح المحدّد. (I1c6ce، b/178510877)

إصلاح الأخطاء

  • من دورة الحياة 2.4.1: تم تعديل lifecycle-process ليعتمد على Startup 1.1.1 لضمان توفّر الإصلاحات التي تمنع ProcessLifecycleInitializer من عرض StartupException تلقائيًا. (Ib01df، b/216490724)
  • تتوفّر الآن رسالة خطأ محسّنة تظهر عندما تحتوي فئات AndroidViewModel المخصّصة على مَعلمات بترتيب غير صحيح ويتم محاولة إنشاء ViewModel. (I340f7، b/177667711)
  • يمكنك الآن إنشاء نموذج عرض من خلال CreationExtras باستخدام AndroidViewModelFactory بدون ضبط تطبيق. (I6ebef، b/217271656)

الإصدار 2.5.0-alpha01

‫26 يناير 2022

تم طرح androidx.lifecycle:lifecycle-*:2.5.0-alpha01. يحتوي الإصدار 2.5.0-alpha01 على عمليات الإيداع هذه.

ViewModel CreationExtras

من خلال هذا الإصدار، نضع الأساس لإعادة هيكلة طريقة إنشاء ViewModel. بدلاً من مجموعة ثابتة من الفئات الفرعية من ViewModelProvider.Factory التي تضيف كلّ منها وظائف إضافية (السماح بمَعلمة الدالة الإنشائية Application من خلال AndroidViewModelFactory، والسماح بمَعلمة الدالة الإنشائية SavedStateHandle من خلال SavedStateViewModelFactory وAbstractSavedStateViewModelFactory، وما إلى ذلك)، نحن بصدد الانتقال إلى عالم من المصانع عديمة الحالة التي تعتمد على مفهوم جديد، وهو CreationExtras. (Ia7343 وb/188691010 وb/188541057)

بموجب هذا التغيير، لن تجري ViewModelProvider مكالمات مباشرة في طريقة create(Class<T>) السابقة لـ ViewModelProvider.Factory. بدلاً من ذلك، يتم استدعاء حمل زائد جديد من create: create(Class<T>, CreationExtras). وهذا يعني أنّ أي عملية تنفيذ مباشرة للنموذج ViewModelProvider.Factory يمكنها الآن الوصول إلى كلّ من CreationExtras الجديدة هذه:

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: يتيح String الوصول إلى المفتاح المخصّص الذي تم تمريره إلى ViewModelProvider.get().
  • يتيح ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY الوصول إلى الصف Application.
  • يوفر SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY إمكانية الوصول إلى SavedStateRegistryOwner المستخدَم لإنشاء هذا ViewModel.
  • يوفر SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY إمكانية الوصول إلى ViewModelStoreOwner المستخدَم لإنشاء هذا ViewModel.
  • توفّر SavedStateHandleSupport.DEFAULT_ARGS_KEY إمكانية الوصول إلى Bundle من الوسيطات التي يجب استخدامها لإنشاء SavedStateHandle.

يتم توفير هذه الميزات الإضافية تلقائيًا عند استخدام نشاط 1.5.0-alpha01 وجزء 1.5.0-alpha01 وتنقّل 2.5.0-alpha01. إذا كنت تستخدم إصدارًا قديمًا من هذه المكتبات، سيكون CreationExtras فارغًا، إذ تمت إعادة كتابة جميع الفئات الفرعية الحالية من ViewModelProvider.Factory لتتوافق مع مسار الإنشاء القديم الذي تستخدمه الإصدارات القديمة من هذه المكتبات ومسار CreationExtras الذي سيتم استخدامه من الآن فصاعدًا.

تتيح لك هذه CreationExtras إنشاء ViewModelProvider.Factory يمرّر المعلومات التي تحتاجها فقط إلى كل ViewModel بدون الاعتماد على تسلسل هرمي صارم لفئات Factory الفرعية:

class CustomFactory : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
        return when (modelClass) {
            HomeViewModel::class -> {
                // Get the Application object from extras
                val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                // Pass it directly to HomeViewModel
                HomeViewModel(application)
            }
            DetailViewModel::class -> {
                // Create a SavedStateHandle for this ViewModel from extras
                val savedStateHandle = extras.createSavedStateHandle()
                DetailViewModel(savedStateHandle)
            }
            else -> throw IllegalArgumentException("Unknown class $modelClass")
        } as T
    }
}

نستخدم دالة الإضافة createSavedStateHandle() في Kotlin على CreationExtras من SavedStateHandleSupport لإنشاء SavedStateHandle فقط لـ ViewModel الذي يحتاج إليها. (Ia6654، b/188541057)

يمكن توفير CreationExtras المخصّص من خلال إلغاء getDefaultViewModelCreationExtras() في ComponentActivity أو Fragment، ما يتيح استخدامه في ViewModelProvider.Factory المخصّص كشكل مضمّن من أشكال الإدخال المساعد. ستتوفّر هذه الإضافات تلقائيًا في Factory المخصّصة عند استخدامها مباشرةً مع ViewModelProvider أو عند استخدام إضافات سمات Kotlin by viewModels() وby activityViewModels(). (I79f2b، b/207012584، b/207012585، b/207012490)

إصلاح الأخطاء

  • تم إصلاح المشكلة التي كانت تتسبّب في إعادة ظهور القيمة التلقائية المقدَّمة إلى SavedStateHandle بعد إيقاف العملية وإعادة إنشائها، حتى إذا تمت إزالتها تحديدًا من SavedStateHandle. نتيجةً لذلك، لن تدمج SavedStateHandle القيم التلقائية والقيم التي تمت استعادتها معًا، بل ستستخدم القيم التي تمت استعادتها فقط كمصدر للحقيقة. (I53a4b)

الإصدار 2.4

الإصدار 2.4.1

‫9 فبراير 2022

تم طرح androidx.lifecycle:lifecycle-*:2.4.1. يحتوي الإصدار 2.4.1 على عمليات الدمج هذه.

إصلاح الأخطاء

  • تم نقل التغيير من مكوّن Lifecycle 2.5.0-alpha01: تم إصلاح مشكلة كانت تؤدي إلى إعادة ظهور القيمة التلقائية المقدَّمة إلى SavedStateHandle بعد إيقاف العملية وإعادة إنشائها، حتى إذا تمت إزالتها تحديدًا من SavedStateHandle. نتيجةً لذلك، لن تدمج SavedStateHandle القيم التلقائية والقيم التي تمت استعادتها معًا، بل ستستخدم القيم التي تمت استعادتها فقط كمصدر للحقيقة. (I53a4b)
  • يعتمد الإصدار lifecycle-process الآن على Androidx Startup 1.1.1 الذي أصلح مشكلة في الإصدارات السابقة حيث كان استخدام ProcessLifecycleInitializer يؤدي إلى حدوث StartupException. (b/216490724)

الإصدار 2.4.0

‫27 أكتوبر 2021

تم طرح androidx.lifecycle:lifecycle-*:2.4.0. يتضمّن الإصدار 2.4.0 عمليات الدمج هذه.

التغييرات المهمة منذ الإصدار 2.3.0

  • تم إيقاف @OnLifecycleEvent نهائيًا. يجب استخدام LifecycleEventObserver أو DefaultLifecycleObserver بدلاً من ذلك.
  • تمت إضافة مكتبة androidx.lifecycle:lifecycle-viewmodel-compose. توفّر viewModel() قابلة للإنشاء وLocalViewModelStoreOwner.
    • تغيير غير متوافق مع الإصدارات السابقة: تمت إعادة كتابة ViewModelProvider بلغة Kotlin. لم يعُد الإجراء ViewModelProvider.Factory.create يسمح بقيمة عامة تقبل القيم الخالية.
  • تمت إضافة واجهة برمجة تطبيقات جديدة للروتينات الفرعية إلى androidx.lifecycle:lifecycle-runtime-ktx:
  • Lifecycle.repeatOnLifecycle، وهي واجهة برمجة تطبيقات تنفّذ مجموعة من الرموز البرمجية في روتين فرعي عندما تكون "دورة الحياة" في حالة معيّنة على الأقل. سيتم إلغاء الحظر وإعادة إطلاقه مع انتقال دورة الحياة إلى الحالة المستهدَفة وخروجها منها.
  • Flow.flowWithLifecycle، وهي واجهة برمجة تطبيقات تعرض قيمًا من Flow المصدر عندما تكون حالة عمر التطبيق في حالة معيّنة على الأقل.
  • تم نقل DefaultLifecycleObserver من lifecycle.lifecycle-common-java8 إلى lifecycle.lifecycle-common. لم يعُد lifecycle.lifecycle-common-java8 يوفّر أي وظائف إضافية إلى جانب lifecycle.lifecycle-common، لذا يمكن استبدال الاعتماد عليه بـ lifecycle.lifecycle-common.
  • تم نقل واجهة برمجة التطبيقات غير المتزامنة من lifecycle-viewmodel-ktx إلى الوحدة lifecycle-viewmodel.
  • يستخدم lifecycle-process الآن androidx.startup لإعداد ProcessLifecycleOwner.

    في السابق، كان يتم ذلك من خلال androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    إذا كنت قد استخدمت tools:node="remove" في ContentProvider المستخدَمة لتهيئة دورة حياة العملية في السابق، عليك اتّباع الخطوات التالية بدلاً من ذلك.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (أو)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

الإصدار 2.4.0-rc01

‫29 سبتمبر 2021

تم إصدار androidx.lifecycle:lifecycle-*:2.4.0-rc01 بدون أي تغييرات عن الإصدار Lifecycle 2.4.0-beta01. يحتوي الإصدار 2.4.0-rc01 على عمليات الإيداع هذه.

الإصدار 2.4.0-beta01

‫15 سبتمبر 2021

تم طرح androidx.lifecycle:lifecycle-*:2.4.0-beta01. يحتوي الإصدار 2.4.0-beta01 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف @OnLifecycleEvent نهائيًا. يجب استخدام LifecycleEventObserver أو DefaultLifecycleObserver بدلاً من ذلك. (I5a8fa)
  • تم نقل DefaultLifecycleObserver من androidx.lifecycle.lifecycle-common-java8 إلى androidx.lifecycle.lifecycle-common. لم يعُد androidx.lifecycle.lifecycle-common-java8 يوفّر أي وظائف إضافية إلى جانب androidx.lifecycle.lifecycle-common، لذا يمكن استبدال الاعتماد عليه بـ androidx.lifecycle.lifecycle-common. (I021aa)
  • تم نقل واجهة برمجة التطبيقات غير المتزامنة من lifecycle-viewmodel-ktx إلى الوحدة lifecycle-viewmodel. (I6d5b2)

المساهمة الخارجية

  • شكرًا dmitrilc على تصحيح خطأ في مستندات ViewModel. (#221)

الإصدار 2.4.0-alpha03

‫4 أغسطس 2021

تم طرح androidx.lifecycle:lifecycle-*:2.4.0-alpha03. يحتوي الإصدار 2.4.0-alpha03 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تغيير غير متوافق مع المصدر: تمت إعادة كتابة ViewModelProvider بلغة Kotlin. لم يعُد الإجراء ViewModelProvider.Factory.create يسمح بقيمة عامة تقبل القيم الفارغة. (I9b9f6)

التغييرات في السلوك

  • يتم الآن استدعاء Lifecycle.repeatOnLifecycle: block دائمًا بشكل تسلسلي عند تكرار التنفيذ. (Ibab33)

المساهمة الخارجية

  • نشكر chao2zhang على إصلاح مقتطفات الرمز في مستندات repeatOnLifecycle. ‫#205

الإصدار 2.4.0-alpha02

‫16 حزيران (يونيو) 2021

تم طرح androidx.lifecycle:lifecycle-*:2.4.0-alpha02. يحتوي الإصدار 2.4.0-alpha02 على عمليات الإيداع هذه.

الميزات الجديدة

  • تمت إضافة عملية فحص RepeatOnLifecycleWrongUsage جديدة إلى lifecycle-runtime-ktx لرصد الحالات التي يتم فيها استخدام repeateOnLifecycle بشكل غير صحيح في onStart() أو onResume(). (706078، b/187887400)

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة واجهة برمجة التطبيقات LifecycleOwner.addRepeatingJob واستبدالها بواجهة Lifecycle.repeatOnLifecycle التي تتوافق مع التزامن المنظَّم ويسهل فهمها. (I4a3a8)
  • اجعل ProcessLifecycleInitializer متاحًا للجميع حتى تتمكّن androidx.startup.Initializer الأخرى من استخدامه كعنصر تابع. (I94c31)

إصلاح الأخطاء

  • تم إصلاح مشكلة في عملية فحص NullSafeMutableLiveData عند احتواء الحقل على معدِّلات. (#147، b/183696616)
  • تم إصلاح مشكلة أخرى في عملية فحص NullSafeMutableLiveData lint عند استخدام الأنواع العامة. (#161، b/184830263)

المساهمة الخارجية

  • نشكر المستخدم maxsav على المساهمة في تحسين عملية فحص NullSafeMutableLiveData. (#147، b/183696616)
  • نشكر kozaxinan على المساهمة في تحسين عملية فحص NullSafeMutableLiveData. (#161، b/184830263)

الإصدار 2.4.0-alpha01

‫24 مارس 2021

تم طرح androidx.lifecycle:lifecycle-*:2.4.0-alpha01. يحتوي الإصدار 2.4.0-alpha01 على عمليات الإيداع هذه.

التغييرات في السلوك

  • يستخدم lifecycle-process الآن androidx.startup لإعداد ProcessLifecycleOwner.

    في السابق، كان يتم ذلك من خلال androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    إذا كنت قد استخدمت tools:node="remove" في ContentProvider المستخدَمة لتهيئة دورة حياة العملية في السابق، عليك اتّباع الخطوات التالية بدلاً من ذلك.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (أو)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة واجهة برمجة التطبيقات Flow.flowWithLifecycle التي تعرض قيمًا من Flow المصدر عندما تكون دورة الحياة في حالة معيّنة على الأقل باستخدام واجهة برمجة التطبيقات Lifecycle.repeatOnLifecycle. هذه الواجهة هي بديل لواجهة LifecycleOwner.addRepeatinJob API الجديدة أيضًا. (I0f4cd)

إصلاح الأخطاء

  • بدءًا من الإصدار 2.3.1 من Lifecycle، يمكن لقاعدة التدقيق NonNullableMutableLiveData الآن التمييز بشكل صحيح بين متغيرات الحقول التي تختلف في إمكانية قبولها قيمًا فارغة. (b/169249668)

‫Lifecycle Viewmodel Compose الإصدار 1.0.0

الإصدار 1.0.0-alpha07

‫16 حزيران (يونيو) 2021

تم طرح androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07. يحتوي الإصدار 1.0.0-alpha07 على عمليات الإيداع هذه.

التغييرات غير المتوافقة في واجهة برمجة التطبيقات

  • تتضمّن السمة viewModel() الآن السمة الاختيارية ViewModelStoreOwner، ما يسهّل العمل مع مالكين آخرين غير LocalViewModelStoreOwner. على سبيل المثال، يمكنك الآن استخدام viewModel(navBackStackEntry) لاسترداد ViewModel مرتبط برسم بياني معيّن للتنقّل. (I2628d، b/188693123)

الإصدار 1.0.0-alpha06

‫2 حزيران (يونيو) 2021

تم طرح androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06. يحتوي الإصدار 1.0.0-alpha06 على عمليات الإيداع هذه.

تم تعديلها لتتوافق مع الإصدار 1.0.0-beta08 من Compose.

الإصدار 1.0.0-alpha05

‫18 أيار (مايو) 2021

تم طرح androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05. يحتوي الإصدار 1.0.0-alpha05 على عمليات الإيداع هذه.

الميزات الجديدة

  • تم تعديلها لتتوافق مع الإصدار 1.0.0-beta07 من Compose.

إصلاح الأخطاء

  • أصبحت ملفات AndroidManifest من ui-test-manifest وui-tooling-data متوافقة الآن مع Android 12 (I6f9de، b/184718994)

الإصدار 1.0.0-alpha04

‫7 نيسان (أبريل) 2021

تم طرح androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04. يحتوي الإصدار 1.0.0-alpha04 على عمليات الإيداع هذه.

التغييرات في التبعيات

  • يسمح هذا الإصدار من androidx.hilt:hilt-navigation-compose وandroidx.navigation:navigation-compose بمزامنة التبعيات على androidx.compose.compiler:compiler:1.0.0-beta04 وandroidx.compose.runtime:runtime:1.0.0-beta04. بالنسبة إلى الإصدار 1.0.0، يجب أن يتطابق المترجم ووقت التشغيل.

الإصدار 1.0.0-alpha03

‫10 مارس 2021

تم طرح androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03. يحتوي الإصدار 1.0.0-alpha03 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تعرض الدالة LocalViewModelStoreOwner.current الآن قيمة ViewModelStoreOwner قابلة للتصغير لتحديد ما إذا كان ViewModelStoreOwner متاحًا في التركيبة الحالية بشكل أفضل. ستستمر واجهات برمجة التطبيقات التي تتطلّب ViewModelStoreOwner، مثل viewModel() وNavHost، في عرض استثناء إذا لم يتم ضبط ViewModelStoreOwner. (Idf39a)

‫Lifecycle-Viewmodel-Compose الإصدار 1.0.0-alpha02

‫24 شباط (فبراير) 2021

تم طرح androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02. يحتوي الإصدار 1.0.0-alpha02 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تتضمّن LocalViewModelStoreOwner الآن وظائف provides يمكن استخدامها مع CompositionLocalProvider، ما يحلّ محل واجهة برمجة التطبيقات asProvidableCompositionLocal(). (I45d24)

‫Lifecycle-Viewmodel-Compose الإصدار 1.0.0-alpha01

10 شباط (فبراير) 2021

تم طرح androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01. يحتوي الإصدار 1.0.0-alpha01 على عمليات الدمج التالية.

الميزات الجديدة

  • تم نقل العنصر القابل للإنشاء viewModel() وLocalViewModelStoreOwner من androidx.compose.ui.viewinterop إلى هذا العنصر في حزمة androidx.lifecycle.viewmodel.compose. (I7a374)

الإصدار 2.3.1

الإصدار 2.3.1 من Lifecycle

‫24 مارس 2021

تم طرح androidx.lifecycle:lifecycle-*:2.3.1. يحتوي الإصدار 2.3.1 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • يمكن الآن لقاعدة NonNullableMutableLiveData lint التمييز بشكل صحيح بين متغيرات الحقول التي تختلف في إمكانية قبولها قيمًا فارغة. (b/169249668)

الإصدار 2.3.0

الإصدار 2.3.0

10 شباط (فبراير) 2021

تم طرح androidx.lifecycle:lifecycle-*:2.3.0. يتضمّن الإصدار 2.3.0 عمليات الدمج هذه.

التغييرات الرئيسية منذ الإصدار 2.2.0

  • إتاحة SavedStateHandle للفئات غير القابلة للتسلسل: تتيح SavedStateHandle الآن التسلسل الكسول من خلال السماح لك باستدعاء setSavedStateProvider() لمفتاح معيّن، وتوفير SavedStateProvider الذي سيتلقّى ردّ اتصال إلى saveState() عند طلب SavedStateHandle حفظ حالته. راجِع مقالة حفظ الفئات غير القابلة للتسلسل.
  • فرض السلوك المرتبط بدورة الحياة:
    • يفرض LifecycleRegistry الآن استخدام DESTROYED كحالة نهائية.
    • تتحقّق LifecycleRegistry الآن من أنّه يتم استدعاء طرقها في سلسلة التعليمات الرئيسية. كان ذلك دائمًا شرطًا لدورات حياة الأنشطة واللقطات وما إلى ذلك. وقد أدّى إضافة المراقبين من سلاسل محادثات غير رئيسية إلى حدوث أعطال يصعب رصدها أثناء وقت التشغيل. بالنسبة إلى عناصر LifecycleRegistry التي تملكها مكوّناتك الخاصة، يمكنك إيقاف عمليات التحقّق بشكل صريح باستخدام LifecycleRegistry.createUnsafe(...)، ولكن عليك بعد ذلك التأكّد من توفّر مزامنة مناسبة عند الوصول إلى LifecycleRegistry من سلاسل محادثات مختلفة.
  • أدوات مساعدة في حالة دورة الحياة والأحداث: تمت إضافة طرق مساعدة ثابتة لكل من downFrom(State) وdownTo(State) وupFrom(State) وupTo(State) إلى Lifecycle.Event لإنشاء Event بالنظر إلى State واتجاه الانتقال. تمت إضافة الطريقة getTargetState() التي توفّر State التي سينتقل إليها Lifecycle مباشرةً بعد Event.
  • withStateAtLeast: تمت إضافة واجهات برمجة التطبيقات Lifecycle.withStateAtLeast التي تنتظر حالة دورة الحياة وتنفّذ مجموعة رموز غير معلَّقة بشكل متزامن عند نقطة تغيير الحالة، ثم تستأنف مع النتيجة. تختلف واجهات برمجة التطبيقات هذه عن طرق when* الحالية لأنّها لا تسمح بتشغيل الرمز المعلق ولا تستخدم أداة إرسال مخصّصة. (aosp/1326081)
  • واجهات برمجة التطبيقات ViewTree: تتيح لك واجهتا برمجة التطبيقات الجديدتان ViewTreeLifecycleOwner.get(View) وViewTreeViewModelStoreOwner.get(View) استرداد LifecycleOwner وViewModelStoreOwner على التوالي، وذلك عند توفّر مثيل View. يجب الترقية إلى Activity 1.2.0 وFragment 1.3.0 وAppCompat 1.3.0-alpha01 أو إصدار أحدث لملء هذا الحقل بشكل صحيح. تتوفّر إضافتا Kotlin findViewTreeLifecycleOwner وfindViewTreeViewModelStoreOwner في lifecycle-runtime-ktx وlifecycle-viewmodel-ktx على التوالي.
  • LiveData.observe() إيقاف دالة الإضافة في Kotlin نهائيًا: تم الآن إيقاف دالة الإضافة LiveData.observe() في Kotlin نهائيًا، وهي ضرورية لاستخدام صيغة lambda، لأنّها لم تعُد ضرورية عند استخدام الإصدار 1.4 من Kotlin.

الإصدار 2.3.0-rc01

16 كانون الأول (ديسمبر) 2020

تم طرح androidx.lifecycle:lifecycle-*:2.3.0-rc01. يحتوي الإصدار 2.3.0-rc01 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • أصبحت طريقة keys() في SavedStateHandle متسقة الآن قبل حفظ الحالة وبعده، فهي تتضمّن الآن المفاتيح التي تم استخدامها سابقًا مع setSavedStateProvider() بالإضافة إلى المفاتيح المستخدَمة مع set() وgetLiveData(). (aosp/1517919 وb/174713653)

المساهمة الخارجية

الإصدار 2.3.0-beta01

1 تشرين الأول (أكتوبر) 2020

تم طرح androidx.lifecycle:lifecycle-*:2.3.0-beta01. يحتوي الإصدار 2.3.0-beta01 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف LiveData.observe() إضافة Kotlin اللازمة لاستخدام بنية lambda نهائيًا، لأنّها لم تعُد ضرورية عند استخدام Kotlin 1.4. (I40d3f)

إصلاح الأخطاء

التغييرات في المستندات

  • تم تعديل أداة إنشاء liveData ومستندات asLiveData() لتضمين تفاصيل حول تغيير قيم المهلة المحدّدة. (aosp/1122324)

الإصدار 2.3.0-alpha07

19 آب (أغسطس) 2020

تم طرح androidx.lifecycle:lifecycle-*:2.3.0-alpha07. يحتوي الإصدار 2.3.0-alpha07 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة تعطُّل في NullSafeMutableLiveData Lint check. (aosp/1395367)

الإصدار 2.3.0-alpha06

‫22 تموز (يوليو) 2020

تم طرح androidx.lifecycle:lifecycle-*:2.3.0-alpha06. يحتوي الإصدار 2.3.0-alpha06 على عمليات الإيداع هذه.

الميزات الجديدة

  • تمت إضافة طرق مساعدة ثابتة للسمات downFrom(State) وdownTo(State) وupFrom(State) وupTo(State) إلى Lifecycle.Event لإنشاء Event مع توفير State واتجاه الانتقال. تمت إضافة الطريقة getTargetState() التي توفّر State التي سينتقل إليها Lifecycle مباشرةً بعد Event. (I00887)
  • تمت إضافة واجهات برمجة التطبيقات Lifecycle.withStateAtLeast التي تنتظر حالة دورة الحياة وتنفّذ مجموعة من الرموز غير المعلقة بشكل متزامن عند نقطة تغيير الحالة، ثم تستأنف مع النتيجة. تختلف واجهات برمجة التطبيقات هذه عن طرق when* الحالية لأنّها لا تسمح بتشغيل الرمز المعلق ولا تستخدم أداة إرسال مخصّصة. (aosp/1326081)

التغييرات في السلوك

  • يفرض LifecycleRegistry الآن استخدام DESTROYED كحالة نهائية. (I00887)
  • تتحقّق LifecycleRegistry الآن من أنّه يتم استدعاء طرقها في سلسلة التعليمات الرئيسية. كان ذلك دائمًا شرطًا لدورات حياة الأنشطة واللقطات وما إلى ذلك. وقد أدّى إضافة المراقبين من سلاسل محادثات غير رئيسية إلى حدوث أعطال يصعب رصدها أثناء وقت التشغيل. بالنسبة إلى عناصر LifecycleRegistry التي تملكها مكوّناتك، يمكنك إيقاف عمليات التحقّق بشكل صريح باستخدام LifecycleRegistry.createUnsafe(...)، ولكن عليك بعد ذلك التأكّد من توفّر مزامنة مناسبة عند الوصول إلى عنصر LifecycleRegistry هذا من سلاسل محادثات مختلفة (Ie7280 وb/137392809).

إصلاح الأخطاء

  • تم إصلاح عطل في NullSafeMutableLiveData. (b/159987480)
  • تم إصلاح ObsoleteLintCustomCheck لعمليات فحص Lint المجمّعة مع lifecycle-livedata-core-ktxNullSafeMutableLiveData تحديدًا). (b/158699265)

الإصدار 2.3.0-alpha05

‫24 يونيو 2020

تم طرح androidx.lifecycle:lifecycle-*:2.3.0-alpha05. يحتوي الإصدار 2.3.0-alpha05 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تعمل السمة LiveData الآن على التعامل مع حالات إعادة الدخول بشكل أفضل، ما يمنع تكرار طلبات onActive() أو onInactive(). (b/157840298)
  • تم إصلاح مشكلة عدم تنفيذ عمليات التحقّق المستندة إلى أداة Lint عند استخدام الإصدار 6 أو إصدار أحدث من الإصدار التجريبي 4.1 من "استوديو Android". (aosp/1331903)

الإصدار 2.3.0-alpha04

‫10 يونيو 2020

تم طرح androidx.lifecycle:lifecycle-*:2.3.0-alpha04. يحتوي الإصدار 2.3.0-alpha04 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح عُطل في عملية فحص NonNullableMutableLiveData Lint. (b/157294666)
  • يشمل NonNullableMutableLiveData فحص Lint الآن عددًا أكبر بكثير من الحالات التي تم فيها ضبط قيمة null على MutableLiveData باستخدام مَعلمة نوع غير فارغة. (b/156002218)

الإصدار 2.3.0-alpha03

20 أيار (مايو) 2020

تم طرح androidx.lifecycle:lifecycle-*:2.3.0-alpha03. يحتوي الإصدار 2.3.0-alpha03 على عمليات الإيداع هذه.

الميزات الجديدة

  • تتيح السمة SavedStateHandle الآن التسلسل الكسول من خلال السماح لك باستدعاء setSavedStateProvider() لمفتاح معيّن، وتوفير SavedStateProvider سيحصل على ردّ الاتصال إلى saveState() عندما يُطلب من SavedStateHandle حفظ حالته. (b/155106862)
  • تتيح لك واجهة برمجة التطبيقات الجديدة ViewTreeViewModelStoreOwner.get(View) استرداد ViewModelStoreOwner الذي يحتوي على مثيل View. يجب الترقية إلى Activity 1.2.0-alpha05 وFragment 1.3.0-alpha05 وAppCompat 1.3.0-alpha01 لملء هذا الحقل بشكل صحيح. تمت إضافة إضافة findViewModelStoreOwner() Kotlin إلى lifecycle-viewmodel-ktx. (aosp/1295522)

إصلاح الأخطاء

  • تم إصلاح مشكلة كانت تمنع نشر عمليات فحص MutableLiveData Lint التي تم إصدارها في Lifecycle 2.3.0-alpha01 مع العنصر lifecycle-livedata-core-ktx. (b/155323109)

الإصدار 2.3.0-alpha02

‫29 نيسان (أبريل) 2020

تم طرح androidx.lifecycle:lifecycle-*:2.3.0-alpha02. يحتوي الإصدار 2.3.0-alpha02 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تتيح لك السمة SavedStateViewModelFactory الآن تمرير قيمة فارغة Application إلى الدالة الإنشائية من أجل توفير دعم أفضل للحالات التي لا تتوفّر فيها قيمة بسهولة ولا حاجة إلى دعم AndroidViewModel. (aosp/1285740)

إصلاح الأخطاء

  • تحسين أداء التشغيل على البارد من خلال تجنُّب تعذُّر التحقّق من الفئة على الأجهزة التي تعمل بالإصدار 28 من واجهة برمجة التطبيقات والإصدارات الأقدم (aosp/1282118)

الإصدار 2.3.0-alpha01

‫4 مارس 2020

تم طرح androidx.lifecycle:lifecycle-*:2.3.0-alpha01. يحتوي الإصدار 2.3.0-alpha01 على عمليات الإيداع هذه.

الميزات الجديدة

  • تتيح لك واجهة برمجة التطبيقات الجديدة ViewTreeLifecycleOwner.get(View) استرداد LifecycleOwner الذي يحتوي على مثيل View. يجب الترقية إلى Activity 1.2.0-alpha01 وFragment 1.3.0-alpha01 لملء هذا الحقل بشكل صحيح. تتوفّر إضافة findViewTreeLifecycleOwner Kotlin في lifecycle-runtime-ktx. (aosp/1182361 وaosp/1182956)
  • تمت إضافة عملية فحص جديدة باستخدام أداة Lint تنبّهك عند ضبط قيمة null على MutableLiveData تم تعريفها في Kotlin على أنّها غير قابلة للقيم الخالية. تتوفّر هذه السمة عند استخدام العنصرين livedata-core-ktx أو livedata-ktx. (aosp/1154723 وaosp/1159092)
  • يتوفّر عنصر lifecycle-runtime-testing جديد يوفّر TestLifecycleOwner ينفّذ LifecycleOwner ويوفّر Lifecycle قابلاً للتغيير وآمنًا للاستخدام في سلاسل التعليمات المتعددة. (aosp/1242438)

إصلاح الأخطاء

  • يحتوي العنصر lifecycle-runtime الآن على اسم حزمة فريد. (aosp/1187196)

الإصدار 2.2.0

ViewModel-Savedstate الإصدار 2.2.0

5 شباط (فبراير) 2020

تم طرح androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0. يتضمّن الإصدار 2.2.0 عمليات الدمج هذه.

تتشارك السمة Lifecycle ViewModel SavedState الآن الإصدار نفسه مع عناصر Lifecycle الأخرى. يكون سلوك 2.2.0 مطابقًا لسلوك 1.0.0.

الإصدار 2.2.0

‫22 يناير 2020

تم طرح androidx.lifecycle:lifecycle-*:2.2.0. يتضمّن الإصدار 2.2.0 عمليات الدمج هذه.

التغييرات المهمة منذ الإصدار 2.1.0

  • دمج إجراءات روتينية متزامنة مع دورة الحياة: يضيف العنصر الجديد lifecycle-runtime-ktx إمكانية الدمج بين دورة الحياة والإجراءات الروتينية المتزامنة في Kotlin. تمت أيضًا توسيع نطاق lifecycle-livedata-ktx للاستفادة من الروتينات الفرعية. لمزيد من التفاصيل، يمكنك الاطّلاع على استخدام إجراءات Kotlin الفرعية مع "مكوّنات البنية".
  • إيقاف ViewModelProviders.of() نهائيًا: تم إيقاف ViewModelProviders.of() نهائيًا. يمكنك تمرير Fragment أو FragmentActivity إلى الدالة الإنشائية الجديدة ViewModelProvider(ViewModelStoreOwner) لتحقيق الوظيفة نفسها عند استخدام Fragment 1.2.0.
  • lifecycle-extensions إيقاف العنصر نهائيًا: بعد إيقاف ViewModelProviders.of() نهائيًا على النحو المذكور أعلاه، يشير هذا الإصدار إلى إيقاف آخر واجهة برمجة تطبيقات في lifecycle-extensions نهائيًا، ويجب الآن اعتبار هذا العنصر متوقفًا نهائيًا بالكامل. ننصحك بشدة بالاعتماد على عناصر Lifecycle الخاصة التي تحتاج إليها (مثل lifecycle-service إذا كنت تستخدم LifecycleService وlifecycle-process إذا كنت تستخدم ProcessLifecycleOwner) بدلاً من lifecycle-extensions، لأنّه لن يتم إصدار 2.3.0 في المستقبل من lifecycle-extensions.
  • معالج التعليقات التوضيحية التدريجي في Gradle: يكون معالج التعليقات التوضيحية في Lifecycle تدريجيًا بشكل تلقائي. إذا كان تطبيقك مكتوبًا بلغة البرمجة Java 8، يمكنك استخدام DefautLifecycleObserver بدلاً من ذلك، وإذا كان مكتوبًا بلغة البرمجة Java 7، يمكنك استخدام LifecycleEventObserver.

الإصدار 2.2.0-rc03

4 كانون الأول (ديسمبر) 2019

تم طرح androidx.lifecycle:lifecycle-*:2.2.0-rc03. يحتوي الإصدار 2.2.0-rc03 على عمليات الدمج هذه.

إصلاح الأخطاء

  • تم إصلاح خطأ يحدث عند تخزين ViewModel وهمي في ViewModelStore والاستعلام عنه لاحقًا باستخدام الإعدادات الأصلية التلقائية.
  • إصلاح استخدام Dispatchers.Main.immediate في launchWhenCreated والطُرق المشابهة ليتم استدعاؤها بشكل متزامن أثناء حدث مراحل النشاط المقابل (aosp/1156203)

المساهمات الخارجية

  • نشكر "أندرس يارلبرغ" على المساهمة في إصلاح هذه المشكلة. (aosp/1156203)
  • نشكر "فسيفولود تولستوبياتوف" من Jetbrains على مراجعة عملية تنفيذ التنفيذ المضمّن.

التغييرات في التبعيات

  • تعتمد Lifecycle Extensions الآن على Fragment 1.2.0-rc03.

الإصدار 2.2.0-rc02

‫7 نوفمبر 2019

تم طرح androidx.lifecycle:lifecycle-*:2.2.0-rc02. يحتوي الإصدار 2.2.0-rc02 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح خطأ في إعدادات Proguard للمكتبة كان يؤثر في الأجهزة التي تعمل بالإصدار 28 من واجهة برمجة التطبيقات أو الإصدارات الأحدث إذا كان الإصدار المستهدف من واجهة برمجة التطبيقات أقل من 29. (b/142778206)

الإصدار 2.2.0-rc01

‫23 تشرين الأول (أكتوبر) 2019

تم طرح androidx.lifecycle:lifecycle-*:2.2.0-rc01. يحتوي الإصدار 2.2.0-rc01 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة كانت تؤدي إلى تنفيذ launchWhenCreated والطُرق ذات الصلة بعد إطار واحد من طريقة مراحل النشاط المرتبطة بسبب استخدامها Dispatchers.Main بدلاً من Dispatchers.Main.immediate. (aosp/1145596)

المساهمات الخارجية

  • نشكر "نيكلاس أنسمان" على المساهمة في إصلاح هذه المشكلة. (aosp/1145596)

الإصدار 2.2.0-beta01

‫9 أكتوبر 2019

تم طرح androidx.lifecycle:lifecycle-*:2.2.0-beta01. يحتوي الإصدار 2.2.0-beta01 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة تراجع تم تقديمها في Lifecycle 2.2.0-alpha05 في ترتيب ProcessLifecycleOwner وانتقال LifecycleOwner النشاط إلى الحالة "بدء" و"استئناف" على أجهزة Android 10. (aosp/1128132)
  • تم إصلاح مشكلة تراجع تم تقديمها في Lifecycle 2.2.0-alpha05 كانت تؤدي إلى حدوث NullPointerException عند استخدام الإصدار 2.0.0 أو 2.1.0 من lifecycle-process. (b/141536990)

الإصدار 2.2.0-alpha05

‫18 أيلول (سبتمبر) 2019

تم طرح androidx.lifecycle:lifecycle-*:2.2.0-alpha05. يحتوي الإصدار 2.2.0-alpha05 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة تزامن في أداة إنشاء LiveData الروتينية الفرعية. b/140249349

الإصدار 2.2.0-alpha04

‫5 أيلول (سبتمبر) 2019

تم طرح androidx.lifecycle:lifecycle-*:2.2.0-alpha04. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.

الميزات الجديدة

  • تستخدم الآن lifecycleScope وwhenCreated وwhenStarted وwhenResumed وviewModelScope والتنفيذ الأساسي لـ liveData Dispatchers.Main.immediate بدلاً من Dispatchers.Main. (b/139740492)

المساهمات الخارجية

  • نشكر "نيكلاس أنسمان" على المساهمة في نقل البيانات إلى Dispatchers.Main.immediate. (aosp/1106073)

الإصدار 2.2.0-alpha03

‫7 آب (أغسطس) 2019

تم طرح androidx.lifecycle:lifecycle-*:2.2.0-alpha03. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.

الميزات الجديدة

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف ViewModelProviders.of() نهائيًا. يمكنك تمرير Fragment أو FragmentActivity إلى الدالة الإنشائية الجديدة ViewModelProvider(ViewModelStoreOwner) لتحقيق الوظيفة نفسها. (aosp/1009889)

الإصدار 2.2.0-alpha02

2 تموز (يوليو) 2019

تم طرح androidx.lifecycle:*:2.2.0-alpha02. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.

تغييرات واجهة برمجة التطبيقات

  • تم استبدال LiveDataScope.initialValue بـ LiveDataScope.latestValue التي ستتتبّع القيمة الحالية التي تم إصدارها من الحظر liveData.
  • تمت إضافة تحميل زائد جديد إلى أداة إنشاء liveData يتلقّى المَعلمة timeout كنوع Duration

الإصدار 2.2.0-alpha01

7 أيار (مايو) 2019

تم طرح androidx.lifecycle:*:2.2.0-alpha01. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.

الميزات الجديدة

  • يضيف هذا الإصدار ميزات جديدة تتيح استخدام إجراءات Kotlin الفرعية في Lifecycle وLiveData. يمكنك الاطّلاع على مستندات تفصيلية حولها هنا.

الإصدار 1.0.0 من ViewModel-SavedState

الإصدار 1.0.0

‫22 يناير 2020

تم طرح androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0. يتضمّن الإصدار 1.0.0 عمليات الدمج التالية.

الميزات المهمة في الإصدار 1.0.0

  • تمت إضافة فئة SavedStateHandle جديدة. ويتيح ذلك لصفوف ViewModel الوصول إلى الحالة المحفوظة والمساهمة فيها. يمكن تلقّي هذا العنصر في الدالة الإنشائية للفئة ViewModel، وستعمل الدوال الإنشائية التلقائية التي توفّرها الفئتان Fragments وAppCompatActivity على إدخال SavedStateHandle تلقائيًا.
  • تمت إضافة AbstractSavedStateViewModelFactory. يتيح لك إنشاء مصانع مخصّصة لـ ViewModel ومنحها إذن الوصول إلى SavedStateHandle.

‫ViewModel-Savedstate الإصدار 1.0.0-rc03

4 كانون الأول (ديسمبر) 2019

تم طرح androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03. يحتوي الإصدار 1.0.0-rc03 على عمليات الإيداع هذه.

التغييرات في التبعيات

  • تعتمد الآن السمة Lifecycle ViewModel SavedState على السمة Lifecycle 2.2.0-rc03.

‫Viewmodel-Savedstate الإصدار 1.0.0-rc02

‫7 نوفمبر 2019

تم طرح androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02. يحتوي الإصدار 1.0.0-rc02 على عمليات الإيداع هذه.

التغييرات في التبعيات

  • يعتمد الآن على دورة الحياة 2.2.0-rc02.

ViewModel-SavedState الإصدار 1.0.0-rc01

‫23 تشرين الأول (أكتوبر) 2019

تم إصدار androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 بدون أي تغييرات عن 1.0.0-beta01. يتضمّن الإصدار 1.0.0-rc01 عمليات الإيداع هذه.

ViewModel-Savedstate Version 1.0.0-beta01

‫9 أكتوبر 2019

تم طرح androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01. يحتوي الإصدار 1.0.0-beta01 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة كانت تؤدي إلى ظهور IllegalStateException عند الوصول إلى SavedState ViewModel لأول مرة في Activity.onActivityResult(). (b/139093676)
  • تم إصلاح IllegalStateException عند استخدام AbstractSavedStateViewModelFactory. (b/141225984)

ViewModel-SavedState الإصدار 1.0.0-alpha05

‫18 أيلول (سبتمبر) 2019

تم طرح androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05. يتضمّن الإصدار 1.0.0-alpha05 عمليات الدمج التالية.

تغييرات واجهة برمجة التطبيقات

  • لم يعُد SavedStateViewModelFactory يوسّع AbstractSavedStateViewModelFactory، ولا يتم إنشاء SavedStateHandle إلا لـ ViewModels التي طلبت الحصول عليه (aosp/1113593)

ViewModel-SavedState الإصدار 1.0.0-alpha03

‫7 آب (أغسطس) 2019

تم طرح androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.

التغييرات التي قد تؤدي إلى أعطال

  • لم يعُد lifecycle-viewmodel-savedstate يعتمد على fragment، وتمت إزالة الدالتَين الإنشائيتَين SavedStateViewModelFactory(Fragment) وSavedStateViewModelFactory(FragmentActivity) المرتبطتَين به. بدلاً من ذلك، أصبحت SavedStateViewModelFactory هي المصنع التلقائي الآن لكل من Activity 1.1.0-alpha02 وFragment 1.2.0-alpha02 وNavigation 2.2.0-alpha01. (b/135716331)

‫ViewModel-SavedState الإصدار 1.0.0-alpha02

2 تموز (يوليو) 2019

تم طرح androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.

الميزات الجديدة

  • تمت إضافة عملية تحميل زائدة SavedStateHandle.getLiveData() تقبل قيمة تلقائية.

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة تسمية SavedStateVMFactory إلى SavedStateViewModelFactory.
  • تمت إعادة تسمية AbstractSavedStateVMFactory إلى AbstractSavedStateViewModelFactory.

ViewModel-Savedstate Version 1.0.0-alpha01

‫13 مارس 2019

تم طرح androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01. يمكن الاطّلاع على سجلّ التعديلات الكامل لهذا الإصدار الأوّلي هنا.

الميزات الجديدة

  • يمكن الآن لـ ViewModels المساهمة في savedstate. لإجراء ذلك، عليك استخدام مصنع SavedStateVMFactory الخاص بـ ViewModel الذي تم تقديمه حديثًا، ويجب أن يحتوي ViewModel على دالة إنشاء تتلقّى الكائن SavedStateHandle كمعلَمة.

الإصدار 2.1.0

التغييرات المهمة منذ الإصدار 2.0.0

  • تمت إضافة LifecycleEventObserver للحالات التي يكون فيها بث أحداث مراحل النشاط مطلوبًا. وهي واجهة برمجة تطبيقات عامة بدلاً من فئة GenericLifecycleObserver مخفية.
  • تمت إضافة إضافات ktx للطريقتَين LiveData.observe وTransformations.*.
  • تمت إضافة Transformations.distinctUntilChanged، ما يؤدي إلى إنشاء عنصر LiveData جديد لا يصدر قيمة إلى أن يتم تغيير قيمة المصدر LiveData.
  • تمت إضافة إمكانية استخدام الروتينات المشتركة في ViewModels من خلال إضافة السمة الإضافية ViewModel.viewModelScope.

الإصدار 2.1.0

‫5 أيلول (سبتمبر) 2019

تم طرح androidx.lifecycle:lifecycle-*:2.1.0. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.

الإصدار 2.1.0-rc01

2 تموز (يوليو) 2019

تم إصدار androidx.lifecycle:*:2.1.0-rc01 بدون أي تغييرات عن androidx.lifecycle:*:2.1.0-beta01. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.

الإصدار 2.1.0-beta01

7 أيار (مايو) 2019

تم طرح androidx.lifecycle:*:2.1.0-beta01. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.

الميزات الجديدة

  • تمت ترقية دورات الحياة إلى الإصدار التجريبي: تم تثبيت واجهة برمجة التطبيقات التي تم طرحها في الإصدارات الأولية السابقة، مثل liveData دوال الإضافة للتحويلات والملاحظات، ViewModel وعملية التهيئة باستخدام تفويض الخصائص وغيرها، ولن يتم تغييرها.

الإصدار 2.1.0-alpha04

‫3 أبريل 2019

تم طرح androidx.lifecycle:*:2.1.0-alpha04. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.

تغييرات واجهة برمجة التطبيقات

  • تغيير غير متوافق: تم تغيير واجهة برمجة التطبيقات الأساسية التي تستند إليها by viewModels() وby activityViewModels() لتتيح استخدام ViewModelStore مباشرةً، بدلاً من ViewModelStoreOwner فقط. (aosp/932932)

الإصدار 2.1.0-alpha03

‫13 مارس 2019

تم طرح androidx.lifecycle:*:2.1.0-alpha03. يمكنك الاطّلاع على القائمة الكاملة لعمليات الإضافة إلى المستودع المضمّنة في هذا الإصدار هنا.

تغييرات واجهة برمجة التطبيقات

  • تمّت إزالة بطاقة "ViewModelProvider.KeyedFactory". لم تتوافق الواجهة الثانية بالإضافة إلى ViewModelProvider.Factory بشكل جيد مع الميزات الجديدة، مثل تفويض المواقع في Kotlin by viewmodels {}. (aosp/914133)

الإصدار 2.1.0-alpha02

‫30 يناير 2019

تم طرح androidx.lifecycle 2.1.0-alpha02.

تغييرات واجهة برمجة التطبيقات

  • يتضمّن LifecycleRegistry الآن طريقة setCurrentState() تحلّ محلّ طريقة setState() التي تم إيقافها نهائيًا. (aosp/880715)

إصلاح الأخطاء

  • تم إصلاح مشكلة كانت تؤدي إلى تعطُّل مثيلات ViewModel الوهمية عند محو ViewModelStore الحاوية. b/122273087

الإصدار 2.1.0-alpha01

‫17 كانون الأول (ديسمبر) 2018

تم طرح androidx.lifecycle 2.1.0-alpha01.

الميزات الجديدة

  • تمت إضافة LifecycleEventObserver للحالات التي يكون فيها بث أحداث مراحل النشاط مطلوبًا. وهي واجهة برمجة تطبيقات عامة بدلاً من فئة GenericLifecycleObserver مخفية.
  • تمت إضافة إضافات ktx للطريقتَين LiveData.observe وTransformations.*.
  • تمت إضافة الطريقة Transformations.distinctUntilChanged. تنشئ هذه الطريقة كائن LiveData جديدًا لا يصدر قيمة إلى أن يتم تغيير قيمة LiveData المصدر.
  • إتاحة استخدام الروتينات المشتركة في ViewModels: تمت إضافة السمة الإضافية ViewModel.viewModelScope.
  • تمت إضافة ViewModelProvider.KeyedFactory، وهو مصنع لـ ViewModels يتلقّى key وClass في طريقة create.

الإصدار 2.0.0

الإصدار 2.0.0

‫21 سبتمبر 2018

تم إصدار Lifecycle 2.0.0 مع إصلاح خطأ واحد من 2.0.0-rc01 في ViewModel.

إصلاح الأخطاء

  • تم إصلاح قاعدة ProGuard في ViewModel التي أزالت بشكل غير صحيح الدوال الإنشائية b/112230489

الإصدار 2.0.0-beta01

‫2 يوليو 2018

إصلاح الأخطاء

  • تم إصلاح قاعدة ProGuard الخاصة بـ LifecycleObserver للإبقاء على عمليات التنفيذ فقط، وليس الواجهات الفرعية b/71389427
  • تم إصلاح قواعد ProGuard الخاصة بـ ViewModel للسماح بالتشويش والتصغير

الإصدارات السابقة لإصدار AndroidX

بالنسبة إلى إصدارات Lifecycle السابقة لإصدار AndroidX التي تلي ذلك، أدرِج التبعيات التالية:

dependencies {
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    // alternatively - just ViewModel
    implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
    // alternatively - just LiveData
    implementation "android.arch.lifecycle:livedata:$lifecycle_version"
    // alternatively - Lifecycles only (no ViewModel or LiveData).
    //     Support library depends on this lightweight import
    implementation "android.arch.lifecycle:runtime:$lifecycle_version"

    annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
    // alternately - if using Java8, use the following instead of compiler
    implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

    // optional - ReactiveStreams support for LiveData
    implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"

    // optional - Test helpers for LiveData
    testImplementation "android.arch.core:core-testing:$lifecycle_version"
}

الإصدار 1.1.1

‫21 مارس 2018

هناك تغيير بسيط واحد: تم نقل android.arch.core.util.Function من arch:runtime إلى arch:common. يتيح ذلك استخدامها بدون الاعتماد على وقت التشغيل، مثلاً في paging:common أدناه.

lifecycle:common هي إحدى التبعيات في lifecycle:runtime، لذا لا يؤثّر هذا التغيير في lifecycle:runtime مباشرةً، بل يؤثّر فقط في الوحدات التي تعتمد مباشرةً على lifecycle:common، مثل Paging.

الإصدار 1.1.0

‫22 يناير 2018

التغييرات في التغليف

تتوفّر الآن تبعيات جديدة أصغر حجمًا بكثير:

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

تغييرات واجهة برمجة التطبيقات

  • تم الآن إزالة السمتَين LifecycleActivity وLifecycleFragment اللتَين تم إيقافهما نهائيًا، لذا يُرجى استخدام FragmentActivity أو AppCompatActivity أو Fragment.
  • تمت إضافة تعليقات توضيحية @NonNull إلى ViewModelProviders وViewModelStores
  • تم إيقاف الدالة الإنشائية ViewModelProviders نهائيًا، يُرجى استخدام طرقها الثابتة مباشرةً
  • تم إيقاف ViewModelProviders.DefaultFactory نهائيًا، يُرجى استخدام ViewModelProvider.AndroidViewModelFactory
  • تمت إضافة الطريقة الثابتة ViewModelProvider.AndroidViewModelFactory.getInstance(Application) لاسترداد Factory ثابت مناسب لإنشاء مثيلات ViewModel وAndroidViewModel.