مراحل النشاط
يسرد هذا الجدول جميع العناصر في مجموعة androidx.lifecycle
.
العناصر | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار التجريبي الأول |
---|---|---|---|---|
lifecycle-* | 2.8.7 | - | - | 2.9.0-alpha08 |
lifecycle-viewmodel-compose | 2.8.7 | - | - | 2.9.0-alpha08 |
الإعلان عن التبعيات
لإضافة تبعية على Lifecycle، يجب إضافة مستودع Google Maven إلى مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
أضِف التبعيات للعناصر التي تحتاج إليها في ملف build.gradle
ل
تطبيقك أو وحدتك:
Kotlin
Groovy
dependencies { def lifecycle_version = "2.8.7" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.7" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Java
Groovy
dependencies { def lifecycle_version = "2.8.7" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.7" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
لمزيد من المعلومات عن العناصر الاعتمادية، اطّلِع على مقالة إضافة عناصر الاعتماد الخاصة بالإصدار.
ملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا واجهت مشاكل جديدة أو كان لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مكتبة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية عن طريق النقر على زر النجمة.
اطّلِع على مستندات أداة تتبُّع المشاكل لمزيد من المعلومات.
الإصدار 2.9
الإصدار 2.9.0-alpha08
11 كانون الأول (ديسمبر) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.9.0-alpha08
. يتضمّن الإصدار 2.9.0-alpha08 هذه المساهمات.
الميزات الجديدة
- أضِف
ViewModelScenario.recreate
لمحاكاة حالة "إنهاء عملية النظام" من خلال إعادة إنشاءViewModel
الخاضع للاختبار وجميع المكوّنات المرتبطة به. (Id6a69، b/381063087) - يمكن الآن حلّ مثيلات
LifecycleOwner
وViewModelStoreOwner
التي يتم استرجاعها من خلال واجهات برمجة التطبيقاتfindViewTree
الخاصة بكل منهما من خلال عناصر رئيسية غير متّصلة لعرض، مثلViewOverlay
. اطّلِع على ملاحظات الإصدار الأساسية أو المستندات فيViewTree.setViewTreeDisjointParent
للحصول على مزيد من المعلومات عن عناصر العرض غير المتّصلة ببعضها. (I800f4)
تغييرات واجهة برمجة التطبيقات
- يجب أن تكون عملية تسمية الحِزم وتنظيمها أكثر اتساقًا مع
SavedStateRegistryOwnerDelegate
(I8c135 وb/376026744).
إصلاح الأخطاء
- تستخدم هذه المكتبة الآن تعليقات توضيحية حول عدم تحديد قيمة JSpecify، وهي عبارة عن استخدام للنوع. على مطوّري Kotlin استخدام مَعلمات المُجمِّع التالية لفرض الاستخدام الصحيح:
-Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode
(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 مع أنظمة التشغيل المتعددة
- أصبحت دورة الحياة
ViewModel SavedState
متوافقة مع KMP. يتيح لك ذلك استخدامSavedStateHandle
في الرمز البرمجي الشائع. (Ib6394، b/334076622)
إتاحة ميزة التسلسل في KotlinX
بفضل ميزة KotlinX Serialization المضافة في SavedState
1.3.0-alpha05
، طرحناsaved
، وهو عنصر تمثيل خاصية كسول، لتسهيل تخزين فئات@Serializable
فيSavedStateHandle
واستعادة هذه الفئات تلقائيًا عند إنهاء العملية وإعادة إنشائها. يُرجى العلم أنّ الوكيلsaved
غير نشِط ولن يستدعي دالةinit
lambda أو يحفظ أي شيء فيSavedStateHandle
إلى أن يتم الوصول إليه. (I47a88، b/376026744)@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
تغييرات واجهة برمجة التطبيقات
- أضِف
getMutableStateFlow
إلىSavedStateHandle
للحصول علىMutableStateFlow
. هذه الدالة الجديدة حصرية للمفتاح ولا يمكن استخدامها معgetLiveData
. سيتم طرح استثناء في حال محاولة استخدام كليهما للوصول إلى الحالة نفسها. (I04a4f، b/375408415)
الإصدار 2.9.0-alpha06
30 تشرين الأول (أكتوبر) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.9.0-alpha06
. يتضمّن الإصدار 2.9.0-alpha06 عمليات الربط هذه.
التغييرات في السلوك
- إنّ حالة
Lifecycle.DESTROYED
نهائية، وأي محاولة لنقلLifecycle
منها إلى أي حالة أخرى ستؤدي الآن إلى ظهورIllegalStateException
. (I116c4، b/370577987) - لم تعُد
SavedStateHandle
تتضمّن أيSavedStateProvider.saveState()
تكون فيهاBundle
المعروضة فارغة. (I910b5، b/370577987)
إصلاح الأخطاء
- اكتمال
Lifecycle.eventFlow
بشكل صحيح الآن عندما يكونLifecycle
هوDESTROYED
(I293b2، b/374043130)
الإصدار 2.9.0-alpha05
16 أكتوبر 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.9.0-alpha05
بدون أي تغييرات ملحوظة. يتضمّن الإصدار 2.9.0-alpha05 عمليات الربط هذه.
الإصدار 2.9.0-alpha04
2 أكتوبر 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.9.0-alpha04
. يتضمّن الإصدار 2.9.0-alpha04 عمليات الربط هذه.
Kotlin Multiplatform
- تم الآن ضبط وحدة
lifecycle-viewmodel-savedstate
لتكون متوافقة مع KMP استعدادًا لإتاحة واجهات برمجة التطبيقات مثلSavedStateHandle
في مجموعة المصادر الشائعة في إصدار مستقبلي. (I503ed وI48764 وb/334076622)
الإصدار 2.9.0-alpha03
18 أيلول (سبتمبر) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.9.0-alpha03
. يتضمّن الإصدار 2.9.0-alpha03 هذه المساهمات.
إصلاح الأخطاء
- من رحلة الإصدار
2.8.6
: أدّى خطأNullSafeMutableLiveData
Lint إلى تحسين التوافق مع عمليات البث الذكية، ما تجنّب النتائج الموجبة الخاطئة. (85fed6، b/181042665)
تعديلات على التبعيات
- من Lifecycle
2.8.6
: يعتمد Lifecycle Runtime Compose الآن على Compose Runtime1.7.1
- تعتمد بيئة التشغيل في Lifecycle الآن على ProfileInstaller
1.4.0
.
الإصدار 2.9.0-alpha02
4 أيلول (سبتمبر) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.9.0-alpha02
. يتضمّن الإصدار 2.9.0-alpha02 عمليات الربط هذه.
إصلاح الأخطاء
- من رحلة المستخدم
2.8.5
: عدِّل قواعدandroidx.lifecycle.ReportFragment
ProGuard للسماح بالتشويه . (ff898e1)
المساهمة الخارجية
- نقل
androidx.compose.ui.platform.LocalLifecycleOwner
إلى مجموعة المصادر المشتركة (KMP) نشكر "إيفان ماتوف" من JetBrains على مساهمته. (8cd5d03) - من Lifecycle
2.8.5
: يتوافق الآن المفوّض لإضافة SavedStateHandle.saveable مع القيم التي يمكن أن تكون فارغة. نشكر Roman Kalukiewicz على مساهمته. (0d78ea6)
الإصدار 2.9.0-alpha01
7 آب (أغسطس) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.9.0-alpha01
. يتضمّن الإصدار 2.9.0-alpha01 عمليات الربط هذه.
Kotlin Multiplatform
- أصبح جهاز
lifecycle-testing
متوافقًا مع KMP. (Iea41e) - إتاحة استخدام
linuxArm64
kotlin multiplatform target (I139d3، b/338268719)
الميزات الجديدة
- يتوفّر عنصر جديد من
androidx.lifecycle:lifecycle-viewmodel-testing
KMP يقدّم فئةViewModelScenario
لاختبار ViewModels بشكل منفصل، مع إتاحةonCleared
(جميع المنصات) وSavedStateHandle
(Android فقط). (337f68d وc9b3409 و9799a95c وb/264602919) - أصبح إنشاء
ViewModel
باستخدامViewModelProvider
آمنًا في مؤشر التسلسل، وتمّت إزالة التعليقات التوضيحية@MainThread
. (Ifd978، b/237006831)
تغييرات واجهة برمجة التطبيقات
- أضِف دالة المصنع
CreationExtras.Key()
لتسهيل إنشاء عناصرCreationExtras.Key
مجهولة الهوية. (I970ee) - تتضمّن
CreationExtras
الآن عمليات تحميل زائدة لعامل التشغيل المشابه للخريطة لتفعيل التلاعب بالمحتوى في Kotlin. يسمح هذا الإجراء باستخدامin
و+=
و+
معCreationExtras
. (Ib4353) - تطبّق
CreationExtras
الآن طُرقequals
وhashCode
وtoString
. (Ib4353) - يتوفّر
NewInstanceFactory
الآن على أجهزة الكمبيوتر المكتبي وأجهزة Android المستهدَفة لنظام التشغيل JVM. (d3d0892) - سمة الإضافة المضمّنة لعرض التطبيق الأساسي بأمان في الإصدار 2.0 من لغة Kotlin (I39df2)
إصلاح الأخطاء
- تمت إزالة التحديد اليدوي للوصول إلى واجهات برمجة تطبيقات المنصة الجديدة لأنّ ذلك يحدث تلقائيًا من خلال وضع نماذج لواجهات برمجة التطبيقات عند استخدام R8 مع AGP 7.3 أو إصدار أحدث (مثل R8 الإصدار 3.3) ولجميع الإصدارات عند استخدام AGP 8.1 أو إصدار أحدث (مثل D8 الإصدار 8.1). ننصح العملاء الذين لا يستخدمون AGP بالتحديث إلى الإصدار 8.1 من D8 أو إصدار أحدث. يُرجى مراجعة هذه المقالة للاطّلاع على مزيد من التفاصيل. (If6b4c، b/345472586)
الإصدار 2.8
الإصدار 2.8.7
30 تشرين الأول (أكتوبر) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.7
. يتضمّن الإصدار 2.8.7 هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- أصبح
androidx.compose.ui.platform.LocalLifecycleOwner
متاحًا الآن في مجموعة المصادر المشتركة (KMP). (6a3f5b3) lifecycle-runtime-compose
: تمّت إزالة العناصرdesktop
وإضافة العناصر-jvmStubs
و-linuxx64Stubs
. لا يُقصد استخدام أيّ من هذه الاستهدافات، بل هي عناصر نائبة لمساعدة جهود Jetbrains Compose. (6a3f5b3)
الإصدار 2.8.6
18 أيلول (سبتمبر) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.6
. يحتوي الإصدار 2.8.6 على عمليات الربط هذه.
إصلاح الأخطاء
- أدّى خطأ Lint في
NullSafeMutableLiveData
إلى تحسين التوافق مع عمليات البث الذكية، ما تجنّب حدوث حالات موجبة خاطئة. (85fed6، b/181042665)
تعديلات على التبعيات
- يعتمد Lifecycle Runtime Compose الآن على Compose Runtime
1.7.1
.
الإصدار 2.8.5
4 أيلول (سبتمبر) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.5
. يحتوي الإصدار 2.8.5 على عمليات الربط هذه.
إصلاح الأخطاء
- عدِّل
androidx.lifecycle.ReportFragment
قواعد ProGuard للسماح بالتشويه . (ff898e1)
المساهمة الخارجية
- يتوافق الآن مفوّض إضافة
SavedStateHandle.saveable
مع القيم التي يمكن أن تكون فارغة. نشكر "رومان كالوكيفيتش" على مساهمته. (0d78ea6)
الإصدار 2.8.4
24 تموز (يوليو) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.4
. يحتوي الإصدار 2.8.4 على عمليات الربط هذه.
إصلاح الأخطاء
- يعالج
LiveData.asFlow()
الآن بشكل صحيح الحالات التي يتم فيها إكمال العملية التي تم إرجاعها على الفور بعد تلقّي قيمة تم ضبطها مسبقًا علىLiveData
(على سبيل المثال، عند استخدامtake(1)
). (I9c566) - أصبح اكتمال
Lifecycle*Effect
الآن لا يتغيّر (أي إذا تمّ استدعاءonStopOrDispose
بسبب إيقاف Lifecycle، لن يتمّ استدعاؤه مرّة ثانية عند التخلص منه ما لم يعود Lifecycle إلىSTARTED
مرّة أخرى). (I5f607، b/352364595)
الإصدار 2.8.3
1 يوليو 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.3
. يحتوي الإصدار 2.8.3 على عمليات الربط هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة في التوافق مع الإصدارات القديمة من Lifecycle 2.8 مع Compose 1.6.0 والإصدارات الأقدم عند استخدام ميزة تصغير الرموز البرمجية. (aosp/3133056، b/346808608)
الإصدار 2.8.2
12 يونيو 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.2
. يتضمّن الإصدار 2.8.2 عمليات الربط هذه.
إصلاح الأخطاء
- تم إصلاح
CompositionLocal LocalLifecycleOwner not present
أخطاء عند استخدام Lifecycle 2.8.X مع Compose 1.6.X أو إصدار سابق. يمكنك الآن استخدام Lifecycle 2.8.2 مع أي إصدار من Compose بدون الحاجة إلى أي حلول بديلة. (aosp/3105647، b/336842920) - لن يتعطّل تطبيق
ViewModelProvider
عند خلط الإصدارات السابقة من مكتباتcompileOnly
Lifecycle مع الإصدارات 2.8 والإصدارات الأحدث، ما يؤدي إلى حلّ المشاكل في المكتبات مثل LeakCanary. (I80383، b/341792251)
الإصدار 2.8.1
29 أيار (مايو) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.1
. يتضمّن الإصدار 2.8.1 عمليات الربط هذه.
إصلاح الأخطاء
- أصبح لدى
lifecycle-viewmodel-compose
الآن اعتمادية شائعة علىcompose-runtime
فقط، ما أدى إلى إزالة اعتماديته الشائعة علىcompose-ui
. يحتفظ العنصر في Android بقيمةcompose-ui
للتوافق. (aosp/3079334، b/339562627) - إنّ عملية دمج
saveable
فيViewModel
باستخدام جهات تمثيل المواقع تستخدم الآن اسم الفئة كجزء من المفتاح الذي يتم إنشاؤه تلقائيًا، ما يتجنّب حدوث تعارضات إذا كانت فئات متعدّدة تستخدمSavedStateHandle
نفسه. (aosp/3063463)
الإصدار 2.8.0
14 أيار (مايو) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.0
. يتضمّن الإصدار 2.8.0 عمليات الربط هذه.
التغييرات المهمة منذ الإصدار 2.7.0
- تم نقل
LocalLifecycleOwner
من واجهة مستخدم Compose إلىlifecycle-runtime-compose
حتى يمكن استخدام واجهات برمجة التطبيقات المساعِدة المستندة إلى Compose خارج واجهة مستخدم Compose. - يحتوي العنصر
lifecycle-runtime-compose
الآن على واجهات برمجة التطبيقاتdropUnlessResumed
وdropUnlessStarted
اللتين تتيحان لك إسقاط النقرات أو الأحداث الأخرى التي تحدث حتى بعد انخفاضLifecycleOwner
إلى ما دونLifecycle.State
المحدّد. على سبيل المثال، يمكن استخدام هذا مع Navigation Compose لتجنُّب معالجة أحداث النقرات بعد بدء الانتقال إلى شاشة أخرى:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
أصبحت
ViewModel.viewModelScope
الآن مَعلمة أسلوب وضع تصميم يمكن إلغاؤها، ما يتيح لك إدخال أداة الإرسال وSupervisorJob()
الخاصة بك أو إلغاء الإعداد التلقائي باستخدامbackgroundScope
المتاحة فيrunTest
. (I2817c، b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
تمت إعادة كتابة
ViewModel
بلغة Kotlin، وهي تستخدم الآنAutoClosable
بدلاً منCloseable
. تتيح الآن إضافة عناصرAutoCloseable
باستخدامkey
تتيح استرجاعها من خلالgetCloseable()
.أصبح الآن استدعاء
LifecycleStartEffect
وLifecycleResumeEffect
بدون مفتاح خطأ، وذلك وفقًا للاصطلاح نفسه المستخدَم في واجهة برمجة التطبيقاتDisposableEffect
التي تعكسها واجهات برمجة التطبيقات هذه.تم إيقاف
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
نهائيًا واستبداله بـLiveData.toPublisher(lifecycleOwner)
.تم نقل إضافات
lifecycle-livedata-core-ktx
kotlin إلى وحدةlifecycle-livedata-core
.تمّت إعادة صياغة
NullSafeMutableLiveData
لتجنُّب العديد من النتائج الموجبة الخاطئة.
توافق Lifecycle Kotlin مع الأنظمة الأساسية المتعددة
يتم الآن شحن واجهات برمجة التطبيقات الأساسية لدورة الحياة في Lifecycle
وLifecycleOwner
وLifecycleObserver
وLifecycle.State
وLifecycle.Event
وLifecycleRegistry
في عناصر متوافقة مع Kotlin Multiplatform.
العناصر المتأثّرة:
- تنقل
lifecycle-common
معظم واجهات برمجة التطبيقات إلىcommon
وتتيح استخدام jvm وiOS بالإضافة إلى Android. - تنقل
lifecycle-runtime
معظم واجهات برمجة التطبيقات إلىcommon
وتتيح استخدام jvm وiOS بالإضافة إلى Android. - أصبحت
lifecycle-runtime-ktx
فارغة الآن، وتم نقل جميع واجهات برمجة التطبيقات إلىlifecycle-runtime
. - تنقل
lifecycle-runtime-compose
جميع واجهات برمجة التطبيقات إلىcommon
وتُصدِر عنصرًا على Android، ما يتطابق مع التوافق مع الأنظمة الأساسية المتعددة فيandroidx.compose
.
توافق ViewModel Kotlin مع الأنظمة الأساسية المتعددة
يتم الآن شحن العنصر lifecycle-viewmodel
وواجهات برمجة التطبيقات مثل ViewModel
وViewModelStore
وViewModelStoreOwner
وViewModelProvider
في عناصر متوافقة مع Kotlin Multiplatform.
لاستيعاب هذا التغيير، أصبحت الطرق التي تأخذ java.lang.Class<T>
، مثل تلك الواردة في ViewModelProvider
، تتضمّن الآن طريقة مكافئة تأخذ kotlin.reflect.KClass<T>
.
تم الحفاظ على التوافق الثنائي على Android، ولكن هناك بعض التغييرات البارزة عند مقارنة واجهة برمجة تطبيقات Android بواجهة برمجة التطبيقات الشائعة:
- يتمّ الآن إنشاء مثيل
ViewModelProvider
من خلال طرقViewModelProvider.create()
بدلاً من استدعاء طريقة وضع التصميم مباشرةً. - لا يتوفّر كل من
ViewModelProvider.NewInstanceFactory
وViewModelProvider.AndroidViewModelFactory
إلا على أجهزة Android.- ننصحك بتوسيع نطاق "العوامل المخصّصة" من
ViewModelProvider.Factory
واستخدام طريقةcreate
التي تأخذCreationExtras
أو استخدامviewModelFactory
Kotlin DSL.
- ننصحك بتوسيع نطاق "العوامل المخصّصة" من
- سيؤدي استخدام
ViewModelProvider
بدون مصنع مخصّص على منصات غير حزمة Java Virtual Machine إلى حدوثUnsupportedOperationException
. على منصات JVM، يتم الحفاظ على التوافق باستخدام أداة إنشاء ViewModel بدون وسيطات في حال عدم توفير مصنع مخصّص. - سيتم استخدام
EmptyCoroutineContext
بدلاً منDispatchers.Main
في المنصات التي لا يتوفّر فيهاDispatchers.Main
(مثلviewModelScope
Linux).
العناصر المتأثّرة:
- تنقل
lifecycle-viewmodel
معظم واجهات برمجة التطبيقات إلىcommon
وتتيح استخدام jvm وiOS بالإضافة إلى Android. - أصبحت
lifecycle-viewmodel-ktx
فارغة الآن، وتم نقل جميع واجهات برمجة التطبيقات إلىlifecycle-viewmodel
. - تنقل
lifecycle-viewmodel-compose
جميع واجهات برمجة التطبيقات إلىcommon
وتُصدِر عنصرًا على Android، ما يتطابق مع التوافق مع الأنظمة الأساسية المتعددة فيandroidx.compose
.
التغييرات في السلوك
- ستُعرِض الآن دالة
InitializerViewModelFactory
(بما في ذلك دالةviewModelFactory
لإنشاء التقارير) خطأIllegalArgumentException
إذا سبق أن تمّت إضافةinitializer
يتضمّنclazz: KClass<VM : ViewModel>
نفسه. (Ic3a36)
المشاكل المعروفة
- يتطلب تطبيق
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
بشكلٍ صحيح. ويتم الآن تجميعها في حزمة AAR بتنسيقlifecycle-runtime
. (aosp/3038274، b/322382422) - تم إصلاح تغيير غير مقصود في الترتيب في كيفية محو نُسخ
AutoCloseable
المرتبطة بـ ViewModel، وتم استعادة الترتيب السابقaddCloseable(String, AutoCloseable)
ثمaddClosable(AutoCloseable)
ثمonCleared()
. (aosp/3041632) - تحسين السلوك التلقائي لإنشاء
viewModelScope
في بيئات سطح المكتب الأصلية وJVM (aosp/3039221)
المساهمة الخارجية
- نشكر "فيكتور كروپ" على تحسين عملية التحقّق من سلسلة المحادثات الرئيسية على JVM Desktop. (aosp/3037116)
الإصدار 2.8.0-beta01
17 نيسان (أبريل) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.0-beta01
. يتضمّن الإصدار 2.8.0-beta01 عمليات الربط هذه.
الميزات الجديدة
- أصبح العنصر
lifecycle-runtime-compose
متوافقًا الآن مع Kotlin Multiplatform، ما يؤدي إلى نقل رمزه إلىcommon
وطرح عنصر Android، ما يتطابق مع توافقandroidx.compose
مع الأنظمة الأساسية المتعددة. (If7a71، I4f4a0، b/331769623)
الإصدار 2.8.0-alpha04
3 نيسان (أبريل) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.0-alpha04
. يتضمّن الإصدار 2.8.0-alpha04 عمليات الربط هذه.
الميزات الجديدة
- أصبح العنصر
lifecycle-viewmodel-compose
متوافقًا الآن مع Kotlin Multiplatform، ما يؤدي إلى نقل رمزه إلىcommon
وطرح عنصر Android، ما يتطابق مع توافقandroidx.compose
مع الأنظمة الأساسية المتعددة. لاستيعاب هذا التغيير، تقبل طريقةviewModel
القابلة للتجميع الآنKClass
بالإضافة إلىjava.lang.Class
. (b/330323282)
إصلاح الأخطاء
- تمّت إعادة صياغة
NullSafeMutableLiveData
لتجنّب العديد من النتائج الموجبة الخاطئة. (I2d8c1 وIafb18 وI03463 وI7ecef)
تعديل التبعيات
- يعتمد العنصر
lifecycle-viewmodel-compose
الآن على Compose 1.6.0. - تعتمد ميزة "رحلة المستخدِم" الآن على أداة تثبيت الملفات الشخصية 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 مع أنظمة التشغيل المتعددة
يتم الآن شحن العنصر lifecycle-viewmodel
وواجهات برمجة التطبيقات مثل ViewModel
وViewModelStore
وViewModelStoreOwner
وViewModelProvider
في عناصر متوافقة مع Kotlin Multiplatform. (b/214568825)
لاستيعاب هذا التغيير، أصبحت الطرق التي تأخذ java.lang.Class<T>
، مثل تلك الواردة في ViewModelProvider
، تتضمّن الآن طريقة مكافئة تأخذ kotlin.reflect.KClass<T>
.
تم الحفاظ على التوافق الثنائي على Android، ولكن هناك بعض التغييرات البارزة عند مقارنة واجهة برمجة تطبيقات Android بواجهة برمجة التطبيقات الشائعة:
- يتمّ الآن إنشاء مثيل
ViewModelProvider
من خلال طرقViewModelProvider.create()
بدلاً من استدعاء طريقة وضع التصميم مباشرةً. - لا يتوفّر كل من
ViewModelProvider.NewInstanceFactory
وViewModelProvider.AndroidViewModelFactory
إلا على أجهزة Android.- ننصحك بتوسيع نطاق "العوامل المخصّصة" من
ViewModelProvider.Factory
واستخدام طريقةcreate
التي تأخذCreationExtras
أو استخدامviewModelFactory
Kotlin DSL.
- ننصحك بتوسيع نطاق "العوامل المخصّصة" من
- سيؤدي استخدام
ViewModelProvider
بدون مصنع مخصّص على منصات غير حزمة Java Virtual Machine إلى حدوثUnsupportedOperationException
. على منصات JVM، يتم الحفاظ على التوافق باستخدام أداة إنشاء ViewModel بدون وسيطات في حال عدم توفير مصنع مخصّص. - سيتم استخدام
EmptyCoroutineContext
بدلاً منDispatchers.Main
في المنصات التي لا يتوفّر فيهاDispatchers.Main
(مثلviewModelScope
Linux).
التغييرات في السلوك
- ستُعرِض الآن دالة
InitializerViewModelFactory
(بما في ذلك دالةviewModelFactory
لإنشاء التقارير) خطأIllegalArgumentException
إذا سبق أن تمّت إضافةinitializer
يتضمّنclazz: KClass<VM : ViewModel>
نفسه. (Ic3a36)
إصلاح الأخطاء
- يعالج
ViewModel.getCloseable
الآن المفاتيح المكرّرة: إذا كانkey
مرتبطًا بموردAutoCloseable
، سيتم استبدال المورد القديم وإغلاقه على الفور. (Ibeb67) - أصبح الوصول إلى
viewModelScope
فيViewModel
آمنًا الآن في مؤشرات الترابط. (If4766، b/322407038)
المساهمة الخارجية
- تم نقل
LocalLifecycleOwner
من واجهة مستخدم Compose إلى lifecycle-runtime-compose حتى يمكن استخدام واجهات برمجة التطبيقات المساعِدة المستندة إلى Compose خارج واجهة مستخدم Compose. نشكر "جاك وارتون" على مساهمته. (I6c41b، b/328263448)
الإصدار 2.8.0-alpha02
21 شباط (فبراير) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.0-alpha02
. يحتوي الإصدار 2.8.0-alpha02 على هذه المراجعات.
الميزات الجديدة
- تمّت إضافة واجهات برمجة التطبيقات
dropUnlessResumed
وdropUnlessStarted
اللتين تتيحان لك إسقاط النقرات أو الأحداث الأخرى التي تحدث حتى بعد انخفاضLifecycleOwner
إلى ما دونLifecycle.State
المحدّد. على سبيل المثال، يمكن استخدام هذا الإجراء مع Navigation Compose لتجنُّب معالجة أحداث النقر بعد بدء الانتقال إلى شاشة أخرى:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
(Icba83، b/317230685)
إحالات ناجحة في Kotlin
- تم الآن كتابة
ViewModel
بلغة Kotlin (I16f26، b/214568825) - تم نقل إضافات
lifecycle-viewmodel-ktx
kotlin إلى وحدة دورة الحياة الأساسية. (Id787b، b/274800183) - تم نقل إضافات
lifecycle-runtime-ktx
kotlin إلى وحدة دورة الحياة الأساسية. (Ic3686، b/274800183) - تم نقل إضافات
lifecycle-livedata-core-ktx
kotlin إلى وحدة دورة الحياة الأساسية. (I54a3d، b/274800183)
توافق لغة Kotlin مع أنظمة التشغيل المتعددة
- يتم الآن شحن واجهات برمجة التطبيقات الأساسية لدورة الحياة في
Lifecycle
وLifecycleOwner
وLifecycleObserver
وLifecycle.State
وLifecycle.Event
وLifecycleRegistry
في عناصر متوافقة مع Kotlin Multiplatform. (b/317249252)
تغييرات واجهة برمجة التطبيقات
- أصبح الآن استدعاء
LifecycleStartEffect
وLifecycleResumeEffect
بدون مفتاح خطأ، وذلك باتّباع الاصطلاح نفسه المستخدَم في واجهة برمجة التطبيقاتDisposableEffect
التي تعكسها واجهات برمجة التطبيقات هذه. (Ib0e0c، b/323518079) - يستخدم
ViewModel
الآنAutoCloseable
بدلاً منCloseable
. هذا تغيير متوافق مع الإصدارات القديمة. (I27f8e، b/214568825) - تم إيقاف
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
نهائيًا واستبداله بـLiveData.toPublisher(lifecycleOwner)
. (Iabe29، b/262623005)
المساهمة الخارجية
- نشكر "إيفان ماتوف" من Jetbrains على مساعدتنا في نقل Lifecycle إلى Kotlin Multiplatform. (aosp/2926690، I0c5ac، If445d)
الإصدار 2.8.0-alpha01
24 كانون الثاني (يناير) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.8.0-alpha01
. يحتوي الإصدار 2.8.0-alpha01 على هذه المراجعات.
الميزات الجديدة
- تتيح
ViewModel
الآن إضافة عناصرCloseable
باستخدامkey
تتيح استرجاعها من خلالgetCloseable()
. (I3cf63)
الإصدار 2.7
الإصدار 2.7.0
10 كانون الثاني (يناير) 2024
تم إصدار androidx.lifecycle:lifecycle-*:2.7.0
. يحتوي الإصدار 2.7.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 2.6.0
- يتضمّن
TestLifecycleOwner
الآن دالة تعليقsetCurrentState()
تضمن إكمال تغيير الحالة وجميع عمليات ردّ الاتصالLifecycleObserver
قبل العودة. يُرجى العلم أنّه على عكس ضبط السمةcurrentState
مباشرةً، لا يستخدم هذا الإجراءrunBlocking
، ما يجعله آمنًا للاستخدام ضمن دالة معالجة متزامنة مثل تلك التي يوفّرهاrunTest
. - تعكس الآن الإضافات
LiveData
لدالةَيmap
وswitchMap
سلوك دالةdistinctUntilChanged
. إذا كانتLiveData
تحتوي على مجموعةvalue
، سيتم استدعاء دالةmap
/switchMap
على الفور لتعبئةvalue
للعنصرLiveData
الذي تم إرجاعه. يضمن ذلك ضبط القيمة الأولية كجزء من التركيبة الأولى (عند استخدامها معobserveAsState()
)، ولكنّه لا يغيّر سلوك المراقبة، إذ لن تسري قيم التعديلات من المصدرLiveData
إلا بعد بدء مراقبةLiveData
. - يعالج هذا الإصدار مشكلة عدم استعادة
SavedStateHandle
بشكلٍ صحيح لفئاتParcelable
المخصّصة بعد إنهاء العملية وإعادة إنشائها. بسبب فقدان إطار عمل Android لمعلومات النوع، تتطلّب صفائف Parcelables المخصّصة عملًا إضافيًا (إنشاء صفيف مكتوب يدويًا من النوع الصحيح)، وتشير الآن المستندات حولget
وgetLiveData
وgetStateFlow
تحديدًا إلى هذا القيد. - تمّت إزالة قواعد الاحتفاظ بتطبيق Proguard المرتبطة بـ
LifecycleObserver
. وهذا يعني أنّ الرمز المحمي الذي يريد استخدام واجهات برمجة التطبيقات من خلال ميزة "العرض المرجعي" (مثل استخدام التعليق التوضيحي@OnLifecycleEvent
الذي تم إيقافه نهائيًا منذ فترة طويلة) سيحتاج إلى تقديم قواعد الاحتفاظ الخاصة به لحالة الاستخدام المحدّدة.
إمكانية رصد أحداث رحلة المستخدِم
- كبديل لاستخدام
LifecycleEventObserver
، يمكنك الآن مراقبةFlow
منLifecycle.Event
من خلال طريقة إضافةLifecycle.asFlow()
. - يمكن لمستخدمي Jetpack Compose الآن استخدام
LifecycleEventEffect
لتشغيل التأثيرات الجانبية في Compose استنادًا إلىLifecycle.Event
.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- يمكن لمستخدمي Jetpack Compose استخدام
LifecycleStartEffect
وLifecycleResumeEffect
للتعامل مع أزواج من الأحداث، من بدء إلى إيقاف واستئناف إلى إيقاف مؤقت على التوالي. تتطابق واجهة برمجة التطبيقات هذه مع الواجهة المتوفّرة فيDisposableEffect
وهي مناسبة للحالات التي يجب فيها عكس التغيير الذي يتم إجراؤه عند ارتفاع الحالة عند الرجوع إلى الأسفل.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
اطّلِع على تشغيل الرمز البرمجي عند حدوث أحداث دورة الحياة للحصول على مزيد من المعلومات.
رصد حالة رحلة المستخدِم
- يمكن الآن رصد
Lifecycle.State
الحالي من خلال السمةLifecycle.currentStateFlow
التي تعرضStateFlow
حيث يكونvalue
هوLifecycle.State
الحالي. - يمكن لمستخدمي Jetpack Compose استخدام إضافة
Lifecycle.currentStateAsState()
لعرضLifecycle.State
مباشرةً كعنصر ComposeState
. هذا الإجراء مكافئ (وبديل أقصر)lifecycle.currentStateFlow.collectAsState()
.
اطّلِع على جمع حالة رحلة المستخدِم باستخدام مسارات الإحالة الناجحة للحصول على مزيد من المعلومات.
الإصدار 2.7.0-rc02
13 كانون الأول (ديسمبر) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.7.0-rc02
. يحتوي الإصدار 2.7.0-rc02 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة عدم استعادة
SavedStateHandle
بشكل صحيح لفئاتParcelable
المخصّصة بعد إنهاء العملية وإعادة إنشائها. بسبب فقدان إطار عمل Android لمعلومات النوع، تتطلّب صفائف Parcelable المخصّصة عملًا إضافيًا (إنشاء صفيف مكتوب يدويًا بالنوع الصحيح)، وتشير الآن المستندات حولget
وgetLiveData
وgetStateFlow
تحديدًا إلى هذا القيد. (I0b55a)
الإصدار 2.7.0-rc01
15 تشرين الثاني (نوفمبر) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.7.0-rc01
. يحتوي الإصدار 2.7.0-rc01 على هذه المراجعات.
إصلاح الأخطاء
- يمكن الآن لـ
LifecycleStartEffect
وLifecycleResumeEffect
التخلص من كتلة التأثير وإعادة إنشائها بشكل صحيح في حال تغييرLifecycleOwner
. (Ia25c6)
الإصدار 2.7.0-beta01
1 تشرين الثاني (نوفمبر) 2023
تم طرح الإصدار androidx.lifecycle:lifecycle-*:2.7.0-beta01
بدون أي تغييرات. يحتوي الإصدار 2.7.0-beta01 على هذه المراجعات.
- إصدار تجريبي تم تعديله، ما مِن تغييرات رئيسية في هذا الإصدار.
الإصدار 2.7.0-alpha03
18 تشرين الأول (أكتوبر) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.7.0-alpha03
. يحتوي الإصدار 2.7.0-alpha03 على هذه المراجعات.
الميزات الجديدة
- يحتوي
lifecycle-runtime-testing
الآن على عملية تحقّق جديدة من Lint لتجنُّب ضبطLifecycle.State
لـTestLifecycleOwner
باستخدام حقلcurrentState
عندما تكون داخل دالة معالجة متزامنة. يقترح فحص Lint الآن تعليقsetCurrentState
الذي يسمح بضبطLifecycle.State
بدون حظر. (Icf728، b/297880630)
إصلاح الأخطاء
- تم إصلاح مشكلة في
LiveData.switchMap
حيث يؤدي عرض مثيلLiveData
نفسه في كلّ من الطلب الأوّلي والطلب اللاحق إلى منع إضافة مثيلLiveData
كمصدر. (Ibedcba7)
الإصدار 2.7.0-alpha02
6 أيلول (سبتمبر) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.7.0-alpha02
. يحتوي الإصدار 2.7.0-alpha02 على هذه المراجعات.
الميزات الجديدة
- تتضمّن
TestLifecycleOwner
الآن الدالة المعلّقةsetCurrentState()
لمنح المستخدمين خيار استخدامTestLifecycleOwner
من داخل دالة معالجة متزامنة مثل تلك التي يوفّرهاrunTest
. (I329de، b/259344129)
تغييرات واجهة برمجة التطبيقات
- تم نقل جميع الملفات من وحدات
lifecycle-livedata-ktx
إلى الوحدة الرئيسيةlifecycle-livedata
. (I10c6f، b/274800183)
التغييرات في السلوك
- تضبط الإضافات
LiveData.map()
وLiveData.switchMap()
الآنvalue
للعنصرLiveData
الذي تم إرجاعه إذا تم ضبط قيمة على العنصرLiveData
السابق، ما يضمن استخدام LiveData الناتج في Jetpack Compose بالحالة الصحيحة في التركيب الأولي. (I91d2b، b/269479952) - يُغلق الآن
addCloseable()
فيViewModel
Closeable
على الفور إذا تلقّىViewModel
مكالمة إلىonCleared()
. (I4712e، b/280294730)
إصلاح الأخطاء
- من دورة الحياة
2.6.2
: تم إصلاح مشكلة تعذُّر استعادةSavedStateHandle
بشكل صحيح بعد انتهاء العملية إذا تم استعادة الحالة، وتم استدعاءsave()
بدون حفظ الحالة في العنصر الرئيسيSavedStateRegistry
، ثم تم استعادة الحالة مرة أخرى. يُصلح ذلك التفاعل بينrememberSaveable
وNavHost
في ميزة "إنشاء مسار التنقّل". (aosp/2729289)
الإصدار 2.7.0-alpha01
26 تموز (يوليو) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.7.0-alpha01
. يحتوي الإصدار 2.7.0-alpha01 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- يمكن الآن رصد
Lifecycle.State
من خلالLifecycle.currentStateFlow
، ما يؤدي إلى عرضStateFlow
حيث يكونvalue
هوLifecycle.State
الحالي. (Ib212d، b/209684871) - يمكن الآن رصد
Lifecycle.Event
كFlow
باستخدامLifecycle.asFlow().
(If2c0f، b/176311030). - تمت إضافة واجهة برمجة التطبيقات
LifecycleResumeEffect
لتشغيلSideEffect
Compose استنادًا إلى كلّ منLifecycle.Event.ON_RESUME
وLifecycle.Event.ON_PAUSE
callback events. (I60386، b/235529345) - تمت إضافة واجهة برمجة التطبيقات
LifecycleStartEffect
لتشغيلSideEffect
Compose استنادًا إلى طلبات إعادة الاتصال بأحداثLifecycle.Event.ON_START
وLifecycle.Event.ON_STOP
. (I5a8d1، b/235529345) - تمت إضافة
LifecycleEventEffect
API لتشغيلSideEffect
Compose استنادًا إلىLifecycle.Event
. (Ic9794، b/235529345) - تمّت إضافة
Lifecycle.collectAsState()
لعرضLifecycle.State
مباشرةً كإنشاءState
. هذا الإجراء مكافئ (وبديل أقصر)lifecycle.currentStateFlow.collectAsState()
. (I11015، b/235529345)
إصلاح الأخطاء
- تضبط إضافة
LiveData.distinctUntilChanged()
الآنvalue
للعنصرLiveData
الذي تم إرجاعه إذا تم ضبط قيمة على العنصرLiveData
السابق. لا يؤدي ذلك إلى تغيير سلوك المراقبة، إذ ستظل القيم المعدّلة من المصدرLiveData
لا تنطبق إلا بعد بدء مراقبةLiveData
المعروضة منdistinctUntilChanged()
. (Ib482f) - تمّت إزالة قواعد الاحتفاظ بتطبيق Proguard المرتبطة بـ
LifecycleObserver
. وهذا يعني أنّ الرمز المحمي الذي يريد استخدام واجهات برمجة التطبيقات من خلال ميزة "العرض المرجعي" يجب أن يقدّم قواعد الاحتفاظ الخاصة به لحالة الاستخدام المحدّدة. (Ia12fd)
الإصدار 2.6
الإصدار 2.6.2
6 أيلول (سبتمبر) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.6.2
. يحتوي الإصدار 2.6.2 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة عدم استعادة
SavedStateHandle
بشكل صحيح بعد انتهاء العملية إذا تم استعادة الحالة، وتم استدعاءsave()
بدون حفظ الحالة في العنصر الرئيسيSavedStateRegistry
، ثم تم استعادة الحالة مرة أخرى. يُصلح ذلك التفاعل بينrememberSaveable
وNavHost
في ميزة "إنشاء مسار التنقّل". (aosp/2729289)
الإصدار 2.6.1
22 آذار (مارس) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.6.1
. يحتوي الإصدار 2.6.1 على هذه المراجعات.
تعديلات على التبعيات
- يعتمد
lifecycle-viewmodel-savedstate
الآن على SavedState1.2.1
. (cd7251) - يعتمد Lifecycle الآن على ProfileInstaller
1.3.0
. (f9d30b)
الإصدار 2.6.0
8 آذار (مارس) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.6.0
. يحتوي الإصدار 2.6.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 2.5.0
- تتضمّن
LiveData
الآن سمةisInitialized
جديدة تشير إلى ما إذا تم ضبط قيمة صريحة علىLiveData
، ما يتيح لك التمييز بينliveData.value
التي تعرضnull
لأنّه لم يتم ضبط أي قيمة أو قيمةnull
صريحة. - يتضمّن
MediatorLiveData
الآن مُنشئًا لضبط قيمة أولية. - تمت إضافة إضافة جديدة على
StateFlow
وFlow
منcollectAsStateWithLifecycle()
التي تجمع البيانات من عمليات التدفق وتعرض أحدث قيمتها على أنّها حالة الإنشاء بطريقة تراعي مراحل النشاط. - تم إيقاف طرق
Lifecycle.launchWhenX
وLifecycle.whenX
نهائيًا لأنّ استخدام أداة توزيع مؤقتة يمكن أن يؤدي إلى إهدار الموارد في بعض الحالات. ننصح باستخدامLifecycle.repeatOnLifecycle
. لمزيد من المعلومات عن تعليق العمل لمرة واحدة، يُرجى الاطّلاع على هذا التفسير لمعرفة سبب خطورة ذلك بطبيعته. - تحويل إلى Kotlin: تم تحويل عدد كبير من فئات Lifecycle إلى Kotlin. تظل جميع الفئات المحوَّلة متوافقة مع الإصدارات السابقة. تحتوي الفئات التالية على تغييرات غير متوافقة مع المصدر للفئات المكتوبة بلغة Kotlin:
ViewTreeLifecycleOwner
وLiveDataReactiveStreams
وHasDefaultViewModelProviderFactory
وViewTreeViewModelStoreOwner
وTransformations
وViewModelStoreOwner
وLifecycleOwner
.
يقدّم الجدول أدناه الإحالات الناجحة للمصدر للإصدار الجديد من رحلة المستخدِم.
Lifecycle 2.5 | Lifecycle 2.5 (KTX) | Lifecycle 2.6 |
---|---|---|
Transformations.switchMap(liveData) {...} |
liveData.switchMap {...} |
liveData.switchMap {...} |
Transformations.map(liveData) {...} |
liveData.map {...} |
liveData.map {...} |
Transformations.distinctUntilChanged(liveData) {...} |
liveData.distinctUntilChanged{...} |
liveData.distinctUntilChanged{...} |
LiveDataReactiveStreams.fromPublisher(publisher) |
publisher.toLiveData() |
publisher.toLiveData() |
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) |
liveData.toPublisher(lifecycleOwner) |
liveData.toPublisher(lifecycleOwner) |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override val defaultViewModelProviderFactory = factory |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override val defaultViewModelProviderCreationExtras = extras |
ViewTreeLifecycleOwner.set(view, owner) |
ViewTreeLifecycleOwner.set(view, owner) |
view.setViewTreeLifecycleOwner(owner) |
ViewTreeLifecycleOwner.get(view) |
view.findViewTreeLifecycleOwner() |
view.findViewTreeLifecycleOwner() |
override fun getViewModelStore(): ViewModelStore = store |
override fun getViewModelStore(): ViewModelStore = store |
override val viewModelStore: ViewModelStore = store |
override fun getLifecycle(): Lifecycle = registry |
override fun getLifecycle(): Lifecycle = registry |
override val lifecycle: Lifecycle get() = registry |
- تتطابق الآن قيمة عدم تحديد الهوية لطريقة
onChanged
فيObserver
التي تم إنشاؤها في Kotlin مع قيمة عدم تحديد الهوية للنوع العام. إذا كنت تريد أن يقبلObserver.onChanged()
نوعًا قابلاً للتغيير، يجب إنشاء مثيل لـObserver
باستخدام نوع قابل للتغيير. - تم أيضًا تحويل هذه الفئات إلى لغة Kotlin، ولكنها تظل متوافقة مع المصدر:
DefaultLifecycleObserver
وLifecycleEventObserver
وLifecycle
وLifecycleRegistry
وLifecycleObserver
وViewModelStore
وAndroidViewModel
وAbstractSavedStateViewModelFactory
وLifecycleService
وServiceLifecycleDispatcher
وProcessLifecycleOwner
الإصدار 2.6.0-rc01
22 شباط (فبراير) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.6.0-rc01
. يحتوي الإصدار 2.6.0-rc01 على هذه المراجعات.
إصلاح الأخطاء
- تضبط إضافة
LiveData.distinctUntilChanged()
الآنvalue
للعنصرLiveData
الذي تم إرجاعه إذا تم ضبط قيمة على العنصرLiveData
السابق. لا يؤدي ذلك إلى تغيير سلوك المراقبة، إذ ستظل القيم المعدَّلة من المصدرLiveData
لا تنطبق إلا بعد بدء مراقبةLiveData
المعروضة منdistinctUntilChanged()
. (Ib482f)
الإصدار 2.6.0-beta01
8 شباط (فبراير) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.6.0-beta01
. يحتوي الإصدار 2.6.0-beta01 على هذه المراجعات.
إحالات ناجحة في Kotlin
- تم الآن كتابة
LifecycleOwner
بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للفصول المكتوبة بلغة Kotlin، ويجب الآن إلغاء السمةlifecycle
بدلاً من تنفيذ الدالةgetLifecycle()
السابقة. (I75b4b، b/240298691) - أصبحت
ViewModelStoreOwner
الآن مكتوبة بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للفصول المكتوبة بلغة Kotlin، ويجب الآن إلغاء السمةviewModelStore
بدلاً من تنفيذ الدالةgetViewModelStore()
السابقة. (I86409، b/240298691) - تم نقل إضافة Kotlin في
LifecycleOwner
التي تقدّم الحقلlifecycleScope
إلى العنصرlifecycle-common
منlifecycle-runtime-ktx
. (I41d78، b/240298691) - تم نقل إضافة Kotlin في
Lifecycle
التي تقدّم الحقلcoroutineScope
إلى العنصرlifecycle-common
منlifecycle-runtime-ktx
. (Iabb91، b/240298691)
الإصدار 2.6.0-alpha05
25 كانون الثاني (يناير) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.6.0-alpha05
. يحتوي الإصدار 2.6.0-alpha05 على هذه المراجعات.
إحالات ناجحة في Kotlin
- تم الآن كتابة
Transformations
بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للفئات المكتوبة بلغة Kotlin والتي كانت تستخدم مباشرةً بنية مثلTransformations.map
. يجب أن يستخدم رمز Kotlin الآن بنية طريقة إضافة Kotlin التي كانت متاحة سابقًا فقط عند استخدامlifecycle-livedata-ktx
. عند استخدام لغة البرمجة Java، يتم إيقاف إصدارات هذه الطرق التي تستخدِم طريقةandroidx.arch.core.util.Function
نهائيًا واستبدالها بالإصدارات التي تستخدِمFunction1
في Kotlin. يحافظ هذا التغيير على التوافق مع الملفات الثنائية. (I8e14f) - تم الآن كتابة
ViewTreeViewModelStoreOwner
بلغة Kotlin. هذا تغيير غير متوافق مع المصدر لهذه الفئات المكتوبة بلغة Kotlin. عليك الآن استيراد طُرق إضافة Kotlin واستخدامها مباشرةً فيView
منandroidx.lifecycle.setViewTreeViewModelStoreOwner
وandroidx.lifecycle.findViewTreeViewModelStoreOwner
لضبط مالك تم ضبطه سابقًا والعثور عليه. هذه الإصدارات متوافقة مع الثنائيات وتظل متوافقة مع المصدر للتنفيذات المكتوبة بلغة برمجة Java. (Ia06d8 وIb22d8 وb/240298691) - تم الآن كتابة واجهة
HasDefaultViewModelProviderFactory
بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للفئات المكتوبة بلغة Kotlin، ويجب الآن إلغاء سمتَيdefaultViewModelProviderFactory
وdefaultViewModelCreationExtras
بدلاً من تنفيذ الدوالّ المقابلة السابقة. (Iaed9c، b/240298691) - تم الآن كتابة
Observer
بلغة Kotlin. تستخدم طريقةonChanged()
الآن الاسمvalue
لمَعلمتها. (Iffef2، I4995e، b/240298691) - تم الآن كتابة
AndroidViewModel
وAbstractSavedStateViewModelFactory
وLifecycleService
وServiceLifecycleDispatcher
وProcessLifecycleOwner
بلغة Kotlin (I2e771 وIbae40 وI160d7 وI08884 وI1cda7 وb/240298691).
الإصدار 2.6.0-alpha04
11 كانون الثاني (يناير) 2023
تم إصدار androidx.lifecycle:lifecycle-*:2.6.0-alpha04
. يحتوي الإصدار 2.6.0-alpha04 على هذه المراجعات.
الميزات الجديدة
- يتضمّن
LiveData
الآن سمةisInitialized
جديدة تشير إلى ما إذا تم ضبط قيمة صريحة علىLiveData
، ما يتيح لك التمييز بينliveData.value
التي تعرضnull
لأنّه لم يتم ضبط أي قيمة أو قيمةnull
صريحة. (Ibd018)
تغييرات واجهة برمجة التطبيقات
- لم تعُد واجهات برمجة التطبيقات
collectAsStateWithLifecycle()
فيlifecycle-runtime-compose
في الحالة التجريبية. (I09d42، b/258835424) - تم إيقاف طرق
Lifecycle.launchWhenX
وLifecycle.whenX
نهائيًا لأنّ استخدام أداة توزيع مؤقتة يمكن أن يؤدي إلى إهدار الموارد في بعض الحالات. ننصح باستخدامLifecycle.repeatOnLifecycle
. (Iafc54، b/248302832)
إحالات ناجحة في Kotlin
- تم الآن كتابة
ViewTreeLifecycleOwner
بلغة Kotlin. هذا تغيير غير متوافق مع المصدر لهذه الفئات المكتوبة بلغة Kotlin. عليك الآن استيراد طُرق إضافة Kotlin واستخدامها مباشرةً فيView
منandroidx.lifecycle.setViewTreeLifecycleOwner
وandroidx.lifecycle.findViewTreeLifecycleOwner
لضبط مالك تم ضبطه سابقًا والعثور عليه. ويحلّ هذا الإصدار محلّ إضافة Kotlin السابقة فيlifecycle-runtime-ktx
. هذه الإصدارات متوافقة مع الثنائيات وتظل متوافقة مع المصدر للتنفيذات المكتوبة بلغة برمجة Java. (I8a77a وI5234e وb/240298691) - تم الآن كتابة
LiveDataReactiveStreams
بلغة Kotlin. تم نقل إضافات Kotlin التي كانت فيlifecycle-reactivestreams-ktx
سابقًا إلى وحدةlifecycle-reactivestreams
، وأصبحت هي الواجهة الأساسية للرمز البرمجي المكتوب بلغة Kotlin. هذا تغيير غير متوافق مع المصدر للرمز البرمجي المكتوب بلغة Kotlin إذا لم تكن تستخدم واجهات برمجة تطبيقات طرق إضافة Kotlin. (I2b1b9 وI95d22 وb/240298691) - تم الآن كتابة
DefaultLifecycleObserver
وLifecycleEventObserver
وLifecycle
وLifecycleRegistry
وLifecycleObserver
وViewModelStore
بلغة Kotlin (Iadffd، (I60034، I8c52c، I9593d، I01fe1، I59a23، b/240298691)
إصلاح الأخطاء
- لم يعُد
SavedStateHandle
يتعطّل بسببClassCastException
عند استدعاءget()
باستخدام نوع الفئة غير الصحيح. (I6ae7c)
الإصدار 2.6.0-alpha03
24 تشرين الأول (أكتوبر) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.6.0-alpha03
. يحتوي الإصدار 2.6.0-alpha03 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة عدم عمل القيود بين وحدات رحلة المستخدِم المختلفة على النحو المطلوب. (I18d0d، b/249686765)
- تتضمّن الأخطاء التي يُرسِلها
LifecycleRegistry.moveToState()
الآن رسالة خطأ أكثر فائدة لإعلام المطوّرين بالمكوّن الذي يتسبب في الخطأ. (Idf4b2، b/244910446)
الإصدار 2.6.0-alpha02
7 أيلول (سبتمبر) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.6.0-alpha02
. يحتوي الإصدار 2.6.0-alpha02 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- يتضمّن
MediatorLiveData
الآن عنصر إنشاء لضبط قيمة أولية. (Ib6cc5، b/151244085)
إصلاح الأخطاء
- تتضمّن عناصر
Lifecycle
الآن قيودًا تضمن استخدام جميع عناصر Lifecycle المتبادلة الاعتماد للإصدار نفسه، ما يؤدي إلى ترقية العناصر الأخرى تلقائيًا عند ترقية أحدها. b/242871265 - ينشئ
FlowLiveData.asFlow()
الآنcallbackFlow
بدلاً من استخدام تنفيذChannel
الخاص به لضمان أمان مؤشر الترابط والحفاظ على السياق. (I4a8b2، b/200596935) - ستحافظ الآن دالة
asLiveData
فيFlowLiveData
على القيمة الأولية لعنصرStateFlow
عند إنشاء عنصرLiveData
الجديد. (I3f530، b/157380488) - من رحلة المستخدِم
2.5.1
: أصبحت عمليات التنفيذ المخصّصة لواجهةAndroidViewModelFactory
تستدعي الآن الدالةcreate(modelClass)
بشكل صحيح عند استخدام أداة الإنشاء التي تتضمّن حالة معLifecycle
2.4 والإصدارات الأحدث (I5b315، b/238011621)
الإصدار 2.6.0-alpha01
29 حزيران (يونيو) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.6.0-alpha01
. يحتوي الإصدار 2.6.0-alpha01 على هذه المراجعات.
الميزات الجديدة
- تمت إضافة إضافة جديدة في
StateFlow
وFlow
منcollectAsStateWithLifecycle
تجمع البيانات من عمليات التدفق وتعرض أحدث قيمتها على أنّها حالة الإنشاء بطريقة تراعي مراحل النشاط. يتم جمع التدفق وضبط الانبعاثات الجديدة على قيمة الحالة عندما تكون دورة الحياة فيLifecycle.State
معيّنة على الأقل. عندما تنخفض مدة دورة الحياة عنLifecycle.State
، تتوقف عملية جمع التدفقات ولا يتم تعديل قيمة الحالة. (I1856e، b/230557927)
الإصدار 2.5
الإصدار 2.5.1
27 تموز (يوليو) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.1
. يحتوي الإصدار 2.5.1 على هذه المراجعات.
إصلاح الأخطاء
- تُستدعي الآن عمليات التنفيذ المخصّصة لواجهة
AndroidViewModelFactory
الدالةcreate(modelClass)
بشكل صحيح عند استخدام أداة الإنشاءAndroidViewModelFactory
التي تتضمّن حالة معLifecycle
2.4 والإصدارات الأحدث. (I5b315، b/238011621)
الإصدار 2.5.0
29 حزيران (يونيو) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.0
. يحتوي الإصدار 2.5.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 2.4.0
توفّر
SavedStateHandle
الآن واجهة برمجة تطبيقاتgetStateFlow()
API تُعرِض دالةStateFlow
في Kotlin لرصد تغييرات القيم كبديل لاستخدامLiveData
.ViewModel CreationExtras: عند كتابة
ViewModelProvider.Factory
مخصّصة، لم يعُد من الضروري تمديدAndroidViewModelFactory
أوAbstractSavedStateViewModelFactory
للوصول إلىApplication
أوSavedStateHandle
على التوالي. بدلاً من ذلك، يتم توفير هذه الحقول لكل فئة فرعية منViewModelProvider.Factory
على أنّهاCreationExtras
من خلال طريقة التحميل الزائد الجديدةcreate
:create(Class<T>, CreationExtras)
. يوفّر نشاطك أو المقتطف هذه الإضافات تلقائيًا عند استخدام النشاط1.5.0
والمقتطف1.5.0
، على التوالي.class CustomFactory : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T { return when (modelClass) { HomeViewModel::class -> { // Get the Application object from extras val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) // Pass it directly to HomeViewModel HomeViewModel(application) } DetailViewModel::class -> { // Create a SavedStateHandle for this ViewModel from extras val savedStateHandle = extras.createSavedStateHandle() DetailViewModel(savedStateHandle) } else -> throw IllegalArgumentException("Unknown class $modelClass") } as T } }
يوفّر
lifecycle-viewmodel
الآنviewModelFactory
Kotlin DSL يتيح لك تحديدViewModelProvider.Factory
من حيث مُنشئ دالة لامبادا واحد أو أكثر، واحد لكل فئةViewModel
معيّنة يتيحها المصنع المخصّص، باستخدامCreationExtras
كمصدر البيانات الأساسي.val customFactory = viewModelFactory { // The return type of the lambda automatically sets what class this lambda handles initializer { // Get the Application object from extras provided to the lambda val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY)) HomeViewModel(application) } initializer { val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) } }
يوفّر
lifecycle-viewmodel-compose
الآن واجهة برمجة تطبيقاتviewModel()
تستخدِم مصنعًا لوظائف Lambda لإنشاء مثيلViewModel
بدون الحاجة إلى إنشاءViewModelProvider.Factory
مخصّص.// Within a @Composable, you can now skip writing a custom Factory // and instead write a lambda to do the initialization of your ViewModel val detailViewModel = viewModel { // This lambda is only called the first time the ViewModel is created // and all CreationExtras are available inside the lambda val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }
دمج أداة Compose Saver في SavedStateHandle: يحتوي العنصر
lifecycle-viewmodel-compose
الآن على واجهات برمجة تطبيقات تجريبية جديدة فيSavedStateHandle.saveable
تسمح بسلوك مشابه لـrememberSaveable
يستند إلىSavedStateHandle
لـ ViewModel.class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
تمت إضافة واجهة برمجة تطبيقات
addCloseable()
وطريقة جديدة لإنشاء العناصر تتيح لك إضافة عنصرCloseable
واحد أو أكثر إلىViewModel
الذي سيتم إغلاقه عند محوViewModel
بدون الحاجة إلى أي عمل يدوي فيonCleared()
.على سبيل المثال، لإنشاء نطاق معالجة متزامنة يمكنك إدخاله في ViewModel، ولكن يمكنك التحكّم فيه من خلال الاختبار، يمكنك إنشاء
CoroutineScope
ينفذCloseable
:class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
ويمكن استخدامها بعد ذلك في
ViewModel
المُنشئ مع الحفاظ على مدة صلاحيةviewModelScope
نفسها:class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
تغييرات السلوك
- سيؤدي الآن محاولة نقل
Lifecycle.State
منINITIALIZED
إلىDESTROYED
إلى ظهورIllegalStateException
دائمًا بغض النظر عن ما إذا كانLifecycle
يحتوي على مراقب مرفق. - ستتم إزالة المراقبين من
LifecycleRegistry
عند وصولها إلى الحالةDESTROYED
.
الإصدار 2.5.0-rc02
15 حزيران (يونيو) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.0-rc02
. يحتوي الإصدار 2.5.0-rc02 على هذه المراجعات.
إصلاح الأخطاء
- لن يتعطّل
ViewModelProvider
بعد الآن عند خلط الإصدارات السابقة من متطلّبات Lifecycle الخاصة بـ compileOnly مع الإصدارات 2.5 والإصدارات الأحدث. (I81a66، b/230454566)
الإصدار 2.5.0-rc01
11 أيار (مايو) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.0-rc01
. يحتوي الإصدار 2.5.0-rc01 على هذه المراجعات.
إصلاح الأخطاء
- يُعرِض
MediatorLiveData.addSource()
الآن خطأNullPointerException
عند تمرير مصدرnull
بدلاً من نشر مصدرnull
للمراقبين.(Ibd0fb، b/123085232)
الإصدار 2.5.0-beta01
20 نيسان (أبريل) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.0-beta01
. يحتوي الإصدار 2.5.0-beta01 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة
SavedStateHandle.saveable
لمفوّضِي السمات لاستخدام أسماء السمات كمفاتيح للحفاظ على الحالة فيSavedStateHandle
(I8bb86 وb/225014345)
إصلاح الأخطاء
- تم إصلاح مشكلة تؤدي إلى ظهور
IllegalStateException
عند استخدام عدة حِزم للرجوع إلى الخلف، وذلك عند تداخلNavHost
واحد داخلNavHost
آخر في علامة تبويب تنقل سفلي غير أساسية. (I11bd5، b/228865698)
الإصدار 2.5.0-alpha06
6 نيسان (أبريل) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.0-alpha06
. يحتوي الإصدار 2.5.0-alpha06 على هذه المراجعات.
الميزات الجديدة
- إضافة
MutableState
الزائد التجريبي إلىSavedStateHandle.saveable
للحفاظ على التكافؤ معrememberSaveable
(I38cfe، b/224565154)
تغييرات واجهة برمجة التطبيقات
- أصبح
CreationExtras
الآن مجرد نموذج بدلاً من نموذج مختوم. (Ib8a7a)
إصلاح الأخطاء
- تم إصلاح خطأ
IllegalStateException: Already attached to lifecycleOwner
ناتج عنSavedStateHandleController
. (I7ea47، b/215406268)
الإصدار 2.5.0-alpha05
23 آذار (مارس) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.0-alpha05
. يحتوي الإصدار 2.5.0-alpha05 على هذه المراجعات.
الميزات الجديدة
- توفّر وحدة
lifecycle-viewmodel-compose
الآنSavedStateHandleSaver
، وهي واجهة برمجة تطبيقات تجريبية تضمن دمج القيم فيSavedStateHandle
بشكل صحيح مع حالة العنصر المحفوظ نفسها التي يستخدمهاrememberSaveable
. (Ia88b7، b/195689777)
تغييرات واجهة برمجة التطبيقات
- تم إصلاح مشكلة التوافق مع Lifecycle 2.3 والإصدارات الأحدث من Lifecycle في Java. (I52c8a، b/219545060)
إصلاح الأخطاء
- يتيح
SavedStateViewFactory
الآن استخدامCreationExtras
حتى إذا تم إعداده باستخدامSavedStateRegistryOwner
. في حال تقديم عناصر إضافية، يتم تجاهل الوسيطات التي تمّت تهيئتها. (I6c43b، b/224844583)
الإصدار 2.5.0-alpha04
9 آذار (مارس) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.0-alpha04
. يحتوي الإصدار 2.5.0-alpha04 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- يوفّر
SavedStateHandle
الآن واجهة برمجة تطبيقاتgetStateFlow()
API تعرض KotlinStateFlow
لرصد تغييرات القيم كبديل لاستخدامLiveData
. (Iad3ab، b/178037961)
الإصدار 2.5.0-alpha03
23 شباط (فبراير) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.0-alpha03
. يحتوي الإصدار 2.5.0-alpha03 على هذه المراجعات.
الميزات الجديدة
- تمت إضافة واجهة برمجة تطبيقات
addCloseable()
وتحميل مفعّل جديد لإنشاء العناصر يتيح لك إضافة عنصر واحد أو أكثرCloseable
إلىViewModel
الذي سيتم إغلاقه عند محوViewModel
بدون الحاجة إلى أي عمل يدوي فيonCleared()
. (I55ea0) - يوفّر
lifecycle-viewmodel
الآنInitializerViewModelFactory
يتيح لك إضافة lambda لمعالجةViewModel
فئات معيّنة، باستخدامCreationExtras
كمصدر البيانات الأساسي. (If58fc، b/216687549) - يوفّر
lifecycle-viewmodel-compose
الآن واجهة برمجة تطبيقاتviewModel()
التي تأخذ مصنعًا لوظائف lambda لإنشاء مثيلViewModel
بدون requirin إنشاءViewModelProvider.Factory
مخصّص. (I97fbb، b/216688927)
تغييرات واجهة برمجة التطبيقات
- يمكنك الآن إنشاء
ViewModel
معCreationExtras
من خلالlifecycle-viewmodel-compose
. (I08887، b/216688927)
تغييرات السلوك
- سيؤدي الآن محاولة نقل
Lifecycle.State
منINITIALIZED
إلىDESTROYED
إلى ظهورIllegalStateException
دائمًا بغض النظر عن ما إذا كانLifecycle
يحتوي على مراقب مرفق. (I7c390، b/177924329) - سيُزيل
LifecycleRegistry
الآن مراقبيه عندما يصل إلى الحالةDESTROYED
. (I4f8dd، b/142925860)
الإصدار 2.5.0-alpha02
9 شباط (فبراير) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.0-alpha02
. يحتوي الإصدار 2.5.0-alpha02 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تم تحويل
SavedStateHandle
وSavedStateViewModelFactory
إلى Kotlin. وقد أدّى ذلك إلى تحسين إمكانية تحديد قيمة صفرية للسمات العامة في كلتا الفئتَين. (Ib6ce2، b/216168263، I9647a، b/177667711) - يمكن أن تؤدي معلَمة الدالة
LiveData
switchMap
الآن إلى ناتج قابل للتغيير. (I40396، b/132923666) - تم الآن إضافة تعليق توضيحي إلى الإضافات
LiveData
-ktx باستخدام@CheckResult
لفرض استخدام النتيجة عند استدعاء هذه الدوالّ. (Ia0f05، b/207325134)
تغييرات السلوك
- تخزِّن
SavedStateHandle
الآن القيمة التلقائية بشكلٍ صحيح عندما لا تتوفّر قيمة للمفتاح المحدّد. (I1c6ce، b/178510877)
إصلاح الأخطاء
- من Lifecycle
2.4.1
: تم تعديلlifecycle-process
ليصبح يعتمد على Startup 1.1.1 لضمان توفّر الإصلاحات التي تمنعProcessLifecycleInitializer
من طرحStartupException
تلقائيًا. (Ib01df، b/216490724) - تتوفّر الآن رسالة خطأ محسّنة عندما تحتوي فئات
AndroidViewModel
المخصّصة على مَعلمات بالترتيب غير الصحيح ومحاولة إنشاءViewModel
. (I340f7، b/177667711) - يمكنك الآن إنشاء نموذج عرض من خلال
CreationExtras
باستخدامAndroidViewModelFactory
بدون ضبط تطبيق. (I6ebef، b/217271656)
الإصدار 2.5.0-alpha01
26 كانون الثاني (يناير) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.5.0-alpha01
. يحتوي الإصدار 2.5.0-alpha01 على هذه المراجعات.
ViewModel CreationExtras
من خلال هذا الإصدار، نضع الأساس لإعادة هيكلة طريقة إنشاء ViewModel
. بدلاً من مجموعة جامدة من الفئات الفرعية من ViewModelProvider.Factory
التي تضيف كلٌّ منها وظيفة إضافية (السماح بمَعلمة Application
لإنشاء مثيل من خلال AndroidViewModelFactory
، والسماح بمَعلمة SavedStateHandle
لإنشاء مثيل من خلال SavedStateViewModelFactory
وAbstractSavedStateViewModelFactory
، وما إلى ذلك)، ننتقل إلى عالم المصانع التي لا تتضمّن حالة وتعتمد على مفهوم جديد، وهو CreationExtras
. (Ia7343 وb/188691010 وb/188541057)
بعد هذا التغيير، لم تعُد ViewModelProvider
تُجري مكالمات مباشرة إلى طريقة create(Class<T>)
السابقة في ViewModelProvider.Factory
. بدلاً من ذلك، يتمّ استدعاء مثيل جديد من create
: create(Class<T>, CreationExtras)
. وهذا يعني أنّ أيّ عملية تنفيذ مباشرة لمثيل ViewModelProvider.Factory
يمكنها الآن الوصول إلى كلّ من CreationExtras
الجديدة التالية:
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
: يوفر هذاString
إمكانية الوصول إلى المفتاح المخصّص الذي تم تمريره إلىViewModelProvider.get()
.- يمنح
ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
إمكانية الوصول إلى الصفApplication
. - توفّر
SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
إمكانية الوصول إلىSavedStateRegistryOwner
التي يتم استخدامها لإنشاء ViewModel هذه. - توفّر
SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
إمكانية الوصول إلىViewModelStoreOwner
التي يتم استخدامها لإنشاء ViewModel هذه. - توفّر
SavedStateHandleSupport.DEFAULT_ARGS_KEY
إمكانية الوصول إلىBundle
من الوسيطات التي يجب استخدامها لإنشاءSavedStateHandle
.
يتم توفير هذه الإضافات تلقائيًا عند استخدام النشاط 1.5.0-alpha01
والقطعة 1.5.0-alpha01
والتنقّل 2.5.0-alpha01
. إذا كنت تستخدم إصدارًا سابقًا من هذه المكتبات، سيكون CreationExtras
فارغًا. وقد تمت إعادة كتابة جميع الفئات الفرعية الحالية من ViewModelProvider.Factory
لتتوافق مع مسار الإنشاء القديم المستخدَم في الإصدارات السابقة من هذه المكتبات ومسار CreationExtras
الذي سيتم استخدامه من الآن فصاعدًا.
تتيح لك هذه CreationExtras
إنشاء ViewModelProvider.Factory
ينقل المعلومات التي تحتاجها فقط إلى كل ViewModel
بدون الاعتماد على تسلسل هرمي صارم للفئات الفرعية لـ Factory:
class CustomFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
return when (modelClass) {
HomeViewModel::class -> {
// Get the Application object from extras
val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
// Pass it directly to HomeViewModel
HomeViewModel(application)
}
DetailViewModel::class -> {
// Create a SavedStateHandle for this ViewModel from extras
val savedStateHandle = extras.createSavedStateHandle()
DetailViewModel(savedStateHandle)
}
else -> throw IllegalArgumentException("Unknown class $modelClass")
} as T
}
}
نستخدم دالة الإضافة createSavedStateHandle()
في Kotlin على CreationExtras
من SavedStateHandleSupport
لإنشاء SavedStateHandle
فقط لـ ViewModel التي تحتاج إليها. (Ia6654، b/188541057)
يمكن توفير CreationExtras
مخصّص من خلال إلغاء getDefaultViewModelCreationExtras()
في ComponentActivity
أو Fragment
، ما يجعله متاحًا في ViewModelProvider.Factory
المخصّص كشكل مضمّن من الحقن المساعد. وستتوفّر هذه الإضافات تلقائيًا لـ Factory المخصّص عند استخدامها مباشرةً مع ViewModelProvider
أو عند استخدام الإضافات الخاصة بخصائص Kotlin by viewModels()
وby activityViewModels()
. (I79f2b، b/207012584، b/207012585، b/207012490)
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تؤدي إلى إعادة ظهور القيمة التلقائية المقدَّمة
لعنصر
SavedStateHandle
بعد إنهاء عملية الإنشاء وإعادة إنشائه، حتى إذا تمت إزالتها تحديدًا منSavedStateHandle
. نتيجةً لذلك، لن يُدمجSavedStateHandle
القيم التلقائية والقيم التي تمّت استعادتها معًا، بل سيستخدم القيم التي تمّت استعادتها فقط كمصدر للحقيقة. (I53a4b)
الإصدار 2.4
الإصدار 2.4.1
9 شباط (فبراير) 2022
تم إصدار androidx.lifecycle:lifecycle-*:2.4.1
. يحتوي الإصدار 2.4.1 على هذه المراجعات.
إصلاح الأخطاء
- تم نقلها من مرحلة نشاط
2.5.0-alpha01
: تم إصلاح مشكلة كانت تؤدي إلى إعادة ظهور القيمة التلقائية المقدَّمة لعنصرSavedStateHandle
بعد إنهاء عملية المعالجة وإعادة إنشائها، حتى إذا تمت إزالتها تحديدًا منSavedStateHandle
. نتيجةً لذلك، لن يدمِجSavedStateHandle
القيم التلقائية والقيم التي تمّت استعادتها معًا، بل سيستخدم القيم التي تمّت استعادتها فقط كمصدر للحقيقة. (I53a4b) - يعتمد
lifecycle-process
الآن على Androidx Startup 1.1.1 الذي أصلح مشكلة تراجعًا في الحالات التي يؤدي فيها استخدامProcessLifecycleInitializer
إلى حدوثStartupException
. (b/216490724)
الإصدار 2.4.0
27 تشرين الأول (أكتوبر) 2021
تم إصدار androidx.lifecycle:lifecycle-*:2.4.0
. يحتوي الإصدار 2.4.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 2.3.0
- تم إيقاف
@OnLifecycleEvent
نهائيًا. يجب استخدامLifecycleEventObserver
أوDefaultLifecycleObserver
بدلاً من ذلك. - تمت إضافة مكتبة
androidx.lifecycle:lifecycle-viewmodel-compose
. توفّرviewModel()
قابلة للتجميع وLocalViewModelStoreOwner
.- تغيير يؤثر في المصدر: تمت إعادة كتابة
ViewModelProvider
بلغة Kotlin. لم تعُد طريقةViewModelProvider.Factory.create
تسمح باستخدام متغير عام قابل للحذف.
- تغيير يؤثر في المصدر: تمت إعادة كتابة
- تمت إضافة واجهة برمجة تطبيقات جديدة لوظائف coroutine إلى
androidx.lifecycle:lifecycle-runtime-ktx
: Lifecycle.repeatOnLifecycle
، وهي واجهة برمجة تطبيقات تنفِّذ مجموعة من الرموز البرمجية في دالة معالجة متزامنة عندما تكون دورة الحياة في حالة معيّنة على الأقل. سيتم إلغاء الحظر وإعادة تشغيله عندما تنتقل رحلة المستخدِم إلى الحالة المستهدَفة والخروج منها.Flow.flowWithLifecycle
، واجهة برمجة تطبيقات تُصدِر قيمًا من عملية Flow في المصدر عندما تكون دورة الحياة في حالة معيّنة على الأقل- تم نقل
DefaultLifecycleObserver
منlifecycle.lifecycle-common-java8
إلىlifecycle.lifecycle-common
. لم تعُدlifecycle.lifecycle-common-java8
تقدّم أي وظائف إضافية إلى جانبlifecycle.lifecycle-common
، لذا يمكن استبدال الاعتماد عليها بـlifecycle.lifecycle-common
. - تم نقل واجهة برمجة التطبيقات غير المخصّصة لعمليات تناوب المهام من
lifecycle-viewmodel-ktx
إلى وحدةlifecycle-viewmodel
. يستخدم
lifecycle-process
الآنandroidx.startup
لإعدادProcessLifecycleOwner
.كان
androidx.lifecycle.ProcessLifecycleOwnerInitializer
ينفّذ ذلك في السابق.إذا كنت قد استخدمت
tools:node="remove"
ContentProvider
المستخدَم لبدء مرحلة عملية في السابق، عليك إجراء ما يلي بدلاً من ذلك.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(أو)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
الإصدار 2.4.0-rc01
29 أيلول (سبتمبر) 2021
تم طرح الإصدار androidx.lifecycle:lifecycle-*:2.4.0-rc01
بدون أي تغييرات عن الإصدار Lifecycle 2.4.0-beta01. يحتوي الإصدار 2.4.0-rc01 على هذه المراجعات.
الإصدار 2.4.0-beta01
15 أيلول (سبتمبر) 2021
تم إصدار androidx.lifecycle:lifecycle-*:2.4.0-beta01
. يحتوي الإصدار 2.4.0-beta01 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تم إيقاف
@OnLifecycleEvent
نهائيًا. يجب استخدامLifecycleEventObserver
أوDefaultLifecycleObserver
بدلاً من ذلك. (I5a8fa) - تم نقل DefaultLifecycleObserver من
androidx.lifecycle.lifecycle-common-java8
إلىandroidx.lifecycle.lifecycle-common
. لا يوفّرandroidx.lifecycle.lifecycle-common-java8
بعد الآن أي وظائف إضافية إلى جانبandroidx.lifecycle.lifecycle-common
، لذا يمكن استبدال الاعتماد عليه بـandroidx.lifecycle.lifecycle-common
. (I021aa) - تم نقل واجهة برمجة التطبيقات غير المخصّصة لعمليات التشغيل المتعدّد المتوازي من
lifecycle-viewmodel-ktx
إلى وحدةlifecycle-viewmodel
. (I6d5b2)
المساهمة الخارجية
الإصدار 2.4.0-alpha03
4 آب (أغسطس) 2021
تم إصدار androidx.lifecycle:lifecycle-*:2.4.0-alpha03
. يحتوي الإصدار 2.4.0-alpha03 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تغيير يؤثر في المصدر: تمت إعادة كتابة ViewModelProvider بلغة Kotlin.
لم تعُد طريقة
ViewModelProvider.Factory.create
تسمح باستخدام nullable بشكل عام. (I9b9f6)
التغييرات في السلوك
- يتم الآن استدعاء
Lifecycle.repeatOnLifecycle
:block
دائمًا بشكل تسلسلي عند تكرار التنفيذ. (Ibab33)
المساهمة الخارجية
- نشكرك chao2zhang على إصلاح مقتطفات الرموز البرمجية في مستندات
repeatOnLifecycle
. #205
الإصدار 2.4.0-alpha02
16 حزيران (يونيو) 2021
تم إصدار androidx.lifecycle:lifecycle-*:2.4.0-alpha02
. يحتوي الإصدار 2.4.0-alpha02 على هذه المراجعات.
الميزات الجديدة
- تمت إضافة عملية تدقيق أخطاء جديدة في
RepeatOnLifecycleWrongUsage
إلىlifecycle-runtime-ktx
لرصد حالات استخدامrepeateOnLifecycle
بشكل غير صحيح فيonStart()
أوonResume()
. (706078، b/187887400)
تغييرات واجهة برمجة التطبيقات
- تمّت إزالة واجهة برمجة التطبيقات
LifecycleOwner.addRepeatingJob
لصالحLifecycle.repeatOnLifecycle
التي تراعي التوافُق المُنظَّم ويسهل التعامل معها. (I4a3a8) - اجعل
ProcessLifecycleInitializer
علنية حتى تتمكّنandroidx.startup.Initializer
الأخرى من استخدامها كتبعيات. (I94c31)
إصلاح الأخطاء
- تم إصلاح مشكلة في عملية التحقّق من الأخطاء النحوية في
NullSafeMutableLiveData
عندما يحتوي الحقل على عوامل تعديل. (#147، b/183696616) - تم حلّ مشكلة أخرى في فحص
NullSafeMutableLiveData
lint عند استخدام الأنواع العامة. (#161، b/184830263)
المساهمة الخارجية
- نشكرك maxsav على تحسين عملية التحقّق من الأخطاء النحوية في
NullSafeMutableLiveData
. (#147، b/183696616) - نشكرك kozaxinan على تحسين عملية فحص الأخطاء البرمجية في
NullSafeMutableLiveData
. (#161، b/184830263)
الإصدار 2.4.0-alpha01
24 آذار (مارس) 2021
تم إصدار androidx.lifecycle:lifecycle-*:2.4.0-alpha01
. يحتوي الإصدار 2.4.0-alpha01 على هذه المراجعات.
التغييرات في السلوك
يستخدم
lifecycle-process
الآنandroidx.startup
لإعدادProcessLifecycleOwner
.كان
androidx.lifecycle.ProcessLifecycleOwnerInitializer
ينفّذ ذلك في السابق.إذا كنت قد استخدمت
tools:node="remove"
ContentProvider
المستخدَم لبدء مرحلة عملية في السابق، عليك إجراء ما يلي بدلاً من ذلك.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(أو)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
تغييرات واجهة برمجة التطبيقات
- تمت إضافة واجهة برمجة تطبيقات
Flow.flowWithLifecycle
تُصدِر قيمًا من مسار الإدخال عندما تكون رحلة المستخدِم في حالة معيّنة على الأقل باستخدام واجهة برمجة التطبيقاتLifecycle.repeatOnLifecycle
. وهذا بديل لواجهة برمجة التطبيقاتLifecycleOwner.addRepeatinJob
API الجديدة أيضًا. (I0f4cd)
إصلاح الأخطاء
- اعتبارًا من Lifecycle 2.3.1: يمكن الآن لقاعدة فحص الأخطاء
NonNullableMutableLiveData
التمييز بشكلٍ سليم بين متغيّرات الحقول التي تتضمّن قيمًا صفرية مختلفة. (b/169249668)
الإصدار 1.0.0 من Lifecycle Viewmodel Compose
الإصدار 1.0.0-alpha07
16 حزيران (يونيو) 2021
تم إصدار androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
. يحتوي الإصدار 1.0.0-alpha07 على هذه المراجعات.
تغييرات أساسية في واجهة برمجة التطبيقات
- يقبل
viewModel()
الآن استخدامViewModelStoreOwner
اختياري، ما يسهّل العمل مع مالكي الحسابات غيرLocalViewModelStoreOwner
. على سبيل المثال، يمكنك الآن استخدامviewModel(navBackStackEntry)
لاسترداد ViewModel مرتبط برسم بياني تنقّل معيّن. (I2628d، b/188693123)
الإصدار 1.0.0-alpha06
2 حزيران (يونيو) 2021
تم إصدار androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
. يحتوي الإصدار 1.0.0-alpha06 على هذه المراجعات.
تم تعديلها لتصبح متوافقة مع الإصدار 1.0.0-beta08
من تطبيق "الإنشاء".
الإصدار 1.0.0-alpha05
18 أيار (مايو) 2021
تم إصدار androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
. يحتوي الإصدار 1.0.0-alpha05 على هذه المراجعات.
الميزات الجديدة
- تم تعديلها لتصبح متوافقة مع الإصدار
1.0.0-beta07
من تطبيق "الإنشاء".
إصلاح الأخطاء
- أصبحت ملفات AndroidManifest من ui-test-manifest و ui-tooling-data متوافقة الآن مع Android 12 (I6f9de، b/184718994).
الإصدار 1.0.0-alpha04
7 نيسان (أبريل) 2021
تم إصدار androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
. يحتوي الإصدار 1.0.0-alpha04 على هذه المراجعات.
تغييرات في التبعيات
- يسمح هذا الإصدار لـ
androidx.hilt:hilt-navigation-compose
وandroidx.navigation:navigation-compose
بمزامنة التبعيات علىandroidx.compose.compiler:compiler:1.0.0-beta04
وandroidx.compose.runtime:runtime:1.0.0-beta04
. بالنسبة إلى الإصدار 1.0.0، يجب أن يتطابق المُجمِّع ووقت التشغيل.
الإصدار 1.0.0-alpha03
10 آذار (مارس) 2021
تم إصدار androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03
. يحتوي الإصدار 1.0.0-alpha03 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- يعرض
LocalViewModelStoreOwner.current
الآنViewModelStoreOwner
قابلًا للإلغاء لتحديد ما إذا كانViewModelStoreOwner
متوفّرًا في التركيب الحالي بشكل أفضل. لا تزال واجهات برمجة التطبيقات التي تتطلّبViewModelStoreOwner
، مثلviewModel()
وNavHost
، تُعرِض استثناءً في حال عدم ضبطViewModelStoreOwner
. (Idf39a)
الإصدار 1.0.0-alpha02 من Lifecycle-Viewmodel-Compose
24 شباط (فبراير) 2021
تم إصدار androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
. يحتوي الإصدار 1.0.0-alpha02 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تتضمّن
LocalViewModelStoreOwner
الآن وظائفprovides
يمكن استخدامها معCompositionLocalProvider
، ما يحلّ محلّ واجهة برمجة التطبيقاتasProvidableCompositionLocal()
. (I45d24)
الإصدار 1.0.0-alpha01 من Lifecycle-Viewmodel-Compose
10 شباط (فبراير) 2021
تم إصدار androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
. يحتوي الإصدار 1.0.0-alpha01 على هذه المراجعات.
الميزات الجديدة
- تم نقل العنصرَين القابلَين للتجميع
viewModel()
وLocalViewModelStoreOwner
منandroidx.compose.ui.viewinterop
إلى هذا العنصر في حزمةandroidx.lifecycle.viewmodel.compose
. (I7a374)
الإصدار 2.3.1
الإصدار 2.3.1 من مراحل النشاط
24 آذار (مارس) 2021
تم إصدار androidx.lifecycle:lifecycle-*:2.3.1
. يحتوي الإصدار 2.3.1 على هذه المراجعات.
إصلاح الأخطاء
- يمكن الآن لقاعدة التدقيق
NonNullableMutableLiveData
التمييز بشكل صحيح بين متغيّرات الحقول التي تتضمّن قيمًا صفرية مختلفة. (b/169249668)
الإصدار 2.3.0
الإصدار 2.3.0
10 شباط (فبراير) 2021
تم إصدار androidx.lifecycle:lifecycle-*:2.3.0
. يحتوي الإصدار 2.3.0 على هذه المراجعات.
التغييرات الرئيسية منذ الإصدار 2.2.0
- توافق
SavedStateHandle
مع الفئات غير القابلة للتقسيم: يتيح لكSavedStateHandle
الآن التسلسل غير المُجدوَل من خلال السماح لك باستدعاءsetSavedStateProvider()
لمفتاح معيّن، وتوفيرSavedStateProvider
سيتلقّى طلب استدعاء إلىsaveState()
عندما يُطلب منSavedStateHandle
حفظ حالته. راجِع مقالة حفظ الفئات غير القابلة للتقسيم. - فرض سلوك رحلة المستخدِم:
- يفرض LifecycleRegistry الآن
DESTROYED
كحالة نهائية. - يتحقّق
LifecycleRegistry
الآن من أنّه يتم استدعاء طرقه في سلسلة المهام الرئيسية. كان ذلك شرطًا دائمًا لمراحل نشاط التطبيقات وأجزاءها وما إلى ذلك. وقد أدّت إضافة مراقبين من سلاسل مهام غير رئيسية إلى حدوث أعطال يصعب رصدها أثناء التشغيل. بالنسبة إلى عناصرLifecycleRegistry
التي تملكها المكوّنات الخاصة بك، يمكنك إيقاف عمليات التحقّق صراحةً باستخدامLifecycleRegistry.createUnsafe(...)
، ولكن عليك بعد ذلك التأكّد من إجراء مزامنة سليمة عند الوصول إلى هذاLifecycleRegistry
من سلاسل محادثات مختلفة.
- يفرض LifecycleRegistry الآن
- مساعِدَا حالة دورة الحياة والحدث: تمت إضافة طرق مساعِدَين ثابتَين
downFrom(State)
وdownTo(State)
وupFrom(State)
وupTo(State)
إلىLifecycle.Event
لإنشاءEvent
استنادًا إلىState
واتجاه النقل. تمت إضافة طريقةgetTargetState()
التي تقدّمState
الذي ستنتقل إليه رحلة المستخدِم مباشرةً بعدEvent
. withStateAtLeast
: تمت إضافةLifecycle.withStateAtLeast
واجهة برمجة تطبيقات تنتظر حالة دورة حياة وتعمل بشكل متزامن على تنفيذ مجموعة رموز لا تؤدي إلى تعليق الأداء عند نقطة تغيير الحالة، ثم تستأنف العمل مع النتيجة. تختلف واجهات برمجة التطبيقات هذه عن طرقwhen*
الحالية لأنّها لا تسمح بتشغيل رمز تعليق ولا تستعين بموزّع مخصّص. (aosp/1326081)- واجهات برمجة تطبيقات
ViewTree
: تتيح لك واجهات برمجة تطبيقاتViewTreeLifecycleOwner.get(View)
وViewTreeViewModelStoreOwner.get(View)
الجديدة استردادLifecycleOwner
وViewModelStoreOwner
اللذين يحتويان علىView
، على التوالي، وذلك عند توفّر مثيلView
. يجب الترقية إلى Activity1.2.0
وFragment1.3.0
وAppCompat 1.3.0-alpha01 أو إصدار أحدث لملء هذا الحقل بشكل صحيح. تتوفّر إضافتا KotlinfindViewTreeLifecycleOwner
وfindViewTreeViewModelStoreOwner
فيlifecycle-runtime-ktx
وlifecycle-viewmodel-ktx
، على التوالي. - إيقاف دالّة الإضافة
LiveData.observe()
في Kotlin نهائيًا: تم إيقاف دالّة الإضافةLiveData.observe()
في Kotlin نهائيًا، وهي ضرورية لاستخدام بنية lambda، لأنّها غير ضرورية عند استخدام الإصدار 1.4 من Kotlin.
الإصدار 2.3.0-rc01
16 كانون الأول (ديسمبر) 2020
تم إصدار androidx.lifecycle:lifecycle-*:2.3.0-rc01
. يحتوي الإصدار 2.3.0-rc01 على هذه المراجعات.
إصلاح الأخطاء
- أصبحت طريقة
keys()
فيSavedStateHandle
متّسقة الآن قبل حفظ الحالة وبعدها، إذ تتضمّن الآن المفاتيح المستخدَمة سابقًا معsetSavedStateProvider()
بالإضافة إلى المفاتيح المستخدَمة معset()
وgetLiveData()
. (aosp/1517919، b/174713653)
المساهمة الخارجية
- تعالج الآن واجهات برمجة التطبيقات المخصّصة لتعليق عمليات التشغيل المتعدّد المتزامنة التي تتّبع دورة الحياة طلبات البيانات من
yield()
بشكلٍ أفضل. شكرًا Nicklas Ansman Giertz. (aosp/1430830، b/168777346)
الإصدار 2.3.0-beta01
1 تشرين الأول (أكتوبر) 2020
تم إصدار androidx.lifecycle:lifecycle-*:2.3.0-beta01
. يحتوي الإصدار 2.3.0-beta01 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تم إيقاف دالّة الإضافة
LiveData.observe()
في Kotlin نهائيًا، لأنّها غير ضرورية عند استخدام الإصدار 1.4 من Kotlin، وهي ضرورية لاستخدام بنية دالة lambda. (I40d3f)
إصلاح الأخطاء
- ترقية حزمة androidx لاستخدام Kotlin 1.4 (Id6471 وb/165307851 وb/165300826)
تغييرات في المستندات
- تم تعديل مستندَي
liveData
builder وasLiveData()
لتشملا تفاصيل عن تغيير قيم المهلة المحدّدة. (aosp/1122324)
الإصدار 2.3.0-alpha07
19 آب (أغسطس) 2020
تم إصدار androidx.lifecycle:lifecycle-*:2.3.0-alpha07
. يحتوي الإصدار 2.3.0-alpha07 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة تعطُّل في عملية التحقّق من الأخطاء في
NullSafeMutableLiveData
. (aosp/1395367)
الإصدار 2.3.0-alpha06
22 تموز (يوليو) 2020
تم إصدار androidx.lifecycle:lifecycle-*:2.3.0-alpha06
. يحتوي الإصدار 2.3.0-alpha06 على هذه المراجعات.
الميزات الجديدة
- تمت إضافة طرق مساعدة ثابتة من
downFrom(State)
وdownTo(State)
وupFrom(State)
وupTo(State)
إلىLifecycle.Event
لإنشاءEvent
استنادًا إلىState
واتجاه النقل. تمت إضافة طريقةgetTargetState()
التي تقدّمState
الذي ستنتقل إليه رحلة المستخدِم مباشرةً بعدEvent
. (I00887) - تمت إضافة
Lifecycle.withStateAtLeast
واجهة برمجة تطبيقات تنتظر حالة دورة حياة وتعمل بشكل متزامن على تنفيذ كتلة تعليمات برمجية لا تؤدي إلى تعليق الأداء عند نقطة تغيير الحالة، ثم تستأنف التنفيذ مع عرض النتيجة. تختلف واجهات برمجة التطبيقات هذه عن طرقwhen*
الحالية لأنّها لا تسمح بتشغيل رمز تعليق ولا تستعين بموزّع مخصّص. (aosp/1326081)
التغييرات في السلوك
- يفرض LifecycleRegistry الآن
DESTROYED
كحالة نهائية. (I00887) - يتحقّق
LifecycleRegistry
الآن من أنّه يتم استدعاء طرقه في سلسلة المهام الرئيسية. كان ذلك شرطًا دائمًا لمراحل نشاط التطبيقات وأجزاءها وما إلى ذلك. وقد أدّت إضافة مراقبين من سلاسل مهام غير رئيسية إلى حدوث أعطال يصعب رصدها أثناء التشغيل. بالنسبة إلى عناصرLifecycleRegistry
التي تملكها المكوّنات الخاصة بك، يمكنك إيقاف عمليات التحقّق صراحةً باستخدامLifecycleRegistry.createUnsafe(...)
، ولكن عليك بعد ذلك التأكّد من إجراء عملية مزامنة مناسبة عند الوصول إلىLifecycleRegistry
هذا من سلاسل محادثات مختلفة (Ie7280، b/137392809).
إصلاح الأخطاء
- تم إصلاح عطل في
NullSafeMutableLiveData
. (b/159987480) - تم إصلاح
ObsoleteLintCustomCheck
لعمليات التحقّق من Lint المُدمجة معlifecycle-livedata-core-ktx
(وتحديدًاNullSafeMutableLiveData
). (b/158699265)
الإصدار 2.3.0-alpha05
24 حزيران (يونيو) 2020
تم إصدار androidx.lifecycle:lifecycle-*:2.3.0-alpha05
. يحتوي الإصدار 2.3.0-alpha05 على هذه المراجعات.
إصلاح الأخطاء
- يعالج
LiveData
الآن الحالات المتكرّرة بشكل أفضل، ما يتجنّب إجراء مكالمات مكرّرة إلىonActive()
أوonInactive()
. (b/157840298) - تم إصلاح مشكلة تعذُّر تشغيل عمليات التحقّق من Lint عند استخدام الإصدار 4.1 Canary 6 من Android Studio أو إصدار أحدث. (aosp/1331903)
الإصدار 2.3.0-alpha04
10 حزيران (يونيو) 2020
تم إصدار androidx.lifecycle:lifecycle-*:2.3.0-alpha04
. يحتوي الإصدار 2.3.0-alpha04 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح عطل في عملية التحقّق من الأخطاء في
NonNullableMutableLiveData
. (b/157294666) - يشمل فحص
NonNullableMutableLiveData
Lint الآن عددًا أكبر بكثير من الحالات التي تم فيها ضبط قيمةnull
علىMutableLiveData
مع مَعلمة نوع غير فارغة. (b/156002218)
الإصدار 2.3.0-alpha03
20 أيار (مايو) 2020
تم طرح androidx.lifecycle:lifecycle-*:2.3.0-alpha03
. يحتوي الإصدار 2.3.0-alpha03 على هذه المراجعات.
الميزات الجديدة
- يتيح لك
SavedStateHandle
الآن استخدام التسلسل غير المُعجل من خلال السماح لك باستدعاءsetSavedStateProvider()
للحصول على مفتاح معيّن، وتوفيرSavedStateProvider
سيتلقّى مكالمة هاتفية إلىsaveState()
عندما يُطلب منSavedStateHandle
حفظ حالته. (b/155106862) - تتيح لك واجهة برمجة تطبيقات
ViewTreeViewModelStoreOwner.get(View)
الجديدة استردادViewModelStoreOwner
المضمّنة في مثيلView
. يجب الترقية إلى Activity1.2.0-alpha05
وFragment1.3.0-alpha05
وAppCompat1.3.0-alpha01
لملء هذا الحقل بشكل صحيح. تمت إضافة إضافةfindViewModelStoreOwner()
Kotlin إلىlifecycle-viewmodel-ktx
. (aosp/1295522)
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تمنع نشر عمليات التحقّق من الأخطاء في
MutableLiveData
التي تم إصدارها في مرحلة التطوير2.3.0-alpha01
إلى جانب العنصرlifecycle-livedata-core-ktx
. (b/155323109)
الإصدار 2.3.0-alpha02
29 نيسان (أبريل) 2020
تم إصدار androidx.lifecycle:lifecycle-*:2.3.0-alpha02
. يحتوي الإصدار 2.3.0-alpha02 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- يسمح لك
SavedStateViewModelFactory
الآن بتمريرApplication
فارغ إلى عنصر الإنشاء الخاص به لتقديم دعم أفضل للحالات التي لا يتوفّر فيهاApplication
بسهولة ولا يكون هناك حاجة إلى دعمAndroidViewModel
. (aosp/1285740)
إصلاح الأخطاء
- تحسين أداء التشغيل على البارد من خلال تجنُّب تعذُّر التحقّق من الفئة على الأجهزة التي تعمل بالإصدار 28 من واجهة برمجة التطبيقات والإصدارات الأقدم (aosp/1282118)
الإصدار 2.3.0-alpha01
4 آذار (مارس) 2020
تم إصدار androidx.lifecycle:lifecycle-*:2.3.0-alpha01
. يحتوي الإصدار 2.3.0-alpha01 على هذه المراجعات.
الميزات الجديدة
- تتيح لك واجهة برمجة تطبيقات
ViewTreeLifecycleOwner.get(View)
الجديدة استردادLifecycleOwner
المضمّنة في مثيلView
. يجب الترقية إلى النشاط1.2.0-alpha01
والقطعة1.3.0-alpha01
لملء هذا الحقل بشكل صحيح. تتوفّر إضافةfindViewTreeLifecycleOwner
Kotlin فيlifecycle-runtime-ktx
. (aosp/1182361، aosp/1182956) - تمت إضافة عملية تحقّق جديدة من Lint لتحذيرك عند ضبط قيمة
null
علىMutableLiveData
تم تعريفها في Kotlin على أنّها غير فارغة. يتوفّر هذا الخيار عند استخدام العناصرlivedata-core-ktx
أوlivedata-ktx
. (aosp/1154723، aosp/1159092) - يتوفّر عنصر
lifecycle-runtime-testing
جديد يقدّمTestLifecycleOwner
ينفذLifecycleOwner
ويقدّمLifecycle
قابل للتغيير وآمنًا من حيث مؤشرات الترابط. (aosp/1242438)
إصلاح الأخطاء
- أصبح العنصر
lifecycle-runtime
يتضمّن الآن اسم حزمة فريدًا. (aosp/1187196)
الإصدار 2.2.0
الإصدار 2.2.0 من ViewModel-Savedstate
5 شباط (فبراير) 2020
تم إصدار androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
. يحتوي الإصدار 2.2.0 على هذه المراجعات.
يشترك الإصدار الحالي من ViewModel SavedState في Lifecycle مع الإصدار نفسه من عناصر Lifecycle الأخرى. يكون سلوك 2.2.0
مطابقًا لسلوك 1.0.0
.
الإصدار 2.2.0
22 كانون الثاني (يناير) 2020
تم إصدار androidx.lifecycle:lifecycle-*:2.2.0
. يحتوي الإصدار 2.2.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 2.1.0
- دمج وظائف التشغيل المتعدّد في Lifecycle: يضيف العنصر
lifecycle-runtime-ktx
الجديد عملية دمج بين Lifecycle ووظائف التشغيل المتعدّد في Kotlin. تم أيضًا توسيع نطاقlifecycle-livedata-ktx
للاستفادة من وظائف التشغيل المتعدّد. اطّلِع على استخدام مهام Kotlin المتعدّدة المهام مع مكونات البنية للحصول على مزيد من التفاصيل. - إيقاف
ViewModelProviders.of()
نهائيًا: تم إيقافViewModelProviders.of()
نهائيًا. يمكنك تمريرFragment
أوFragmentActivity
إلى عنصر الإنشاءViewModelProvider(ViewModelStoreOwner)
الجديد لتحقيق الوظيفة نفسها عند استخدام العنصر1.2.0
. - إيقاف
lifecycle-extensions
نهائيًا: مع إيقافViewModelProviders.of()
نهائيًا أعلاه، يشير هذا الإصدار إلى إيقاف واجهة برمجة التطبيقات الأخيرة نهائيًا فيlifecycle-extensions
، ويجب اعتبار هذا العنصر غير مستخدم نهائيًا بالكامل. ننصحك بشدة بالاعتماد على عناصر Lifecycle المحدّدة التي تحتاج إليها (مثلlifecycle-service
إذا كنت تستخدمLifecycleService
وlifecycle-process
إذا كنت تستخدمProcessLifecycleOwner
) بدلاً منlifecycle-extensions
لأنّه لن يكون هناك إصدار2.3.0
مستقبلي منlifecycle-extensions
. - معالج التعليقات التوضيحية المتزايد في Gradle: يكون معالج التعليقات التوضيحية في Lifecycle متزايدًا تلقائيًا.
إذا كان تطبيقك مكتوبًا بلغة Java 8، يمكنك استخدام
DefautLifecycleObserver
بدلاً من ذلك. وإذا كان مكتوباً بلغة Java 7، يمكنك استخدامLifecycleEventObserver
.
الإصدار 2.2.0-rc03
4 كانون الأول (ديسمبر) 2019
تم إصدار androidx.lifecycle:lifecycle-*:2.2.0-rc03
. يحتوي الإصدار 2.2.0-rc03 على هذه المساهمات.
إصلاح الأخطاء
- تم إصلاح خطأ كان يحدث عند تخزين
ViewModel
تمّت محاكاته فيViewModelStore
وإجراء طلب بحث لاحقًا باستخدام الإعدادات التلقائية للمصنع. - يجب إصلاح استخدام
Dispatchers.Main.immediate
فيlaunchWhenCreated
والطُرق المشابهة ليتمّ استدعاؤها بشكل متزامن أثناء حدث دورة النشاط المقابل. (aosp/1156203)
المساهمات الخارجية
- نشكر Anders Järleberg على تقديم الإصلاح. (aosp/1156203)
- نشكر Vsevolod Tolstopyatov من Jetbrains على مراجعة تنفيذ التنفيذ المضمّن.
تغييرات التبعيات
- تعتمد الآن "إضافات دورة الحياة" على "الوحدة
1.2.0-rc03
".
الإصدار 2.2.0-rc02
7 تشرين الثاني (نوفمبر) 2019
تم إصدار androidx.lifecycle:lifecycle-*:2.2.0-rc02
. يحتوي الإصدار 2.2.0-rc02 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح خطأ في إعدادات Proguard للمكتبة الذي كان يؤثر في الأجهزة التي تعمل بالإصدار 28 أو الإصدارات الأحدث من واجهة برمجة التطبيقات إذا كان الإصدار المستهدَف من واجهة برمجة التطبيقات أقل من 29. (b/142778206)
الإصدار 2.2.0-rc01
23 تشرين الأول (أكتوبر) 2019
تم إصدار androidx.lifecycle:lifecycle-*:2.2.0-rc01
. يحتوي الإصدار 2.2.0-rc01 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تؤدي إلى تنفيذ
launchWhenCreated
والطُرق ذات الصلة بعد إطار واحد من طريقة دورة الحياة المرتبطة بسبب استخدامهاDispatchers.Main
بدلاً منDispatchers.Main.immediate
. (aosp/1145596)
المساهمات الخارجية
- نشكر "نيكلاس أنسمان" على تقديم الإصلاح. (aosp/1145596)
الإصدار 2.2.0-beta01
9 تشرين الأول (أكتوبر) 2019
تم إصدار androidx.lifecycle:lifecycle-*:2.2.0-beta01
. يحتوي الإصدار 2.2.0-beta01 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة تراجع حدثت في Lifecycle 2.2.0-alpha05 في ترتيب
ProcessLifecycleOwner
وLifecycleOwner
النشاط، حيث تم نقلهما إلى "تم البدء" و"تم الاستئناف" على أجهزة Android 10. (aosp/1128132) - تم إصلاح مشكلة تراجع في الأداء حدثت في مرحلة
2.2.0-alpha05
منNullPointerException
، ما كان سيؤدي إلى حدوثNullPointerException
عند استخدام الإصدار2.0.0
أو2.1.0
منlifecycle-process
. (b/141536990)
الإصدار 2.2.0-alpha05
18 أيلول (سبتمبر) 2019
تم إصدار androidx.lifecycle:lifecycle-*:2.2.0-alpha05
. يحتوي الإصدار 2.2.0-alpha05 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح خطأ تداخل في أداة إنشاء بيانات LiveData المستندة إلى وحدات معالجة المهام المتزامنة. b/140249349
الإصدار 2.2.0-alpha04
5 أيلول (سبتمبر) 2019
تم إصدار androidx.lifecycle:lifecycle-*:2.2.0-alpha04
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
الميزات الجديدة
- تستخدم الآن الرموز
lifecycleScope
وwhenCreated
وwhenStarted
وwhenResumed
وviewModelScope
ورمز التنفيذ الأساسي لرمزliveData
الرمزDispatchers.Main.immediate
بدلاً من الرمزDispatchers.Main
. (b/139740492)
المساهمات الخارجية
- نشكر "نيكلاس أنسمان" على مساهمته في نقل البيانات إلى
Dispatchers.Main.immediate
. (aosp/1106073)
الإصدار 2.2.0-alpha03
7 آب (أغسطس) 2019
تم إصدار androidx.lifecycle:lifecycle-*:2.2.0-alpha03
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
الميزات الجديدة
- يمكن الآن لعمليات تنفيذ
ViewModelStoreOwner
تنفيذHasDefaultViewModelProviderFactory
اختياريًا لتوفيرViewModelProvider.Factory
تلقائي. تم إجراء ذلك في النشاط1.1.0-alpha02
والجزء1.2.0-alpha02
والتنقّل2.2.0-alpha01
. (aosp/1092370، b/135716331)
تغييرات واجهة برمجة التطبيقات
- تم إيقاف
ViewModelProviders.of()
نهائيًا. يمكنك تمريرFragment
أوFragmentActivity
إلى أداة الإنشاءViewModelProvider(ViewModelStoreOwner)
الجديدة لتحقيق الوظيفة نفسها. (aosp/1009889)
الإصدار 2.2.0-alpha02
2 تموز (يوليو) 2019
تم إصدار androidx.lifecycle:*:2.2.0-alpha02
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
تغييرات واجهة برمجة التطبيقات
- تم استبدال
LiveDataScope.initialValue
بـLiveDataScope.latestValue
الذي سيتتبّع القيمة المنبعثة الحالية للوحدةliveData
. - تمت إضافة طريقة تحميل زائدة جديدة إلى أداة إنشاء
liveData
التي تتلقّى المَعلمةtimeout
كنوعDuration
.
الإصدار 2.2.0-alpha01
7 أيار (مايو) 2019
تم إصدار androidx.lifecycle:*:2.2.0-alpha01
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
الميزات الجديدة
- يضيف هذا الإصدار ميزات جديدة تتيح استخدام وظائف Kotlin المتكرّرة مع Lifecycle وLiveData. يمكنك الاطّلاع على مستندات تفصيلية حول هذه الميزة هنا.
الإصدار 1.0.0 من ViewModel-SavedState
الإصدار 1.0.0
22 كانون الثاني (يناير) 2020
تم إصدار androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0
. يحتوي الإصدار 1.0.0 على عمليات الربط هذه.
الميزات المهمة في الإصدار 1.0.0
- تمت إضافة فئة SavedStateHandle الجديدة. ويتيح ذلك لفصولك في
ViewModel
الوصول إلى الحالة المحفوظة والمساهمة فيها. يمكن تلقّي هذا العنصر في رمز إنشاء فئةViewModel
، وسيتم تلقائيًا إدراجSavedStateHandle
من خلال مصانع يوفّرها Fragments وAppCompatActivity بشكلٍ تلقائي. - تمت إضافة AbstractSavedStateViewModelFactory. يتيح لك هذا الإجراء إنشاء مصانع مخصّصة لتطبيقك
ViewModel
ومنح هذا التطبيق إذن الوصول إلىSavedStateHandle
.
الإصدار 1.0.0-rc03 من ViewModel-Savedstate
4 كانون الأول (ديسمبر) 2019
تم إصدار androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
. يحتوي الإصدار 1.0.0-rc03 على عمليات الربط هذه.
تغييرات التبعيات
- يعتمد الآن Lifecycle ViewModel SavedState على Lifecycle
2.2.0-rc03
.
Viewmodel-Savedstate الإصدار 1.0.0-rc02
7 تشرين الثاني (نوفمبر) 2019
تم إصدار androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
. يحتوي الإصدار 1.0.0-rc02 على هذه المراجعات.
تغييرات التبعيات
- يعتمد الآن على مسار التطوير
2.2.0-rc02
.
الإصدار 1.0.0-rc01 من ViewModel-SavedState
23 تشرين الأول (أكتوبر) 2019
تم طرح الإصدار androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
بدون أي تغييرات من الإصدار 1.0.0-beta01
. يحتوي الإصدار 1.0.0-rc01 على هذه المراجعات.
الإصدار 1.0.0-beta01 من ViewModel-Savedstate
9 تشرين الأول (أكتوبر) 2019
تم إصدار androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
. يحتوي الإصدار 1.0.0-beta01 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة تؤدي إلى ظهور
IllegalStateException
عند الوصول إلىActivity.onActivityResult()
ViewModel لأول مرة فيActivity.onActivityResult()
. (b/139093676) - تم إصلاح
IllegalStateException
عند استخدامAbstractSavedStateViewModelFactory
. (b/141225984)
الإصدار 1.0.0-alpha05 من ViewModel-SavedState
18 أيلول (سبتمبر) 2019
تم إصدار androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
. يحتوي الإصدار 1.0.0-alpha05 على عمليات الربط هذه.
تغييرات واجهة برمجة التطبيقات
- لم يعُد
SavedStateViewModelFactory
يمتد إلىAbstractSavedStateViewModelFactory
، ولا يتم إنشاءSavedStateHandle
إلا لـ ViewModels التي طلبت الحصول عليه (aosp/1113593).
الإصدار 1.0.0-alpha03 من ViewModel-SavedState
7 آب (أغسطس) 2019
تم إصدار androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
التغييرات التي قد تؤدي إلى حدوث أعطال
- لم يعُد
lifecycle-viewmodel-savedstate
يعتمد علىfragment
، وتمّت إزالة منشئيSavedStateViewModelFactory(Fragment)
وSavedStateViewModelFactory(FragmentActivity)
المرتبطَين. بدلاً من ذلك، أصبحSavedStateViewModelFactory
الآن المصنع التلقائي لنشاط1.1.0-alpha02
والوحدة1.2.0-alpha02
والتنقّل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 عنصر إنشاء يتلقّىSavedStateHandle
object كمَعلمة.
الإصدار 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
مع الميزات الجديدة، مثل تفويض السمات في Kotlinby viewmodels {}
. (aosp/914133)
الإصدار 2.1.0-alpha02
30 كانون الثاني (يناير) 2019
تم إصدار androidx.lifecycle 2.1.0-alpha02
.
تغييرات واجهة برمجة التطبيقات
- يحتوي
LifecycleRegistry
الآن على طريقةsetCurrentState()
تحلّ محلّ طريقةsetState()
التي تم إيقافها نهائيًا. (aosp/880715)
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تؤدي إلى تعطُّل نُسخ
ViewModel
المحاكية عند محوViewModelStore
التي تحتوي عليها. b/122273087
الإصدار 2.1.0-alpha01
17 كانون الأول (ديسمبر) 2018
تم إصدار androidx.lifecycle 2.1.0-alpha01
.
الميزات الجديدة
- تمت إضافة
LifecycleEventObserver
للحالات التي تتطلّب بثًا لأحداث دورة الحياة. وهي واجهة برمجة تطبيقات عامة بدلاً من فئةGenericLifecycleObserver
مخفية. - تمت إضافة إضافات ktx لطرق
LiveData.observe
وTransformations.*
. - تمت إضافة الطريقة
Transformations.distinctUntilChanged
. ينشئ هذا الإجراء عنصرًا جديدًا من النوعLiveData
لا يُرسِل قيمة إلى أن يتم تغيير قيمة LiveData المصدر. - إتاحة استخدام المهام المتكررة في ViewModels: تمت إضافة سمة الإضافة
ViewModel.viewModelScope
. - تمت إضافة
ViewModelProvider.KeyedFactory
، وهو مصنع لـ ViewModels يتلقّىkey
وClass
في طريقةcreate
.
الإصدار 2.0.0
الإصدار 2.0.0
21 أيلول (سبتمبر) 2018
تم إصدار Lifecycle 2.0.0
مع تصحيح خطأ واحد من 2.0.0-rc01
في ViewModel.
إصلاح الأخطاء
- تم إصلاح قاعدة Proguard في ViewModel التي أزالت بشكل غير صحيح وظائف الإنشاء b/112230489
الإصدار 2.0.0-beta01
2 تموز (يوليو) 2018
إصلاح الأخطاء
- تم إصلاح قاعدة Proguard الخاصة بـ LifecycleObserver للاحتفاظ بالعمليات التنفيذية فقط، وليس الواجهات الفرعية b/71389427
- تم إصلاح قواعد Proguard في ViewModel للسماح بالتشويه والتصغير
الإصدارات الأقدم من AndroidX
بالنسبة إلى إصدارات Lifecycle التي تسبق AndroidX والتي تلي ذلك، يجب تضمين التبعيات التالية:
dependencies {
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
// alternately - if using Java8, use the following instead of compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
الإصدار 1.1.1
21 آذار (مارس) 2018
تغيير بسيط واحد فقط: تم نقل android.arch.core.util.Function
من arch:runtime
إلى arch:common
. يتيح ذلك استخدامه بدون التبعية لوقت التشغيل، على سبيل المثال في paging:common
أدناه.
lifecycle:common
هو عنصر تابع لـ lifecycle:runtime
، لذا لا يؤثر هذا التغيير في lifecycle:runtime
مباشرةً، بل في الوحدات التي تعتمد على lifecycle:common
مباشرةً، مثل Paging.
الإصدار 1.1.0
22 كانون الثاني (يناير) 2018
تغييرات على التغليف
تتوفّر الآن تبعيات جديدة أصغر حجمًا بكثير:
android.arch.lifecycle:livedata:1.1.0
android.arch.lifecycle:viewmodel:1.1.0
تغييرات واجهة برمجة التطبيقات
- تمّت الآن إزالة العنصرَين
LifecycleActivity
وLifecycleFragment
اللذَين تم إيقافهما نهائيًا. يُرجى استخدامFragmentActivity
أوAppCompatActivity
أوFragment
. - تمت إضافة
@NonNull
تعليقات توضيحية إلىViewModelProviders
وViewModelStores
- تم إيقاف
ViewModelProviders
constructor نهائيًا، يُرجى استخدام طرقه الثابتة مباشرةً. - تم إيقاف
ViewModelProviders.DefaultFactory
نهائيًا، يُرجى استخدامViewModelProvider.AndroidViewModelFactory
- تمت إضافة الطريقة الثابتة
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
لاستردادFactory
ثابت مناسب لإنشاء نُسخ منViewModel
وAndroidViewModel
.