مراحل النشاط

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

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

العناصر الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار التجريبي الأول
lifecycle-* 2.8.7 - - 2.9.0-alpha08
lifecycle-viewmodel-compose 2.8.7 - - 2.9.0-alpha08
تاريخ آخر تعديل على هذه المكتبة: 11 كانون الأول (ديسمبر) 2024

الإعلان عن التبعيات

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

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

Kotlin

رائع

    dependencies {
        def lifecycle_version = "2.8.7"
        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"

        // 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.8.7"
        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")

        // 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.8.7"
        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.8.7"
        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. يُرجى إعلامنا إذا واجهت مشاكل جديدة أو كان لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مكتبة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية عن طريق النقر على زر النجمة.

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

اطّلِع على مستندات أداة تتبُّع المشاكل لمزيد من المعلومات.

الإصدار 2.9

الإصدار 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).

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

الإصدار 2.9.0-alpha07

13 تشرين الثاني (نوفمبر) 2024

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

توافق لغة Kotlin مع أنظمة التشغيل المتعددة

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

إتاحة ميزة التسلسل في KotlinX

  • بفضل ميزة KotlinX Serialization المضافة في SavedState 1.3.0-alpha05، طرحنا saved، وهو عنصر تمثيل خاصية كسول، لتسهيل تخزين فئات @Serializable في SavedStateHandle واستعادة هذه الفئات تلقائيًا عند إنهاء العملية وإعادة إنشائها. يُرجى العلم أنّ الوكيل saved غير نشِط ولن يستدعي دالة init lambda أو يحفظ أي شيء في 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)
  • من Lifecycle 2.8.5: يتوافق الآن المفوّض لإضافة SavedStateHandle.saveable مع القيم التي يمكن أن تكون فارغة. نشكر Roman Kalukiewicz على مساهمته. (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 multiplatform target (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 مع AGP 7.3 أو إصدار أحدث (مثل R8 الإصدار 3.3) ولجميع الإصدارات عند استخدام AGP 8.1 أو إصدار أحدث (مثل D8 الإصدار 8.1). ننصح العملاء الذين لا يستخدمون 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 على عمليات الربط هذه.

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

  • أدّى خطأ Lint في NullSafeMutableLiveData إلى تحسين التوافق مع عمليات البث الذكية، ما تجنّب حدوث حالات موجبة خاطئة. (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() الآن بشكل صحيح الحالات التي يتم فيها إكمال العملية التي تم إرجاعها على الفور بعد تلقّي قيمة تم ضبطها مسبقًا على 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 مع Compose 1.6.0 والإصدارات الأقدم عند استخدام ميزة تصغير الرموز البرمجية. (aosp/3133056، b/346808608)

الإصدار 2.8.2

12 يونيو 2024

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

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

  • تم إصلاح CompositionLocal LocalLifecycleOwner not present أخطاء عند استخدام Lifecycle 2.8.X مع Compose 1.6.X أو إصدار سابق. يمكنك الآن استخدام Lifecycle 2.8.2 مع أي إصدار من 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 مع الأنظمة الأساسية المتعددة

يتم الآن شحن واجهات برمجة التطبيقات الأساسية لدورة الحياة في 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 مع الأنظمة الأساسية المتعددة

يتم الآن شحن العنصر 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 بدون مصنع مخصّص على منصات غير حزمة Java Virtual Machine إلى حدوث UnsupportedOperationException. على منصات JVM، يتم الحفاظ على التوافق باستخدام أداة إنشاء ViewModel بدون وسيطات في حال عدم توفير مصنع مخصّص.
  • سيتم استخدام EmptyCoroutineContext بدلاً من Dispatchers.Main في المنصات التي لا يتوفّر فيها Dispatchers.Main (مثلviewModelScope ‫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 بشكلٍ صحيح. ويتم الآن تجميعها في حزمة AAR بتنسيق lifecycle-runtime. (aosp/3038274، b/322382422)
  • تم إصلاح تغيير غير مقصود في الترتيب في كيفية محو نُسخ AutoCloseable المرتبطة بـ ViewModel، وتم استعادة الترتيب السابق addCloseable(String, AutoCloseable) ثم addClosable(AutoCloseable) ثم onCleared(). (aosp/3041632)
  • تحسين السلوك التلقائي لإنشاء viewModelScope في بيئات سطح المكتب الأصلية وJVM (aosp/3039221)

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

  • نشكر "فيكتور كروپ" على تحسين عملية التحقّق من سلسلة المحادثات الرئيسية على 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 مع الأنظمة الأساسية المتعددة. لاستيعاب هذا التغيير، تقبل طريقة 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 مع أنظمة التشغيل المتعددة

يتم الآن شحن العنصر 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 بدون مصنع مخصّص على منصات غير حزمة Java Virtual Machine إلى حدوث UnsupportedOperationException. على منصات JVM، يتم الحفاظ على التوافق باستخدام أداة إنشاء ViewModel بدون وسيطات في حال عدم توفير مصنع مخصّص.
  • سيتم استخدام EmptyCoroutineContext بدلاً من Dispatchers.Main في المنصات التي لا يتوفّر فيها Dispatchers.Main (مثلviewModelScope ‫Linux).

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

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

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

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

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

  • تم نقل LocalLifecycleOwner من واجهة مستخدم Compose إلى lifecycle-runtime-compose حتى يمكن استخدام واجهات برمجة التطبيقات المساعِدة المستندة إلى Compose خارج واجهة مستخدم Compose. نشكر "جاك وارتون" على مساهمته. (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

  • تم الآن كتابة 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 مع أنظمة التشغيل المتعددة

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

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

  • أصبح الآن استدعاء LifecycleStartEffect وLifecycleResumeEffect بدون مفتاح خطأ، وذلك باتّباع الاصطلاح نفسه المستخدَم في واجهة برمجة التطبيقات DisposableEffect التي تعكسها واجهات برمجة التطبيقات هذه. (Ib0e0c، b/323518079)
  • يستخدم ViewModel الآن AutoCloseable بدلاً من Closeable. هذا تغيير متوافق مع الإصدارات القديمة. (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.
  • يعالج هذا الإصدار مشكلة عدم استعادة SavedStateHandle بشكلٍ صحيح لفئات Parcelable المخصّصة بعد إنهاء العملية وإعادة إنشائها. بسبب فقدان إطار عمل Android لمعلومات النوع، تتطلّب صفائف Parcelables المخصّصة عملًا إضافيًا (إنشاء صفيف مكتوب يدويًا من النوع الصحيح)، وتشير الآن المستندات حول get وgetLiveData وgetStateFlow تحديدًا إلى هذا القيد.
  • تمّت إزالة قواعد الاحتفاظ بتطبيق Proguard المرتبطة بـ LifecycleObserver. وهذا يعني أنّ الرمز المحمي الذي يريد استخدام واجهات برمجة التطبيقات من خلال ميزة "العرض المرجعي" (مثل استخدام التعليق التوضيحي @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 مباشرةً كعنصر Compose State. هذا الإجراء مكافئ (وبديل أقصر) lifecycle.currentStateFlow.collectAsState().

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

الإصدار 2.7.0-rc02

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

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

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

  • تم إصلاح مشكلة عدم استعادة SavedStateHandle بشكل صحيح لفئات Parcelable المخصّصة بعد إنهاء العملية وإعادة إنشائها. بسبب فقدان إطار عمل 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 في ميزة "إنشاء مسار التنقّل". (aosp/2729289)

الإصدار 2.7.0-alpha01

26 تموز (يوليو) 2023

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

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

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

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

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

الإصدار 2.6

الإصدار 2.6.2

6 أيلول (سبتمبر) 2023

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

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

  • تم إصلاح مشكلة عدم استعادة SavedStateHandle بشكل صحيح بعد انتهاء العملية إذا تم استعادة الحالة، وتم استدعاء save() بدون حفظ الحالة في العنصر الرئيسي SavedStateRegistry، ثم تم استعادة الحالة مرة أخرى. يُصلح ذلك التفاعل بين rememberSaveable وNavHost في ميزة "إنشاء مسار التنقّل". (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() التي تجمع البيانات من عمليات التدفق وتعرض أحدث قيمتها على أنّها حالة الإنشاء بطريقة تراعي مراحل النشاط.
  • تم إيقاف طرق Lifecycle.launchWhenX وLifecycle.whenX نهائيًا لأنّ استخدام أداة توزيع مؤقتة يمكن أن يؤدي إلى إهدار الموارد في بعض الحالات. ننصح باستخدام Lifecycle.repeatOnLifecycle. لمزيد من المعلومات عن تعليق العمل لمرة واحدة، يُرجى الاطّلاع على هذا التفسير لمعرفة سبب خطورة ذلك بطبيعته.
  • تحويل إلى Kotlin: تم تحويل عدد كبير من فئات Lifecycle إلى Kotlin. تظل جميع الفئات المحوَّلة متوافقة مع الإصدارات السابقة. تحتوي الفئات التالية على تغييرات غير متوافقة مع المصدر للفئات المكتوبة بلغة Kotlin: ViewTreeLifecycleOwner وLiveDataReactiveStreams وHasDefaultViewModelProviderFactory وViewTreeViewModelStoreOwner وTransformations وViewModelStoreOwner وLifecycleOwner.

يقدّم الجدول أدناه الإحالات الناجحة للمصدر للإصدار الجديد من رحلة المستخدِم.

Lifecycle 2.5 Lifecycle 2.5 (KTX) Lifecycle 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

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

  • تم الآن كتابة 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

  • تم الآن كتابة 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 على هذه المراجعات.

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

  • تم إصلاح مشكلة عدم عمل القيود بين وحدات رحلة المستخدِم المختلفة على النحو المطلوب. (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)
  • ستحافظ الآن دالة asLiveData في FlowLiveData على القيمة الأولية لعنصر 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 تجمع البيانات من عمليات التدفق وتعرض أحدث قيمتها على أنّها حالة الإنشاء بطريقة تراعي مراحل النشاط. يتم جمع التدفق وضبط الانبعاثات الجديدة على قيمة الحالة عندما تكون دورة الحياة في 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() API تُعرِض دالة StateFlow في Kotlin لرصد تغييرات القيم كبديل لاستخدام LiveData.

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

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

  • تم إصلاح مشكلة التوافق مع Lifecycle 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() API تعرض 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 بدون requirin إنشاء 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)
  • تم الآن إضافة تعليق توضيحي إلى الإضافات LiveData -ktx باستخدام @CheckResult لفرض استخدام النتيجة عند استدعاء هذه الدوالّ. (Ia0f05، b/207325134)

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

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

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

  • من Lifecycle 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 على هذه المراجعات.

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

  • تم نقلها من مرحلة نشاط 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 تسمح باستخدام متغير عام قابل للحذف.
  • تمت إضافة واجهة برمجة تطبيقات جديدة لوظائف coroutine إلى 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 تسمح باستخدام nullable بشكل عام. (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 تُصدِر قيمًا من مسار الإدخال عندما تكون رحلة المستخدِم في حالة معيّنة على الأقل باستخدام واجهة برمجة التطبيقات Lifecycle.repeatOnLifecycle. وهذا بديل لواجهة برمجة التطبيقات LifecycleOwner.addRepeatinJob API الجديدة أيضًا. (I0f4cd)

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

  • اعتبارًا من Lifecycle 2.3.1: يمكن الآن لقاعدة فحص الأخطاء NonNullableMutableLiveDataالتمييز بشكلٍ سليم بين متغيّرات الحقول التي تتضمّن قيمًا صفرية مختلفة. (b/169249668)

الإصدار 1.0.0 من Lifecycle Viewmodel Compose

الإصدار 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 من تطبيق "الإنشاء".

الإصدار 1.0.0-alpha05

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

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

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

  • تم تعديلها لتصبح متوافقة مع الإصدار 1.0.0-beta07 من تطبيق "الإنشاء".

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

  • أصبحت ملفات 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)

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

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

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

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

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

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

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 من مراحل النشاط

24 آذار (مارس) 2021

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

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

  • يمكن الآن لقاعدة التدقيق NonNullableMutableLiveData التمييز بشكل صحيح بين متغيّرات الحقول التي تتضمّن قيمًا صفرية مختلفة. (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 الذي ستنتقل إليه رحلة المستخدِم مباشرةً بعد Event.
  • withStateAtLeast: تمت إضافة Lifecycle.withStateAtLeast واجهة برمجة تطبيقات تنتظر حالة دورة حياة وتعمل بشكل متزامن على تنفيذ مجموعة رموز لا تؤدي إلى تعليق الأداء عند نقطة تغيير الحالة، ثم تستأنف العمل مع النتيجة. تختلف واجهات برمجة التطبيقات هذه عن طرق when* الحالية لأنّها لا تسمح بتشغيل رمز تعليق ولا تستعين بموزّع مخصّص. (aosp/1326081)
  • واجهات برمجة تطبيقات ViewTree: تتيح لك واجهات برمجة تطبيقات ViewTreeLifecycleOwner.get(View) وViewTreeViewModelStoreOwner.get(View) الجديدة استرداد LifecycleOwner وViewModelStoreOwner اللذين يحتويان على View، على التوالي، وذلك عند توفّر مثيل 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 نهائيًا، لأنّها غير ضرورية عند استخدام الإصدار 1.4 من Kotlin، وهي ضرورية لاستخدام بنية دالة lambda. (I40d3f)

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

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

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

الإصدار 2.3.0-alpha07

19 آب (أغسطس) 2020

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

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

  • تم إصلاح مشكلة تعطُّل في عملية التحقّق من الأخطاء في NullSafeMutableLiveData. (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 الذي ستنتقل إليه رحلة المستخدِم مباشرةً بعد 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-ktx (وتحديدًا NullSafeMutableLiveData). (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 عند استخدام الإصدار 4.1 Canary 6 من Android Studio أو إصدار أحدث. (aosp/1331903)

الإصدار 2.3.0-alpha04

10 حزيران (يونيو) 2020

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

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

  • تم إصلاح عطل في عملية التحقّق من الأخطاء في NonNullableMutableLiveData. (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 التي تم إصدارها في مرحلة التطوير 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 فارغ إلى عنصر الإنشاء الخاص به لتقديم دعم أفضل للحالات التي لا يتوفّر فيها 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. يجب الترقية إلى النشاط 1.2.0-alpha01 والقطعة 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

الإصدار 2.2.0 من ViewModel-Savedstate

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

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

يشترك الإصدار الحالي من ViewModel SavedState في Lifecycle مع الإصدار نفسه من عناصر 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: يضيف العنصر lifecycle-runtime-ktx الجديد عملية دمج بين Lifecycle ووظائف التشغيل المتعدّد في Kotlin. تم أيضًا توسيع نطاق lifecycle-livedata-ktx للاستفادة من وظائف التشغيل المتعدّد. اطّلِع على استخدام مهام Kotlin المتعدّدة المهام مع مكونات البنية للحصول على مزيد من التفاصيل.
  • إيقاف ViewModelProviders.of() نهائيًا: تم إيقاف ViewModelProviders.of() نهائيًا. يمكنك تمرير Fragment أو FragmentActivity إلى عنصر الإنشاء ViewModelProvider(ViewModelStoreOwner) الجديد لتحقيق الوظيفة نفسها عند استخدام العنصر 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)

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

  • نشكر Anders Järleberg على تقديم الإصلاح. (aosp/1156203)
  • نشكر Vsevolod Tolstopyatov من Jetbrains على مراجعة تنفيذ التنفيذ المضمّن.

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

  • تعتمد الآن "إضافات دورة الحياة" على "الوحدة 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)
  • تم إصلاح مشكلة تراجع في الأداء حدثت في مرحلة 2.2.0-alpha05 من NullPointerException، ما كان سيؤدي إلى حدوث 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، وسيتم تلقائيًا إدراج SavedStateHandle من خلال مصانع يوفّرها Fragments وAppCompatActivity بشكلٍ تلقائي.
  • تمت إضافة AbstractSavedStateViewModelFactory. يتيح لك هذا الإجراء إنشاء مصانع مخصّصة لتطبيقك ViewModel ومنح هذا التطبيق إذن الوصول إلى SavedStateHandle.

الإصدار 1.0.0-rc03 من ViewModel-Savedstate

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.

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

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

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

الإصدار 1.0.0-beta01 من ViewModel-Savedstate

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

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

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

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

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

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

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

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

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

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

7 آب (أغسطس) 2019

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

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

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

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

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

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

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

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

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

الإصدار 1.0.0-alpha01 من ViewModel-Savedstate

13 آذار (مارس) 2019

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

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

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

الإصدار 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 constructor نهائيًا، يُرجى استخدام طرقه الثابتة مباشرةً.
  • تم إيقاف ViewModelProviders.DefaultFactory نهائيًا، يُرجى استخدام ViewModelProvider.AndroidViewModelFactory
  • تمت إضافة الطريقة الثابتة ViewModelProvider.AndroidViewModelFactory.getInstance(Application) لاسترداد Factory ثابت مناسب لإنشاء نُسخ من ViewModel وAndroidViewModel.