مراحل النشاط

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

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

العناصر الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأوّلي
lifecycle-* 2.11.0 - - 2.12.0-alpha04
lifecycle-viewmodel-navigation3 2.11.0 - - 2.12.0-alpha04
تمّ إجراء آخر تعديل على هذه المكتبة في: 23 سبتمبر 2026

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

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

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

Kotlin

Groovy

    dependencies {
        def lifecycle_version = "2.11.0"
        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.12.0-alpha04"

        // 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.11.0"
        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.12.0-alpha04")

        // 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.11.0"
        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.11.0"
        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 للحصول على مزيد من المعلومات.

الإصدار 2.12

الإصدار 2.12.0-alpha04

‫23 سبتمبر 2026

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

الإصدار ‎2.12.0-alpha03

‫9 سبتمبر 2026

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

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

  • تم تعديل compileSdk لمكتبات Compose إلى الإصدار 37.1. سيتطلّب ذلك تعديل compileSdk بشكل متعدٍّ لجميع التطبيقات والمكتبات التي تستخدم Compose. (I05b0f)

الإصدار 2.12.0-alpha02

‫26 أغسطس 2026

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

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

  • تم إيقاف AutoRecreated وrunOnNextRecreation نهائيًا واستبدالهما بـ SavedStateProvider وSavedStateRestorer. (Iadc00)

الإصدار 2.12.0-alpha01

‫12 أغسطس 2026

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

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

  • إيقاف lifecycle-compiler معالج التعليقات التوضيحية نهائيًا يُرجى نقل البيانات إلى DefaultLifecycleObserver أو LifecycleEventObserver بدلاً من استخدام معالج التعليقات التوضيحية. (Ibf571، b/541926513)
  • تعمل الدالتان SavedStateViewModelFactory وAbstractSavedStateViewModelFactory الآن على إيقاف التنفيذ فورًا في حال عدم تنفيذ SavedStateRegistryOwner للدالة ViewModelStoreOwner، ما يمنع حدوث أعطال متأخرة أثناء إعادة إنشاء المكوّن. (Icf317)
  • إضافة تتبُّع النظام إلى عمليات إرسال أحداث LifecycleRegistry (Ie1f92، b/112161409)

الإصدار 2.11

الإصدار 2.11.0

‫17 يونيو 2026

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

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

نطاق ViewModels في Compose: تقديم ViewModelStoreProvider وrememberViewModelStoreProvider وrememberViewModelStoreOwner لربط ViewModels بنطاقات واجهة مستخدم محدّدة (مثل صفحات Pager). وتظل هذه العناصر متاحة عند إجراء تغييرات في الإعدادات، ويتم محوها تلقائيًا عند إزالة الدالة المركّبة من التسلسل الهرمي.

توافق Kotlin Multiplatform: يتوافق الإصداران ViewModel-Compose وViewModel-Navigation3 الآن مع جميع أهداف Kotlin Multiplatform.

عملية دمج Navigation3: يقبل الإصدار ViewModelStoreNavEntryDecorator الآن ViewModelStoreOwner لنشر CreationExtras والمصانع إلى ViewModels المتداخلة. يمكنك أيضًا رفع مستوى مقدّمي الخدمات باستخدام عملية التحميل الزائد الجديدة rememberViewModelStoreNavEntryDecorator لإتاحة عدة حِزم سابقة. تم إيقاف removeViewModelStoreOnPop نهائيًا.

أدوات مساعدة خاصة بدورة الحياة: تمت إضافة إضافة ViewModelProvider.get<VM>(key) مجسّمة، وLifecycle.addObserver مستندة إلى تعبير لامدا، وإضافات المصنع التلقائية لـ ViewModelStoreOwner. تمت إضافة التعليق التوضيحي @EmptySuper إلى ViewModel.onCleared.

تغييرات أخرى: أصبح استخدام واجهة المستخدم 1.7.0+ في Compose مطلوبًا في LocalLifecycleOwner لإزالة عمليات الرجوع الاحتياطية المستندة إلى الانعكاس. تتطلّب تحديثات Compose compileSdk توفُّر الإصدار 9.2.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" كحد أدنى.

الإصدار 2.11.0-rc01

‫3 يونيو 2026

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

الإصدار ‎2.11.0-beta02

‫19 مايو 2026

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

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

  • أضِف حمولة زائدة rememberViewModelStoreNavEntryDecorator تقبل ViewModelStoreProvider. يتيح ذلك للمطوّرين نقل مقدّم الخدمة إلى أعلى نطاق التركيب الخاص بأداة التزيين، ما يتيح حالات استخدام مثل إتاحة عدة حِزم سابقة حيث يكون الإدخال نفسه متوفّرًا في كليهما ولكنّه يتطلّب حالة منفصلة. (Ibbbfe، b/503420425)
  • منع إزالة ViewModels المشتركة قبل الأوان عند إزالة موفّر عنصر تابع من التركيب (Ib321a)

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

  • يجب استخدام الإصدار 1.7.0 أو إصدار أحدث من واجهة مستخدم Compose لاستخدام LocalLifecycleOwner. يؤدي ذلك إلى إزالة عمليات الرجوع الاحتياطية الداخلية، ما يحسّن الأداء ولكنّه يفرض ترقية صارمة للتبعيات على العملاء. (I48e65)
  • منع تكرار الرموز مع الإصدارات القديمة من JetBrains fork عند الترقية إلى الإصدار 1.11.0 من Compose Multiplatform (Iccd64)
  • تم إصلاح مشكلة محو ViewModels بشكل غير صحيح أثناء إعادة التركيب عند استخدام rememberViewModelStoreProvider مع مَعلمات تلقائية غير ثابتة. لا يعيد الموفّر إنشاء المفتاح إلا عندما يتغيّر المالك الأصلي أو المفتاح الصريح. (Ibe296، b/501792448)

الإصدار 2.11.0-beta01

‫22 أبريل 2026

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

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

  • تقسيم rememberViewModelStoreOwner وrememberViewModelStoreProvider إلى دالتَين منفصلتَين لحالات الاستخدام مع مفتاح وبدونه (Ifd154، b/500802788)

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

  • تم تعديل Compose compileSdk إلى الإصدار 37 من واجهة برمجة التطبيقات. وهذا يعني أنّه يجب استخدام الإصدار 9.2.0 من &quot;المكوّن الإضافي لنظام Gradle المتوافق مع Android&quot; على الأقل عند استخدام Compose. (Id45cd، b/413674743)

الإصدار ‎2.11.0-alpha03

‫25 مارس 2026

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

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

  • اجعل parentKey مَعلمة اختيارية في دوال الإنشاء ViewModelStoreProvider، مع ضبط القيمة التلقائية على null، ونقلها بعد parentStore أو parentOwner. يؤدي ذلك إلى تبسيط عملية إنشاء مثيل عندما لا يكون مفتاح النطاق المشترَك مطلوبًا. (I66b67)
  • يقبل ViewModelStoreNavEntryDecorator الآن ViewModelStoreOwner بدلاً من ViewModelStore. يتيح ذلك لـ Navigation3 نشر CreationExtras وViewModelProvider.Factory التلقائيَين للعنصر الرئيسي إلى عناصر ViewModel المتداخلة، ما يضمن توفير التوافق مع التبعيات على مستوى التطبيق. (Ia6018، b/434651920)
  • عزل حالة ViewModelStoreProvider باستخدام مفتاح فريد يمنع ذلك مقدّمي الخدمات المتشابهين من محو ViewModels الخاصة ببعضهم البعض عن غير قصد أثناء عملية الإتلاف. (I59c0b، b/434651920)
  • أضِف دالة إضافة ViewModelProvider.get<VM>(key: String). يتيح ذلك للمطوّرين استرداد ViewModels بشكل أكثر سلاسة باستخدام key مخصّص مع مَعلمات نوع Kotlin reified، ما يزيل الحاجة إلى تمرير نوع الفئة بشكل صريح. (Ic1f59)
  • تمت إضافة إمكانية استخدام defaultArgs في ViewModelStoreProvider للسماح بتهيئة ViewModels باستخدام قيم SavedState التلقائية. (I1e933، b/434651920، b/165642391)
  • إيقاف removeViewModelStoreOnPop وViewModelStoreNavEntryDecoratorDefaults المرتبطَين به نهائيًا كانت واجهة برمجة التطبيقات هذه حلاً بديلاً لتغييرات الإعدادات، والتي يتم التعامل معها الآن داخليًا. يجب الآن محو جميع حالات أدوات التزيين، بما في ذلك ViewModels، في الوقت نفسه عند إغلاق النافذة. للحفاظ على حالة أداة الزخرفة خارج الوقت الذي يتم فيه تمرير سجلّ الأنشطة السابقة هذا إلى NavDisplay، استخدِم واجهة برمجة التطبيقات rememberDecoratedNavEntries. (I852d9)

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

  • أضِف toString() إلى CreationExtras.Key لعرض اسم الفئة. (I5de52)

الإصدار ‎2.11.0-alpha02

‫11 مارس 2026

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

ViewModel ذات النطاق المحدود

  • يقدّم هذا الإصدار واجهات برمجة تطبيقات لإنشاء مثيلات ViewModelStore ذات نطاق محدّد في Compose. يتيح ذلك ربط ViewModels بنطاقات محدّدة لواجهة المستخدم (مثل صفحات Pager الفردية أو عناصر LazyList). تستمر هذه ViewModels حتى بعد إجراء تغييرات في الإعدادات، ويتم محوها تلقائيًا عند إزالة الدالة المركّبة المقابلة نهائيًا من التسلسل الهرمي.

    // Hoist the parent provider outside the Pager.
    val provider = rememberViewModelStoreProvider()
    val pagerState = rememberPagerState(pageCount = { 5 })
    
    HorizontalPager(state = pagerState) { page ->
        // Create an owner scoped to the current page.
        val storeOwner = rememberViewModelStoreOwner(provider, key = page)
    
        // Provide the scoped owner to this composition.
        CompositionLocalProvider(LocalViewModelStoreOwner provides storeOwner) {
            // ViewModel is now scoped specifically to this page.
            val viewModel: PageViewModel = viewModel()
        }
    }
    

يُرجى العِلم أنّ ViewModelStoreProvider متاح خارج Compose ويمكن استخدامه مع الأنشطة و/أو الأجزاء و/أو طرق العرض.

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

  • إضافة إمكانية استخدام جميع أهداف KMP إلى ViewModel Navigation3 (I60fa5)
  • أضِف دوال مصنع لكل من LifecycleOwner وViewModelStoreOwner وSavedStateRegistryOwner لتقليل الرمز النموذجي عند إنشاء مكونات مالك مخصّصة. (I9682c)
  • أضِف دالة إضافة Lifecycle.addObserver مستندة إلى lambda للسماح بمراقبة أحداث مراحل النشاط بدون إنشاء عنصر مجهول الهوية. (I94f38)
  • أضِف الإضافتَين defaultViewModelProviderFactory وdefaultViewModelCreationExtras إلى ViewModelStoreOwner. توفّر هذه الدوال إمكانية الوصول الآمن إلى القيم التلقائية بدون الحاجة إلى إجراء عمليات تحقّق يدوية من النوع مقابل HasDefaultViewModelProviderFactory. (Ifa83d)

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

  • أضِف rememberViewModelStoreOwner لإنشاء ViewModelStoreOwners محدودة النطاق بسهولة في Compose. تعرض هذه الدالة مالكًا مرتبطًا بدورة حياة العنصر القابل للإنشاء، وتؤدي إلى محو ViewModels تلقائيًا عند إزالة العنصر القابل للإنشاء من واجهة المستخدم. (I2a15b، b/165642391)
  • أضِف rememberViewModelStoreProvider للسماح بإنشاء مثيلات ViewModelStore ذات نطاق محدود في Compose. تربط هذه الدالة متجرًا فرعيًا بمالك رئيسي، ما يضمن بقاء ViewModels عند إجراء تغييرات في الإعدادات مع محوها تلقائيًا عند إزالة Composable من التسلسل الهرمي. (I0f57a، b/165642391)
  • أضِف ViewModelStoreProvider لإدارة مثيلات ViewModelStore ذات النطاق المحدود. تتيح هذه الفئة إنشاء نطاقات فرعية تبقى بعد تغييرات الإعدادات ولكن يمكن محوها بشكل مستقل. توفّر أيضًا أغلفة ViewModelStoreOwner التي تكتسب المصانع التلقائية وإضافات الإنشاء من العنصر الرئيسي. (I87f4f، b/434651920)

الإصدار 2.11.0-alpha01

‫25 فبراير 2026

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

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

  • إتاحة جميع أهداف Kotlin Multiplatform (KMP) في ViewModel-Compose فصل عملية تحديد المالك عن LocalView للسماح لمضيفي المنصات بتوفير قيمة تلقائية ViewModelStoreOwner مع الحفاظ على LocalView كخيار احتياطي آمن على Android (I09fab، b/434940570، Ic8526، b/478146897)

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

  • أضِف عملية تنفيذ toString إلى ViewModelStore التي تسرد جميع المفاتيح المخزّنة للمساعدة في تبسيط عملية تصحيح الأخطاء. (I0a6f4)
  • أضِف تنفيذًا تلقائيًا للسمة HasDefaultViewModelProviderFactory.defaultViewModelProviderFactory، ما يعني أنّك لن تحتاج بعد الآن إلى إلغاء هذه السمة بشكلٍ صريح عند تنفيذ الواجهة. (Ia7095)
  • أضِف التعليق التوضيحي ViewModel.onCleared مع @EmptySuper للإشارة بوضوح إلى أنّ الطرق البديلة لا تحتاج إلى استدعاء super.onCleared(). (I8c226)

الإصدار 2.10

الإصدار 2.10.0

‫19 نوفمبر 2025

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

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

  • أضِف عنصر rememberLifecycleOwner قابلاً للإنشاء لتفعيل إنشاء دورات حياة محدودة النطاق مباشرةً داخل واجهة المستخدم. يكون ذلك مفيدًا للمكوّنات التي تحتاج إلى إدارة دورات حياتها بشكل مستقل، مثل HorizontalPager التي تريد جعل الصفحة الحالية RESUMED فقط أو المكتبات مثل Navigation3:

    @Composable
    fun MyComposable() {
        // This LifecycleOwner is automatically moved to DESTROYED when
        // it leaves composition and its maxLifecycle is the maximum of either
        // the maxLifecycle you set or the Lifecycle.State of the parentLifecycleOwner
        val lifecycleOwner = rememberLifecycleOwner(
            maxLifecycle = RESUMED,
            parentLifecycleOwner = LocalLifecycleOwner.current,
        )
        CompositionLocalProvider(LocalLifecycleOwner provides lifecycleOwner) {
            val childLifecycleOwner = LocalLifecycleOwner.current
        }
    }
    
  • يوفر العنصر lifecycle-viewmodel-navigation3 عملية دمج مُنشأة مسبقًا مع Navigation3، ما يتيح لك تفعيل نطاق مثيلات ViewModel لشاشات فردية ("إدخالات") باستخدام واجهة برمجة التطبيقات rememberViewModelStoreNavEntryDecorator():

    @Composable
    fun MyComposable() {
        NavDisplay(
            backStack = backStack,
            entryDecorators =
                listOf(
                    rememberSaveableStateHolderNavEntryDecorator(),
                    // Add this line to automatically scope ViewModels to each entry
                    rememberViewModelStoreNavEntryDecorator(),
                ),
            entryProvider = entryProvider {
                // Add your entries here
            }
        }
    }
    
  • إضافة دالة مصنع أداة إنشاء للنوع CreationExtras، ما يوفّر واجهة برمجة تطبيقات Kotlin أكثر ملاءمة ووضوحًا

    override val defaultViewModelCreationExtras: CreationExtras
        // Use the CreationExtras builder to add in a custom value to the default
        // CreationExtras in your Activity or Fragment
        get() = super.defaultViewModelCreationExtras + CreationExtras {
            this[CustomKey] = "customValue"
       }
    
  • تمّت إضافة دعم مدمج للأنواع التي يمكن أن تقبل القيم الفارغة في SavedStateHandle.saved، لتسهيل حفظ واستعادة الخصائص القابلة لأن تكون فارغة.

  • وضع علامة SavedStateHandle على الشركات المصنّعة باعتبارها @VisibleForTesting

  • تم تغيير minSdk من المستوى 21 لواجهة برمجة التطبيقات إلى المستوى 23.

الإصدار 2.10.0-rc01

‫5 نوفمبر 2025

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

الإصدار ‎2.10.0-beta01

‫22 أكتوبر 2025

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

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

  • تم تغيير اسم "ViewModelStoreNavEntryDecoratorDefault" إلى "ViewModelStoreNavEntryDecoratorDefaults". (I6d27b، b/444447434)

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

  • لم يعُد rememberLifecycleOwner يتعطّل إذا تلقّى المالك حدث Lifecycle.Event.ON_DESTROY قبل الانتقال إلى Lifeycle.State.CREATED. (I6f98e، b/444594991)

الإصدار 2.10.0-alpha05

‫8 أكتوبر 2025

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

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

  • أصبح removeViewModelStoreOnPopCallback() الآن جزءًا من عنصر ViewModelStoreNavEntryDecoratorDefault، وهو المكان الذي يمكن أن تستدعي فيه المنصات وعمليات التنفيذ الأخرى القيمة التلقائية. (Ia1f23، b/444447434)
  • تمت إعادة تصميم ViewModelStoreNavEntryDecorator من دالة إلى فئة لتعكس بشكل أفضل وظيفتها كعامل إنشاء لـ NavEntryDecorator، وتمت إعادة تسمية المَعلمة shouldRemoveViewModelStore الخاصة بالدالة الزخرفية إلى removeViewModelStoreOnPop لتوضيح أنّه لا يتم استدعاء دالة رد الاتصال هذه إلا عند إزالة إدخال من backStack. (Iefdc5، b/444447434)

الإصدار ‎2.10.0-alpha04

‫24 سبتمبر 2025

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

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

  • أعِد تصميم العنصر القابل للإنشاء LifecycleOwner ليصبح rememberLifecycleOwner. تعرض الدالة الآن LifecycleOwner مباشرةً. لتوفير هذا المالك لتركيبة فرعية، استخدِم CompositionLocalProvider. (Ic57f0، b/444446629)
  • أضِف نماذج KMP إلى lifecycle-viewmodel-navigation3 لتمكين JetBrains من توفير فروع تملأ هذه الأهداف وبالتالي تتيح استخدام CMP. (I44a4c)

الإصدار ‎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)
  • وضع علامة SavedStateHandle على الشركات المصنّعة باعتبارها @VisibleForTesting (Iff0e0، b/408002794)

الإصدار 2.9

الإصدار 2.9.4

‫17 سبتمبر 2025

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

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

  • تم إصلاح خطأ في عدم تطبيق المكوّن الإضافي لبرنامج Compose Compiler، ما أدّى إلى تعطُّل عناصر Lifecycle KMP. (Ie95bc، b/443096483، b/443965665)

الإصدار 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 الآن على أجهزة الكمبيوتر المكتبي التي تستخدم JVM وأجهزة Android.

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

  • الحالة 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" (AGP) الذي تستخدمه. يمكنك الاطّلاع على تغييرات في سلوك وقت تشغيل Compose للحصول على التفاصيل.

الإصدار 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` متوافقًا مع القيم القابلة للتصغير. نشكر Roman Kalukiewicz على مساهمته. (0d78ea6)

الإصدار 2.9.0-alpha01

‫7 أغسطس 2024

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

Kotlin Multiplatform

  • أصبحت lifecycle-testing متوافقة الآن مع KMP. (Iea41e)
  • إضافة دعم لهدف linuxArm64 kotlin multiplatform (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 الآن على أجهزة الكمبيوتر المكتبي التي تستخدم JVM وأجهزة Android. (d3d0892)
  • خاصية الإضافة المضمّنة لعرض التطبيق الأساسي بأمان في الإصدار 2.0 من لغة Kotlin (I39df2)

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

  • تمت إزالة التحديد اليدوي للوصول إلى واجهات برمجة التطبيقات الجديدة للمنصة لأنّ ذلك يحدث تلقائيًا من خلال تصميم واجهة برمجة التطبيقات عند استخدام R8 مع الإصدار 7.3 أو إصدار أحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android (مثل الإصدار 3.3 من R8)، وجميع عمليات الإنشاء عند استخدام الإصدار 8.1 أو إصدار أحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android (مثل الإصدار 8.1 من D8). ننصح العملاء الذين لا يستخدمون المكوّن الإضافي لنظام Gradle المتوافق مع Android‏ (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. نشكر Roman Kalukiewicz على مساهمته. (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)
  • يستخدم دمج ViewModel مع saveable باستخدام مفوّضي السمات الآن اسم الفئة كجزء من المفتاح الذي يتم إنشاؤه تلقائيًا، ما يمنع حدوث تعارضات إذا كانت فئات متعددة تستخدم 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.

لاستيعاب هذا التغيير، أصبحت الطرق، مثل تلك المتوفّرة في ViewModelProvider والتي كانت تستغرق java.lang.Class<T>، تتضمّن الآن طريقة مكافئة تستغرق 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)

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

  • يتطلّب الإصدار lifecycle-*:2.8.0 الحد الأدنى من إصدار Compose وهو 1.7.0-alpha05 (b/336842920).

الإصدار 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 في بيئات Native وJVM 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)

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

  • تمت إعادة كتابة 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)
  • تستخدم "ViewModel" الآن AutoCloseable بدلاً من Closeable. هذا تغيير متوافق مع الإصدارات القديمة. (I27f8e، b/214568825)
  • تم إيقاف LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) نهائيًا واستخدام LiveData.toPublisher(lifecycleOwner) بدلاً منه. (Iabe29، b/262623005)

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

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

الإصدار 2.8.0-alpha01

‫24 يناير 2024

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

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

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

الإصدار 2.7

الإصدار 2.7.0

‫10 يناير 2024

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

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

  • يتضمّن TestLifecycleOwner الآن دالة تعليق setCurrentState() تضمن اكتمال تغيير الحالة وجميع عمليات ردّ الاتصال LifecycleObserver قبل العودة. والجدير بالذكر أنّه على عكس ضبط السمة currentState مباشرةً، لا تستخدم هذه الطريقة runBlocking، ما يجعلها آمنة للاستخدام ضمن روتين فرعي مثل الروتين الذي توفّره runTest.
  • تعكس الإضافتان LiveData لكلّ من map وswitchMap الآن سلوك distinctUntilChanged. فإذا كان LiveData يتضمّن مجموعة value، سيتم استدعاء الدالة map/switchMap على الفور لتعبئة value الخاص بـ LiveData الذي تم إرجاعه. يضمن ذلك ضبط القيمة الأولية كجزء من التركيب الأول (عند استخدامها مع observeAsState())، ولكنّه لا يغيّر سلوك المراقبة، إذ لن يتم تطبيق قيم التحديثات من المصدر LiveData إلا بعد بدء مراقبة LiveData.
  • يحلّ هذا الإصدار مشكلة عدم استعادة SavedStateHandle فئات Parcelable المخصّصة بشكلٍ صحيح بعد إيقاف العملية نهائيًا وإعادة إنشائها. بسبب فقدان معلومات النوع من خلال إطار عمل Android، تتطلّب مصفوفات 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)

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

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

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

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

الإصدار 2.6.0-rc01

‫22 فبراير 2023

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

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

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

الإصدار ‎2.6.0-beta01

‫8 فبراير 2023

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

الإحالات الناجحة في Kotlin

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

الإصدار 2.6.0-alpha05

‫25 يناير 2023

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

الإحالات الناجحة في Kotlin

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

الإصدار 2.6.0-alpha04

‫11 يناير 2023

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

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

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

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

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

الإحالات الناجحة في Kotlin

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

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

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

الإصدار ‎2.6.0-alpha03

‫24 أكتوبر 2022

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

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

  • تم إصلاح مشكلة عدم عمل القيود بين وحدات 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)
  • ستحتفظ الدالة asLiveData في FlowLiveData الآن بالقيمة الأولية لـ StateFlow عند إنشاء الكائن الجديد LiveData. (I3f530، b/157380488)
  • من مراحل النشاط 2.5.1: تعمل عمليات التنفيذ المخصّصة لـ AndroidViewModelFactory الآن على استدعاء الدالة create(modelClass) بشكلٍ صحيح عند استخدام أداة الإنشاء ذات الحالة مع Lifecycle 2.4 أو إصدار أحدث (I5b315، b/238011621)

الإصدار 2.6.0-alpha01

‫29 يونيو 2022

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

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

  • تمت إضافة إضافة جديدة في StateFlow وFlow من collectAsStateWithLifecycle تجمع البيانات من التدفقات وتمثّل أحدث قيمة لها كحالة 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 بعد الآن عند دمج إصدارات سابقة من تبعيات compileOnly Lifecycle مع الإصدارات 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 الآن على تخزين defaultValue بشكل صحيح عندما لا تتوفّر قيمة للمفتاح المحدّد. (I1c6ce، b/178510877)

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

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

الإصدار 2.5.0-alpha01

‫26 يناير 2022

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

ViewModel CreationExtras

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

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

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

يتم توفير هذه الإضافات تلقائيًا عند استخدام نشاط 1.5.0-alpha01 و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 هذه التعديلات.

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

  • تم نقل الإصلاح من مكوّن Lifecycle 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.Initializers الأخرى من استخدامه كعنصر تابع. (I94c31)

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

  • تم إصلاح مشكلة في عملية فحص NullSafeMutableLiveData lint عند احتواء الحقل على معدِّلات. (#147، b/183696616)
  • تم إصلاح مشكلة أخرى في عملية فحص NullSafeMutableLiveData lint عند استخدام الأنواع العامة. (#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 الجديدة أيضًا. (I0f4cd)

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

  • بدءًا من الإصدار 2.3.1 من Lifecycle: يمكن الآن لقاعدة NonNullableMutableLiveData Lint التمييز بشكل صحيح بين متغيرات الحقول التي تختلف في إمكانية قبولها قيمًا فارغة. (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 أو الإصدارات الأحدث لملء هذا الحقل بشكل صحيح. تتوفّر إضافتا findViewTreeLifecycleOwner وfindViewTreeViewModelStoreOwner في Kotlin في lifecycle-runtime-ktx وlifecycle-viewmodel-ktx على التوالي.
  • LiveData.observe() إيقاف دالة الإضافة في Kotlin نهائيًا: تم إيقاف دالة الإضافة LiveData.observe() في Kotlin نهائيًا، وهي ضرورية لاستخدام صيغة lambda، لأنّها لم تعُد ضرورية عند استخدام الإصدار 1.4 من Kotlin.

الإصدار 2.3.0-rc01

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

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

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

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

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

الإصدار 2.3.0-beta01

‫1 أكتوبر 2020

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

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

  • تم إيقاف إضافة LiveData.observe()Kotlin اللازمة لاستخدام بنية lambda نهائيًا، لأنّها لم تعُد ضرورية عند استخدام الإصدار 1.4 من Kotlin. (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. يجب الترقية إلى النشاط 1.2.0-alpha01 والجزء 1.3.0-alpha01 لملء هذا الحقل بشكل صحيح. تتوفّر findViewTreeLifecycleOwner إضافة Kotlin في lifecycle-runtime-ktx. (aosp/1182361 وaosp/1182956)
  • تمت إضافة عملية فحص جديدة في Lint تحذّرك عند ضبط قيمة null على MutableLiveData تم تعريفها في Kotlin على أنّها غير قابلة للقيم الخالية. تتوفّر هذه السمة عند استخدام العنصرين livedata-core-ktx أو livedata-ktx. (aosp/1154723 وaosp/1159092)
  • يتوفّر الآن العنصر lifecycle-runtime-testing الجديد الذي يوفّر TestLifecycleOwner ينفّذ LifecycleOwner ويوفّر Lifecycle قابلاً للتغيير وآمنًا للاستخدام في سلاسل التعليمات المتعددة. (aosp/1242438)

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

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

الإصدار 2.2.0

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

‫5 فبراير 2020

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

تتشارك حزمة SavedState في Lifecycle ViewModel الآن الإصدار نفسه مع عناصر 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)

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

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

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

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

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

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

‫7 أغسطس 2019

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

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

  • لم يعُد 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.

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

‫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.