مراحل النشاط

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

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

العناصر الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأوّلي
lifecycle-* 2.9.3 - - 2.10.0-alpha03
lifecycle-viewmodel-navigation3 - - - 2.10.0-alpha03
تم إجراء آخر تعديل على هذه المكتبة في: 27 أغسطس 2025

تحديد الاعتماديات

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

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

Kotlin

Groovy

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

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

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

Java

Groovy

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

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

الملاحظات

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

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

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

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

الإصدار 1.0.0-alpha04

‫30 يوليو 2025

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

تغييرات الاعتماديات

الإصدار 1.0.0-alpha03

‫2 يوليو 2025

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

تغييرات الاعتماديات

الإصدار 1.0.0-alpha02

‫18 يونيو 2025

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

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

الإصدار 1.0.0-alpha01

‫23 مايو 2025

تم طرح androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01. يتضمّن الإصدار 1.0.0-alpha01 هذه التعديلات.

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

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

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

الإصدار 2.10

الإصدار 2.10.0-alpha03

‫27 أغسطس 2025

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

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

  • تحديث Compose إلى الإصدار 1.9.0 (I2b9de)

الإصدار 2.10.0-alpha02

‫13 أغسطس 2025

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

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

  • يمكن الآن للعنصر القابل للإنشاء LifecycleOwner إنشاء دورة حياة جذر مستقلة. من خلال ضبط parent = null (بشكلٍ صريح)، تعمل دورة الحياة الجديدة بشكلٍ مستقل عن أي مضيف (مثل Activity أو Fragment أو NavBackStackEntry). تبدأ دورة الحياة بمجرد أن يدخل العنصر القابل للإنشاء إلى التركيب، ويتم إتلافه تلقائيًا عند خروجه. (I8dfbe، b/433659048)

    @Composable
    fun IndependentComponent() {
        // Create a standalone lifecycle, not tied to the parent Activity/Fragment.
        LifecycleOwner(parent = null) {
            val rootLifecycle = LocalLifecycleOwner.current.lifecycle
        }
    }
    

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

  • في العنصر القابل للإنشاء LifecycleOwner، تمّت إعادة تسمية المَعلمة parentLifecycleOwner لتصبح parent. (I080bc)

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

  • ينقل العنصر القابل للإنشاء LifecycleOwner الآن دورة حياته بشكل صحيح إلى DESTROYED عند التخلص منه. يمنع ذلك حدوث تسرُّبات محتملة للرمز البرمجي الخارجي الذي يتضمّن مرجعًا إلى دورة الحياة. (I9e5b7، b/433659048)
  • تغيير الحد الأدنى التلقائي لإصدار SDK من المستوى 21 لواجهة برمجة التطبيقات إلى المستوى 23 (Ibdfca، b/380448311، b/435705964، b/435705223)

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

  • أزِل الحقول الداخلية غير الضرورية من LifecycleOwner. نشكر "جيك وارتون" على مساهمته. (Ideddb)

الإصدار 2.10.0-alpha01

‫30 يوليو 2025

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

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

  • أضِف عنصر LifecycleOwner قابل للإنشاء لتفعيل إنشاء دورات حياة محدودة النطاق مباشرةً ضمن واجهة المستخدم. ويكون ذلك مفيدًا للمكوّنات التي تحتاج إلى إدارة دورات حياتها بشكل مستقل. للاطّلاع على مثال حول كيفية دمج Navigation3 لهذا العنصر الجديد القابل للإنشاء، راجِع aosp/3708610. (76cbf7)

    @Composable
    fun MyComposable() {
        LifecycleOwner(
            maxLifecycle = RESUMED,
            parentLifecycleOwner = LocalLifecycleOwner.current,
        ) {
            val childLifecycleOwner = LocalLifecycleOwner.current
        }
    }
    

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

  • إضافة دالة مصنع أداة إنشاء للنوع CreationExtras، ما يوفّر واجهة برمجة تطبيقات Kotlin أكثر ملاءمةً وتوافقًا مع اللغة. (Iab2bd)
  • تمّت إضافة دعم مدمج للأنواع التي يمكن أن تقبل القيم الفارغة في SavedStateHandle.saved، لتسهيل حفظ واستعادة الخصائص القابلة لأن تكون فارغة. (I54d69، b/421325690)
  • وضع علامة @VisibleForTesting على الشركات المصنِّعة SavedStateHandle (Iff0e0، b/408002794)

الإصدار 2.9

الإصدار 2.9.3

‫27 أغسطس 2025

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

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

  • تمّت إضافة أهداف جديدة من Kotlin Multiplatform (KMP) إلى عناصر Lifecycle *-compose. يتوافق Lifecycle الآن مع الأنظمة الأساسية التالية بشكلٍ كامل: JVM (Android وDesktop)، وNative (Linux وiOS وwatchOS وmacOS وMinGW)، والويب (JavaScript وWasmJS). (I0a0e4)

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

الإصدار 2.9.2

‫16 يوليو 2025

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

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

  • تمّت إضافة أهداف جديدة من Kotlin Multiplatform (KMP) إلى عناصر Lifecycle. يتوافق Lifecycle الآن مع الأنظمة الأساسية التالية بشكلٍ كامل: JVM (Android وDesktop)، وNative (Linux وiOS وwatchOS وmacOS وMinGW)، والويب (JavaScript وWasmJS). يُرجى العِلم أنّه لم تتم إضافة أي استهدافات جديدة لمنصة KMP إلى عناصر *-compose، لأنّ ذلك يعتمد على الإصدار الثابت من Compose 1.9. (I01cb8).

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

الإصدار 2.9.1

‫4 يونيو 2025

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

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

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

الإصدار 2.9.0

‫7 مايو 2025

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

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

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

دعم KotlinX Serialization

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

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

Kotlin Multiplatform

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

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

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

الإصدار 2.9.0-rc01

‫23 أبريل 2025

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

تحذير بشأن توافق واجهة برمجة التطبيقات Lint

  • غيّرت JetBrains KaCallableMemberCall من فئة إلى واجهة، ما يؤدي إلى عدم توافق الرمز الثنائي. ويمكن أن يؤدي ذلك إلى حدوث أعطال إذا كان إصدار AGP في مشروعك يختلف عن الإصدار المستخدَم لتجميع عمليات التحقّق من lint. تم إجراء هذا التعديل في aosp/3577172 ولكنّه لم يُدرَج في ملاحظات الإصدار، لذا نوضّحه هنا. الحلّ المقترَح: التحديث إلى أحدث إصدار ثابت من "مكوّن Android الإضافي لنظام Gradle" إذا تعذّر عليك التحديث بالكامل، استخدِم android.experimental.lint.version لمواءمة عمليات فحص Lint مع إصدار "مكوّن Android الإضافي لنظام Gradle"، راجِع تغييرات في سلوك Compose Runtime للحصول على التفاصيل.

الإصدار 2.9.0-beta01

‫9 أبريل 2025

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

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

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

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

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

الإصدار 2.9.0-alpha13

‫26 مارس 2025

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

الإصدار 2.9.0-alpha12

‫12 مارس 2025

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

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

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

الإصدار 2.9.0-alpha11

‫26 فبراير 2025

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

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

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

الإصدار 2.9.0-alpha10

‫12 فبراير 2025

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

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

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

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

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

الإصدار 2.9.0-alpha09

‫29 يناير 2025

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

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

  • إضافة MutableStateSerializer لتسلسل androidx.compose.runtime.MutableState. (Idfc48، b/378895074)

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

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

الإصدار 2.9.0-alpha08

‫11 ديسمبر 2024

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

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

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

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

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

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

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

الإصدار 2.9.0-alpha07

‫13 نوفمبر 2024

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

التوافق مع Kotlin Multiplatform

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

دعم KotlinX Serialization

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

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

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

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

الإصدار 2.9.0-alpha06

‫30 أكتوبر 2024

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

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

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

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

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

الإصدار 2.9.0-alpha05

‫16 أكتوبر 2024

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

الإصدار 2.9.0-alpha04

‫2 أكتوبر 2024

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

Kotlin Multiplatform

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

الإصدار 2.9.0-alpha03

‫18 سبتمبر 2024

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

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

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

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

الإصدار 2.9.0-alpha02

‫4 سبتمبر 2024

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

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

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

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

الإصدار 2.9.0-alpha01

‫7 أغسطس 2024

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

Kotlin Multiplatform

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

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

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

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

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

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

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

الإصدار 2.8

الإصدار 2.8.7

‫30 أكتوبر 2024

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

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

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

الإصدار 2.8.6

‫18 سبتمبر 2024

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

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

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

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

الإصدار 2.8.5

‫4 سبتمبر 2024

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

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

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

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

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

الإصدار 2.8.4

‫24 يوليو 2024

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

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

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

الإصدار 2.8.3

‫1 يوليو 2024

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

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

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

الإصدار 2.8.2

‫12 يونيو 2024

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

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

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

الإصدار 2.8.1

‫29 مايو 2024

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

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

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

الإصدار 2.8.0

‫14 مايو 2024

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

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

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

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

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

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

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

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

توافق Lifecycle Kotlin Multiplatform

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

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

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

توافق ViewModel مع Kotlin Multiplatform

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

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

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

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

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

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

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

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

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

الإصدار 2.8.0-rc01

‫1 مايو 2024

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

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

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

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

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

الإصدار 2.8.0-beta01

‫17 أبريل 2024

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

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

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

الإصدار 2.8.0-alpha04

‫3 أبريل 2024

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

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

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

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

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

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

  • يعتمد العنصر lifecycle-viewmodel-compose الآن على الإصدار 1.6.0 من Compose.
  • تعتمد Lifecycle الآن على Profile Installer 1.3.1.

الإصدار 2.8.0-alpha03

‫20 مارس 2024

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

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

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

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

التوافق مع Kotlin Multiplatform

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

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

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

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

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

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

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

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

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

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

الإصدار 2.8.0-alpha02

‫21 فبراير 2024

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

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

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

Kotlin Conversions

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

التوافق مع Kotlin Multiplatform

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

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

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

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

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

الإصدار 2.8.0-alpha01

‫24 يناير 2024

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

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

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

الإصدار 2.7

الإصدار 2.7.0

‫10 يناير 2024

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

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

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

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

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

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

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

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

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

الإصدار 2.7.0-rc02

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

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

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

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

الإصدار 2.7.0-rc01

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

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

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

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

الإصدار 2.7.0-beta01

‫1 نوفمبر 2023

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

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

الإصدار 2.7.0-alpha03

‫18 أكتوبر 2023

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

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

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

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

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

الإصدار 2.7.0-alpha02

‫6 سبتمبر 2023

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

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

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

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

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

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

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

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

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

الإصدار 2.7.0-alpha01

‫26 يوليو 2023

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

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

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

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

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

الإصدار 2.6

الإصدار 2.6.2

‫6 سبتمبر 2023

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

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

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

الإصدار 2.6.1

‫22 مارس 2023

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

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

الإصدار 2.6.0

‫8 مارس 2023

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

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

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

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

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

الإصدار 2.6.0-rc01

‫22 فبراير 2023

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

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

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

الإصدار 2.6.0-beta01

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

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

Kotlin Conversions

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

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

الإصدار 2.6.0-alpha04

‫11 يناير 2023

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

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

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

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

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

Kotlin Conversions

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

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

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

الإصدار 2.6.0-alpha03

‫24 أكتوبر 2022

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

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

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

الإصدار 2.6.0-alpha02

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

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

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

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

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

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

الإصدار 2.6.0-alpha01

‫29 يونيو 2022

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

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

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

الإصدار 2.5

الإصدار 2.5.1

‫27 يوليو 2022

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

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

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

الإصدار 2.5.0

‫29 يونيو 2022

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الإصدار 2.5.0-rc02

‫15 يونيو 2022

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

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

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

الإصدار 2.5.0-rc01

‫11 مايو 2022

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

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

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

الإصدار 2.5.0-beta01

‫20 أبريل 2022

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

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

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

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

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

الإصدار 2.5.0-alpha06

‫6 أبريل 2022

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

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

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

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

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

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

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

الإصدار 2.5.0-alpha05

‫23 مارس 2022

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

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

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

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

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

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

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

الإصدار 2.5.0-alpha04

‫9 مارس 2022

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

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

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

الإصدار 2.5.0-alpha03

‫23 فبراير 2022

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

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

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

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

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

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

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

الإصدار 2.5.0-alpha02

‫9 فبراير 2022

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

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

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

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

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

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

  • من 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.

يتم توفير هذه الإضافات تلقائيًا عند استخدام Activity 1.5.0-alpha01 وFragment 1.5.0-alpha01 وNavigation 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 الآن على الإصدار 1.1.1 من Androidx Startup الذي أصلح مشكلة في استخدام ProcessLifecycleInitializer كانت تتسبّب في حدوث StartupException. (b/216490724)

الإصدار 2.4.0

‫27 أكتوبر 2021

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

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

  • تم إيقاف @OnLifecycleEvent نهائيًا. يجب استخدام LifecycleEventObserver أو DefaultLifecycleObserver بدلاً من ذلك.
  • تمت إضافة مكتبة androidx.lifecycle:lifecycle-viewmodel-compose. توفّر viewModel() قابلة للإنشاء وLocalViewModelStoreOwner.
    • تغيير غير متوافق مع الإصدارات السابقة: تمت إعادة كتابة ViewModelProvider بلغة Kotlin. لم يعُد الإجراء ViewModelProvider.Factory.create يسمح بقيمة عامة تقبل القيم الخالية.
  • تمت إضافة واجهة برمجة تطبيقات جديدة للروتينات الفرعية إلى androidx.lifecycle:lifecycle-runtime-ktx:
  • Lifecycle.repeatOnLifecycle، وهي واجهة برمجة تطبيقات تنفّذ مجموعة من الرموز البرمجية في روتين فرعي عندما تكون Lifecycle في حالة معيّنة على الأقل. سيتم إلغاء الحظر وإعادة إطلاقه مع انتقال دورة الحياة إلى الحالة المستهدَفة وخروجها منها.
  • 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 بدون أي تغييرات منذ الإصدار 2.4.0-beta01 من Lifecycle. يتضمّن الإصدار 2.4.0-rc01 هذه التعديلات.

الإصدار 2.4.0-beta01

‫15 سبتمبر 2021

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

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

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

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

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

الإصدار 2.4.0-alpha03

‫4 أغسطس 2021

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha02

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

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

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

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha01

‫24 مارس 2021

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

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

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

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

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

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

    (أو)

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

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

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

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

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

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

الإصدار 1.0.0-alpha07

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

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

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

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

الإصدار 1.0.0-alpha06

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

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

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

الإصدار 1.0.0-alpha05

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

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

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

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

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

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

الإصدار 1.0.0-alpha04

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

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

تغييرات الاعتماديات

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

الإصدار 1.0.0-alpha03

‫10 مارس 2021

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

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

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

الإصدار 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 من Lifecycle

‫24 مارس 2021

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

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

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

الإصدار 2.3.0

الإصدار 2.3.0

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

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

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

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

الإصدار 2.3.0-rc01

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

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

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

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

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

الإصدار 2.3.0-beta01

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

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

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

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

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

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

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

الإصدار 2.3.0-alpha07

19 آب (أغسطس) 2020

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

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

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

الإصدار 2.3.0-alpha06

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

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

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

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

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

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

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

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

الإصدار 2.3.0-alpha05

‫24 يونيو 2020

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

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

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

الإصدار 2.3.0-alpha04

‫10 يونيو 2020

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

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

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

الإصدار 2.3.0-alpha03

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

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

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

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

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

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

الإصدار 2.3.0-alpha02

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

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

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

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

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

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

الإصدار 2.3.0-alpha01

‫4 مارس 2020

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

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

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

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

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

الإصدار 2.2.0

ViewModel-Savedstate الإصدار 2.2.0

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

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

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

الإصدار 2.2.0

‫22 يناير 2020

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

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

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

الإصدار 2.2.0-rc03

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

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

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

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

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

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

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

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

الإصدار 2.2.0-rc02

‫7 نوفمبر 2019

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

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

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

الإصدار 2.2.0-rc01

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

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

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

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

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

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

الإصدار 2.2.0-beta01

‫9 أكتوبر 2019

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

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

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

الإصدار 2.2.0-alpha05

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

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

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

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

الإصدار 2.2.0-alpha04

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

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

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

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

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

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

الإصدار 2.2.0-alpha03

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

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

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

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

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

الإصدار 2.2.0-alpha02

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

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

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

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

الإصدار 2.2.0-alpha01

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

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

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

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

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

الإصدار 1.0.0

‫22 يناير 2020

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

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

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

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

الإصدار 1.0.0-rc02 من Viewmodel-Savedstate

‫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 عند الوصول إلى SavedState ViewModel لأول مرة في Activity.onActivityResult(). (b/139093676)
  • تم إصلاح IllegalStateException عند استخدام AbstractSavedStateViewModelFactory. (b/141225984)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

‫13 مارس 2019

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

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

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

الإصدار 2.1.0

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

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

الإصدار 2.1.0

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

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

الإصدار 2.1.0-rc01

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

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

الإصدار 2.1.0-beta01

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

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

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

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

الإصدار 2.1.0-alpha04

‫3 أبريل 2019

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

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

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

الإصدار 2.1.0-alpha03

‫13 مارس 2019

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

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

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

الإصدار 2.1.0-alpha02

‫30 يناير 2019

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

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

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

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

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

الإصدار 2.1.0-alpha01

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

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

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

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

الإصدار 2.0.0

الإصدار 2.0.0

‫21 سبتمبر 2018

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

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

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

الإصدار 2.0.0-beta01

‫2 يوليو 2018

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

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

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

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

dependencies {
    def lifecycle_version = "1.1.1"

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

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

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

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

الإصدار 1.1.1

‫21 مارس 2018

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

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

الإصدار 1.1.0

‫22 يناير 2018

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

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

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

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

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