مراحل النشاط
يعرض هذا الجدول جميع العناصر في مجموعة androidx.lifecycle
.
العناصر | الإصدار المستقر | إصدار مرشح | الإصدار التجريبي | إصدار ألفا |
---|---|---|---|---|
دورة الحياة-* | 2.7.0 | - | الإصدار 2.8.0 -beta01 | - |
إنشاء نموذج عرض دورة الحياة | 2.7.0 | - | الإصدار 2.8.0 -beta01 | - |
إعلان التبعيات
لإضافة تبعية إلى دورة الحياة، يجب إضافة مستودع Maven إلى مشروعك. لمزيد من المعلومات، يمكنك الاطّلاع على مستودع Maven من Google.
أضف التبعيات للعناصر التي تحتاجها في ملف build.gradle
لتطبيقك أو الوحدة الخاصة بك:
Kotlin
رائع
dependencies { def lifecycle_version = "2.7.0" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // 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.7.0" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Java
رائع
dependencies { def lifecycle_version = "2.7.0" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.7.0" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
لمزيد من المعلومات حول التبعيات، يُرجى الاطّلاع على مقالة إضافة تبعيات الإصدار.
ملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إخبارنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة تصويتك إلى مشكلة حالية من خلال النقر على زر النجمة.
راجِع مستندات أداة تتبُّع المشاكل للحصول على مزيد من المعلومات.
الإصدار 2.8
الإصدار 2.8.0-beta01
17 نيسان (أبريل) 2024
تم طرح "androidx.lifecycle:lifecycle-*:2.8.0-beta01
". يتضمّن الإصدار 2.8.0-الإصدار التجريبي 01 هذه الالتزامات.
الميزات الجديدة
- يتوافق عنصر
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)
لاستيعاب هذا التغيير، أصبح لدى الطُرق الآن طريقة مكافئة تستخدم kotlin.reflect.KClass<T>
، مثل الطرق في ViewModelProvider
التي استخدمت java.lang.Class<T>
.
وقد تم الحفاظ على التوافق الثنائي على Android، إلا أنّ هناك بعض التغييرات الملحوظة عند مقارنة سطح واجهة برمجة تطبيقات Android بسطح واجهة برمجة التطبيقات الشائع:
- يتم الآن إنشاء مثيل
ViewModelProvider
من خلال الطرقViewModelProvider.create()
بدلاً من استدعاء الدالة الإنشائية مباشرةً. - تتوفّر
ViewModelProvider.NewInstanceFactory
وViewModelProvider.AndroidViewModelFactory
على أجهزة Android فقط.- يُنصَح بتوسيع نطاق بيانات المصانع المخصّصة من
ViewModelProvider.Factory
واستخدام طريقةcreate
التي تستخدمCreationExtras
أو تستخدمviewModelFactory
Kotlin DSL.
- يُنصَح بتوسيع نطاق بيانات المصانع المخصّصة من
- سيؤدي استخدام "
ViewModelProvider
" بدون تخصيص المصنع على منصات غير JVM إلىUnsupportedOperationException
. وفي منصات JVM، يتم الحفاظ على التوافق باستخدام الدالة الإنشائية ViewModel غير التابعة لوسيطات إذا لم يتم توفير مصنع مخصص. viewModelScope
سيتم الرجوع إلىEmptyCoroutineContext
في الأنظمة الأساسية التي لا تتوفر فيهاDispatchers.Main
(مثل Linux).
التغييرات في السلوك
- ستعرِض دالة
InitializerViewModelFactory
الآن (بما في ذلك دالة الإنشاءviewModelFactory
) الخطأIllegalArgumentException
إذا سبق أن تمت إضافةinitializer
معclazz: KClass<VM : ViewModel>
نفسها. (Ic3a36)
إصلاح الأخطاء
- يتعامل
ViewModel.getCloseable
الآن مع المفاتيح المكرّرة: إذا كانkey
يحتوي حاليًا على موردAutoCloseable
مرتبط به، سيتم استبدال المورد القديم وإغلاقه على الفور. (Ibeb67) - الدخول إلى
viewModelScope
لـViewModel
أصبح الآن آمنًا. (If4766، b/322407038)
المساهمة الخارجية
- تم نقل
LocalLifecycleOwner
من واجهة المستخدم Compose إلى مرحلة التشغيل في مراحل النشاط وبالتالي يمكن استخدام واجهات برمجة التطبيقات المساعد المستندة إلى 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
المحدّد. على سبيل المثال، يمكن استخدام هذا الإعداد مع ميزة "إنشاء التنقل" لتجنب معالجة أحداث النقر بعد بدء الانتقال إلى شاشة أخرى مسبقًا: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 للمساعدة في نقل دورة الحياة إلى 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
فيLiveData
، سيتم استدعاء الدالةmap
/switchMap
على الفور لتعبئةvalue
لعرضLiveData
.value
يضمن ذلك ضبط القيمة الأولية كجزء من أوّل مقطوعة موسيقية (عند استخدامها معobserveAsState()
)، ولكن لا يؤدي إلى تغيير سلوك الملاحظة، لأنّ قيم التعديلات من المصدرLiveData
لن يتم تطبيقها إلا بعد بدء ملاحظةLiveData
. - يعمل هذا الإصدار على إصلاح المشكلة المتمثلة في عدم استعادة
SavedStateHandle
لصفوفParcelable
المخصّصة بشكل سليم بعد إيقاف العملية أو إعادة الترفيه. بسبب عدم توفُّر بعض المعلومات في إطار عمل Android، تتطلّب صفائف البيانات المخصّصة جهدًا إضافيًا (إنشاء مصفوفة مكتوبة من النوع الصحيح يدويًا) والمستندات علىget
وgetLiveData
وgetStateFlow
تستدعي الآن هذا القيد على وجه التحديد. - تمت إزالة قواعد الاحتفاظ بالبيانات المرتبطة بحساب
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، تتطلّب صفائف البيانات المخصّصة جهدًا إضافيًا (إنشاء مصفوفة مكتوبة من النوع الصحيح يدويًا) والمستندات على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
السابقة، ما يضمن أنّ استخدام البيانات المباشرة الناتجة في 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
" استنادًا إلى معاودة الاتصال لحدثَي "Lifecycle.Event.ON_RESUME
" و"Lifecycle.Event.ON_PAUSE
". (I60386، b/235529345) - تمت إضافة واجهة برمجة التطبيقات
LifecycleStartEffect
لتشغيل ميزة "إنشاءSideEffect
" استنادًا إلى معاودة الاتصال للحدثَينLifecycle.Event.ON_START
وLifecycle.Event.ON_STOP
. (I5a8d1، b/235529345) - تمت إضافة واجهة برمجة التطبيقات
LifecycleEventEffect
لتشغيل ComposeSideEffect
استنادًا إلى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) - تمت إزالة قواعد الاحتفاظ بالبيانات المرتبطة بحساب
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) - تعتمد دورة حياة الآن على 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: تم تحويل عدد كبير من فئات مراحل النشاط إلى لغة Kotlin. لا تزال كل الصفوف التي تم تحويلها تحتفظ بتوافقها الثنائي مع الإصدارات السابقة. تتضمّن الصفوف التالية تغييرات غير متوافقة مع الصفوف المكتوبة بلغة Kotlin:
ViewTreeLifecycleOwner
وLiveDataReactiveStreams
وHasDefaultViewModelProviderFactory
وViewTreeViewModelStoreOwner
وTransformations
وViewModelStoreOwner
وLifecycleOwner
.
يقدّم الجدول أدناه الإحالات الناجحة المصدر للإصدار الجديد من مراحل النشاط.
دورة الحياة 2.5 | Lifecycle 2.5 (KTX) | دورة الحياة 2.6 |
---|---|---|
Transformations.switchMap(liveData) {...} |
liveData.switchMap {...} |
liveData.switchMap {...} |
Transformations.map(liveData) {...} |
liveData.map {...} |
liveData.map {...} |
Transformations.distinctUntilChanged(liveData) {...} |
liveData.distinctUntilChanged{...} |
liveData.distinctUntilChanged{...} |
LiveDataReactiveStreams.fromPublisher(publisher) |
publisher.toLiveData() |
publisher.toLiveData() |
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) |
liveData.toPublisher(lifecycleOwner) |
liveData.toPublisher(lifecycleOwner) |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override val defaultViewModelProviderFactory = factory |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override val defaultViewModelProviderCreationExtras = extras |
ViewTreeLifecycleOwner.set(view, owner) |
ViewTreeLifecycleOwner.set(view, owner) |
view.setViewTreeLifecycleOwner(owner) |
ViewTreeLifecycleOwner.get(view) |
view.findViewTreeLifecycleOwner() |
view.findViewTreeLifecycleOwner() |
override fun getViewModelStore(): ViewModelStore = store |
override fun getViewModelStore(): ViewModelStore = store |
override val viewModelStore: ViewModelStore = store |
override fun getLifecycle(): Lifecycle = registry |
override fun getLifecycle(): Lifecycle = registry |
override val lifecycle: Lifecycle get() = registry |
- إنّ قابلية القيم الفارغة لطريقة
onChanged
لـObserver
التي تم إنشاؤها في Kotlin أصبحت الآن مطابقة لقيم القيم الفارغة للنوع العام. إذا كنت تريد أن تقبلObserver.onChanged()
نوعًا قابلاً للقيم الفارغة، يجب إنشاء مثيل لـObserver
باستخدام نوع قابل للقيم الفارغة. - تم تحويل هذه الصفوف أيضًا إلى Kotlin، ولكنها ستظل متوافقة مع المصادر:
DefaultLifecycleObserver
وLifecycleEventObserver
وLifecycle
وLifecycleRegistry
وLifecycleObserver
وViewModelStore
وAndroidViewModel
وAbstractSavedStateViewModelFactory
وLifecycleService
وServiceLifecycleDispatcher
وProcessLifecycleOwner
.
الإصدار 2.6.0-rc01
22 شباط (فبراير) 2023
تم طرح "androidx.lifecycle:lifecycle-*:2.6.0-rc01
". يحتوي الإصدار 2.6.0-rc01 على هذه الالتزامات.
إصلاح الأخطاء
- تضبط الإضافة
LiveData.distinctUntilChanged()
الآنvalue
للسمةLiveData
المعروضة إذا كان قد تم ضبط قيمة للسمةLiveData
السابقة. لا يؤدي ذلك إلى تغيير سلوك الملاحظة، لأنّ القيم المعدَّلة من المصدرLiveData
لن يتم تطبيقها إلا بعد بدء ملاحظةLiveData
التي تم عرضها منdistinctUntilChanged()
. (Ib482f)
الإصدار 2.6.0-beta01
8 شباط (فبراير) 2023
تم طرح "androidx.lifecycle:lifecycle-*:2.6.0-beta01
". يتضمّن الإصدار 2.6.0-beta01 هذه الالتزامات.
إحالات Kotlin الناجحة
- تمت كتابة
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 وI59a21829/2) و{49a21829/2}.
إصلاح الأخطاء
- لم يعُد الخطأ "
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
الآن قيودًا تضمن أن جميع العناصر المترابطة في مراحل النشاط تستخدم الإصدار نفسه، ما يؤدي تلقائيًا إلى ترقية التبعيات الأخرى عند ترقية أحدها. 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()
تعرض KotlinStateFlow
لمراقبة التغييرات في القيمة كبديل لاستخدام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
من حيث مبدئي واحد أو أكثر من مهيئات lambda، واحدة لكل فئةViewModel
محدّدة يتوافق معها المصنع المخصّص، باستخدامCreationExtras
كمصدر أساسي للبيانات.val customFactory = viewModelFactory { // The return type of the lambda automatically sets what class this lambda handles initializer { // Get the Application object from extras provided to the lambda val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY)) HomeViewModel(application) } initializer { val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) } }
يوفّر "
lifecycle-viewmodel-compose
" الآن واجهة برمجة تطبيقاتviewModel()
تستخدم مصنع lambda لإنشاء مثيلViewModel
بدون الحاجة إلى إنشاءViewModelProvider.Factory
مخصّص.// Within a @Composable, you can now skip writing a custom Factory // and instead write a lambda to do the initialization of your ViewModel val detailViewModel = viewModel { // This lambda is only called the first time the ViewModel is created // and all CreationExtras are available inside the lambda val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }
SavedStateHandle Compose Saver Integration: يحتوي العنصر
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
بعد الآن عند مزج الإصدارات السابقة من تبعيات دورة حياة التجميع فقط مع الإصدار 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)
إصلاح الأخطاء
- تم إصلاح المشكلة المتمثلة في دمج
NavHost
واحد معNavHost
أخرى في علامة تبويب تنقُّل أسفل الشاشة غير أساسية سيؤدي إلىIllegalStateException
عند استخدام حزم بيانات سابقة متعددة. (I11bd5، b/228865698)
الإصدار 2.5.0-alpha06
6 نيسان (أبريل) 2022
تم طرح "androidx.lifecycle:lifecycle-*:2.5.0-alpha06
". يحتوي الإصدار 2.5.0-alpha06 على هذه الالتزامات.
الميزات الجديدة
- أضف حمل
MutableState
التجريبي إلىSavedStateHandle.saveable
لتحقيق التكافؤ معrememberSaveable
(I38cfe، b/224565154)
تغييرات واجهة برمجة التطبيقات
- "
CreationExtras
" الآن مجرد صورة تجريدية بدلاً من إغلاقها. (Ib8a7a)
إصلاح الأخطاء
- تم إصلاح خطأ
IllegalStateException: Already attached to lifecycleOwner
الناتج عنSavedStateHandleController
. (I7ea47، b/215406268)
الإصدار 2.5.0-alpha05
23 آذار (مارس) 2022
تم طرح "androidx.lifecycle:lifecycle-*:2.5.0-alpha05
". يحتوي الإصدار 2.5.0-alpha05 على هذه الالتزامات.
الميزات الجديدة
- توفّر الوحدة
lifecycle-viewmodel-compose
الآنSavedStateHandleSaver
، وهي واجهة برمجة تطبيقات تجريبية تضمن دمج القيم فيSavedStateHandle
بشكل صحيح مع حالة النسخة الافتراضية المحفوظة نفسها التي يستخدمهاrememberSaveable
. (Ia88b7، b/195689777)
تغييرات واجهة برمجة التطبيقات
- تم إصلاح مشكلة التوافق مع مراحل النشاط 2.3 والإصدارات الأحدث من مراحل النشاط في 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()
تعرض 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
بدون الحاجة إلى إنشاء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) - يمكن الآن أن تحتوي معلَمة الدالة
switchMap
LiveData
على ناتج قابل للقيم الفارغة. (I40396، b/132923666) - تتم الآن إضافة تعليقات توضيحية إلى امتدادات
LiveData
-ktx باستخدام@CheckResult
لفرض استخدام النتيجة عند استدعاء هذه الدوال. (Ia0f05، b/207325134)
التغييرات في السلوك
- تخزِّن
SavedStateHandle
الآن القيمة التلقائية بشكل صحيح عند عدم توفّر أي قيمة للمفتاح المحدّد. (I1c6ce، b/178510877)
إصلاح الأخطاء
- من دورة الحياة
2.4.1
: تم تحديثlifecycle-process
للاعتماد على Startup 1.1.1 لضمان توفُّر الإصلاحات التي تمنعProcessLifecycleInitializer
من طرحStartupException
بشكل تلقائي. (Ib01df، b/216490724) - تظهر الآن رسالة خطأ محسّنة عندما تحتوي فئات
AndroidViewModel
المخصّصة على معلَمات بترتيب غير صحيح وتحاول إنشاءViewModel
. (I340f7، b/177667711) - يمكنك الآن إنشاء نموذج عرض من خلال
CreationExtras
باستخدامAndroidViewModelFactory
بدون ضبط تطبيق. (I6ebef، b/217271656)
الإصدار 2.5.0-alpha01
26 يناير 2022
تم طرح "androidx.lifecycle:lifecycle-*:2.5.0-alpha01
". يحتوي الإصدار 2.5.0-alpha01 على هذه الالتزامات.
ViewModel CreationExtras
في هذا الإصدار، نضع الأساس لإعادة هيكلة طريقة عمل ViewModel
. بدلاً من استخدام مجموعة صارمة من الفئات الفرعية من ViewModelProvider.Factory
التي تضيف كل منها وظائف إضافية (ما يسمح بمعلَمة الدالة الإنشائية Application
من خلال AndroidViewModelFactory
، ما يسمح بمعلَمة الدالة الإنشائية SavedStateHandle
عبر SavedStateViewModelFactory
وAbstractSavedStateViewModelFactory
وما إلى ذلك)، نحن بصدد الانتقال إلى عالم من المصانع عديمة الحالة التي تعتمد على مفهوم جديد، وهو CreationExtras
. (Ia7343 وb/188691010 وb/188541057)
بفضل هذا التغيير، لن يتمكن "ViewModelProvider
" من استخدام طريقة create(Class<T>)
السابقة في ViewModelProvider.Factory
. بدلاً من ذلك، يستدعي حملاً زائدًا جديدًا من create
: create(Class<T>, CreationExtras)
. يعني ذلك أنّ أي تنفيذ مباشر لمثيل ViewModelProvider.Factory
يمكنه الآن الوصول إلى كل من CreationExtras
الجديدة هذه:
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
: يتيح جهاز "String
" هذا إمكانية الوصول إلى المفتاح المخصّص الذي نقلته إلى "ViewModelProvider.get()
".- يتيح "
ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
" الوصول إلى الصفApplication
. - تتيح
SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
إمكانية الوصول إلىSavedStateRegistryOwner
الذي يتم استخدامه لإنشاء ViewModel هذا. - تتيح
SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
إمكانية الوصول إلىViewModelStoreOwner
الذي يتم استخدامه لإنشاء ViewModel هذا. - تتيح
SavedStateHandleSupport.DEFAULT_ARGS_KEY
إمكانية الوصول إلىBundle
من الوسيطات التي يجب استخدامها لإنشاءSavedStateHandle
.
يتم توفير هذه الميزات الإضافية بشكل تلقائي عند استخدام النشاط 1.5.0-alpha01
والجزء 1.5.0-alpha01
والتنقل 2.5.0-alpha01
. في حال استخدام إصدار سابق من هذه المكتبات، سيكون CreationExtras
فارغًا، وستتم إعادة كتابة كل الفئات الفرعية الحالية من ViewModelProvider.Factory
لتوفير كل من مسار الإنشاء القديم الذي تستخدمه الإصدارات السابقة من تلك المكتبات ومسار CreationExtras
الذي سيتم استخدامه من الآن فصاعدًا.
تتيح لك CreationExtras
هذه إنشاء ViewModelProvider.Factory
يمرِّر فقط المعلومات المطلوبة إلى كل ViewModel
بدون الاعتماد على تسلسل هرمي صارم للفئات الفرعية للمنتجات الأصلية:
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
}
}
نستخدم دالة إضافة Kotlin createSavedStateHandle()
في CreationExtras
من SavedStateHandleSupport
لإنشاء SavedStateHandle
فقط لـ ViewModel الوحيد الذي يحتاج إليها. (Ia6654، b/188541057)
يمكن توفير CreationExtras
مخصّص عن طريق إلغاء getDefaultViewModelCreationExtras()
في ComponentActivity
أو Fragment
، ما يجعلها متوفرة ViewModelProvider.Factory
المخصّصة كشكل مدمج من الحقن المدعوم. ستتم إتاحة هذه الميزات الإضافية تلقائيًا لمصنعك المخصص عند استخدامها مباشرةً مع ViewModelProvider
أو عند استخدام إضافات مواقع by viewModels()
وby activityViewModels()
Kotlin. (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
تسمح باستخدام قيم عامة قابلة للتعديل.
- تغيير جذري: تمت إعادة كتابة اللغة
- تمّت إضافة واجهة برمجة تطبيقات coroutines جديدة إلى
androidx.lifecycle:lifecycle-runtime-ktx
: Lifecycle.repeatOnLifecycle
، هي واجهة برمجة تطبيقات تنفّذ مجموعة من الرموز في كورروتين عندما تكون دورة الحياة في حالة معيّنة على الأقل. سيتم إلغاء الحظر وإعادة تشغيله مع انتقال دورة الحياة داخل الحالة المستهدَفة وخارجها.Flow.flowWithLifecycle
، هي واجهة برمجة تطبيقات تنبعث منها قيم من عملية البث عندما تكون دورة حياة المنتج في حالة معيّنة على الأقل.- تم نقل "
DefaultLifecycleObserver
" منlifecycle.lifecycle-common-java8
إلىlifecycle.lifecycle-common
. لم تعُدlifecycle.lifecycle-common-java8
توفّر أي وظائف إضافية بالإضافة إلىlifecycle.lifecycle-common
، لذلك يمكن استبدال الاعتمادية عليها بـlifecycle.lifecycle-common
. - تم نقل واجهة برمجة التطبيقات غير الكوروتينية من
lifecycle-viewmodel-ktx
إلى الوحدةlifecycle-viewmodel
. يستخدم
lifecycle-process
الآنandroidx.startup
لإعدادProcessLifecycleOwner
.كانت تتم هذه العملية سابقًا من قِبل "
androidx.lifecycle.ProcessLifecycleOwnerInitializer
".إذا كنت قد استخدمت
tools:node="remove"
ContentProvider
التي تم استخدامها لإعداد دورة حياة العملية في الماضي، عليك إجراء ما يلي بدلاً من ذلك.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(أو)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
الإصدار 2.4.0-rc01
29 أيلول (سبتمبر) 2021
تم إطلاق androidx.lifecycle:lifecycle-*:2.4.0-rc01
بدون أي تغييرات من مراحل النشاط 2.4.0 إلى الإصدار التجريبي 01. يحتوي الإصدار 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) - تم نقل Default LifecycleMonitorer من "
androidx.lifecycle.lifecycle-common-java8
" إلىandroidx.lifecycle.lifecycle-common
. لم تعُد السمةandroidx.lifecycle.lifecycle-common-java8
توفّر أي وظائف إضافية بالإضافة إلىandroidx.lifecycle.lifecycle-common
، لذلك يمكن استبدال الاعتمادية عليها بـandroidx.lifecycle.lifecycle-common
. (I021aa) - تم نقل واجهة برمجة التطبيقات غير coroutines من
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
تسمح باستخدام قيم عامة. (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
عند استخدام العلامات العامة. (#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
الجديدة أيضًا. (I0f4cd)
إصلاح الأخطاء
- من دورة الحياة 2.3.1: يمكن لقاعدة
NonNullableMutableLiveData
الوبر الآن أن تميز بشكل صحيح بين متغيرات الحقل ذات قيم صفرية مختلفة. (b/169249668)
الإصدار 1.0.0 من إنشاء نموذج عرض لمراحل النشاط
الإصدار 1.0.0-alpha07
16 حزيران (يونيو) 2021
تم طرح "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
". يحتوي الإصدار 1.0.0-alpha07 على هذه الالتزامات.
أعطال في واجهة برمجة التطبيقات
- أصبح
viewModel()
الآنViewModelStoreOwner
اختياري، ما يُسهّل التعامل مع المالكين بخلافLocalViewModelStoreOwner
. على سبيل المثال، يمكنك الآن استخدامviewModel(navBackStackEntry)
لاسترداد عرض ViewModel المرتبط برسم بياني معيّن للتنقُّل. (I2628d، b/188693123)
الإصدار 1.0.0-alpha06
2 حزيران (يونيو) 2021
تم طرح "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
". يحتوي الإصدار 1.0.0-alpha06 على هذه الالتزامات.
تم تحديث التطبيق ليصبح متوافقًا مع إصدار ComposeAllowed 1.0.0-beta08
.
الإصدار 1.0.0-alpha05
18 أيار (مايو) 2021
تم طرح "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
". يحتوي الإصدار 1.0.0-alpha05 على هذه الالتزامات.
الميزات الجديدة
- تم تحديث التطبيق ليصبح متوافقًا مع إصدار ComposeAllowed
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 من دورة الحياة-عرض النموذج-إنشاء
24 شباط (فبراير) 2021
تم طرح "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
". يحتوي الإصدار 1.0.0-alpha02 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- يتضمّن
LocalViewModelStoreOwner
الآن دوالprovides
يمكن استخدامها معCompositionLocalProvider
، بدلاً منasProvidableCompositionLocal()
API. (I45d24)
الإصدار 1.0.0-alpha01 من دورة الحياة-عرض النموذج-إنشاء
10 شباط (فبراير) 2021
تم طرح "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
". يحتوي الإصدار 1.0.0-alpha01 على هذه الالتزامات.
الميزات الجديدة
- تم نقل
viewModel()
القابل للإنشاء وLocalViewModelStoreOwner
منandroidx.compose.ui.viewinterop
إلى هذا العنصر في حزمةandroidx.lifecycle.viewmodel.compose
. (I7a374)
الإصدار 2.3.1
الإصدار 2.3.1 من دورة الحياة
24 آذار (مارس) 2021
تم طرح "androidx.lifecycle:lifecycle-*:2.3.1
". يتضمّن الإصدار 2.3.1 هذه الالتزامات.
إصلاح الأخطاء
- يمكن الآن لقاعدة
NonNullableMutableLiveData
Lint الآن التفريق بشكل صحيح بين متغيرات الحقول باستخدام قيم مختلفة للقيم الفارغة. (b/169249668)
الإصدار 2.3.0
الإصدار 2.3.0
10 شباط (فبراير) 2021
تم طرح "androidx.lifecycle:lifecycle-*:2.3.0
". يتضمّن الإصدار 2.3.0 هذه الالتزامات.
التغييرات الرئيسية منذ الإصدار 2.2.0
- إتاحة
SavedStateHandle
للفئات غير القابلة للدمج: يتيحSavedStateHandle
الآن استخدام التسلسل الكسول من خلال السماح لك بالاتصال بـsetSavedStateProvider()
لمفتاح معيّن، ما يوفّرSavedStateProvider
التي يتم فيها معاودة الاتصال إلىsaveState()
عندما يُطلَب منSavedStateHandle
حفظ حالته. راجِع حفظ الصفوف غير القابلة للدمج. - تنفيذ سلوك مراحل الحياة:
- يفرض LifecycleRegistry الآن
DESTROYED
كحالة طرفية. - يتحقّق
LifecycleRegistry
الآن من طلب طرقه في سلسلة التعليمات الرئيسية. وكان هذا الأمر دائمًا مطلوبًا لدورات حياة الأنشطة والأجزاء وغيرها. وقد أدت إضافة أدوات مراقبة من سلاسل التعليمات غير الرئيسية إلى صعوبة رصد الأعطال في وقت التشغيل. بالنسبة إلى عناصرLifecycleRegistry
التي تملكها مكوّناتك الخاصة، يمكنك إيقاف عمليات التحقّق صراحةً باستخدامLifecycleRegistry.createUnsafe(...)
، ولكن عليك بعد ذلك التأكّد من تفعيل المزامنة الصحيحة عند الوصول إلىLifecycleRegistry
هذا من سلاسل محادثات مختلفة.
- يفرض 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
. يجب الترقية إلى النشاط1.2.0
والجزء1.3.0
وAppCompat 1.3.0-alpha01 أو إصدار أحدث لتعبئة هذه المعلومات بشكل صحيح. تتوفّر إضافتاfindViewTreeLifecycleOwner
وfindViewTreeViewModelStoreOwner
Kotlin على التوالي فيlifecycle-runtime-ktx
وlifecycle-viewmodel-ktx
. - إيقاف إضافة
LiveData.observe()
Kotlin: تم الآن إيقاف إضافةLiveData.observe()
Kotlin اللازمة لاستخدام بنية lambda، لأنّها ليست ضرورية عند استخدام الإصدار 1.4 من Kotlin.
الإصدار 2.3.0-rc01
16 كانون الأول (ديسمبر) 2020
تم طرح "androidx.lifecycle:lifecycle-*:2.3.0-rc01
". يتضمّن الإصدار 2.3.0-rc01 هذه الالتزامات.
إصلاح الأخطاء
- أصبحت طريقة
keys()
فيSavedStateHandle
متسقة الآن قبل حفظ الحالة وبعدها، وتتضمّن الآن المفاتيح التي سبق استخدامها معsetSavedStateProvider()
بالإضافة إلى المفاتيح المستخدَمة معset()
وgetLiveData()
. (aosp/1517919، b/174713653)
المساهمة الخارجية
- يمكن الآن لواجهات برمجة التطبيقات المخصصة لتعليق الكوروتينات المستندة إلى دورة الحياة معالجة الطلبات بشكل أفضل في
yield()
. شكرًا نيكلاس أنسمان جيرتز. (aosp/1430830، b/168777346)
الإصدار 2.3.0-beta01
1 تشرين الأول (أكتوبر) 2020
تم طرح "androidx.lifecycle:lifecycle-*:2.3.0-beta01
". يتضمّن الإصدار 2.3.0-beta01 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- إنّ إضافة
LiveData.observe()
Kotlin الضرورية لاستخدام بناء جملة lambda تم إيقافها نهائيًا، لأنها ليست ضرورية عند استخدام Kotlin 1.4. (I40d3f)
إصلاح الأخطاء
- يجب ترقية androidx لاستخدام Kotlin 1.4 (Id6471 وb/165307851 وb/165300826).
التغييرات في المستندات
- تم تعديل أداة إنشاء
liveData
وasLiveData()
مستندات لتتضمن تفاصيل حول تغيير قيم المهلة المحددة. (aosp/1122324)
الإصدار 2.3.0-alpha07
19 آب (أغسطس) 2020
تم طرح "androidx.lifecycle:lifecycle-*:2.3.0-alpha07
". يحتوي الإصدار 2.3.0-alpha07 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح مشكلة تعطُّل في عملية تحقّق من Lint في "
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 عند استخدام Android Studio 4.1 Canary 6 أو الإصدارات الأحدث. (aosp/1331903)
الإصدار 2.3.0-alpha04
10 حزيران (يونيو) 2020
تم طرح "androidx.lifecycle:lifecycle-*:2.3.0-alpha04
". يحتوي الإصدار 2.3.0-alpha04 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح عُطل في عملية تحقّق من Lint في
NonNullableMutableLiveData
. (b/157294666) - تشمل عملية التحقّق من لينت في
NonNullableMutableLiveData
الآن عددًا أكبر بكثير من الحالات التي تم فيها ضبط قيمة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
. يجب الترقية إلى النشاط1.2.0-alpha05
والجزء1.3.0-alpha05
وAppCompat1.3.0-alpha01
لتعبئة هذا بشكلٍ صحيح. تمت إضافة إضافةfindViewModelStoreOwner()
Kotlin إلىlifecycle-viewmodel-ktx
. (aosp/1295522)
إصلاح الأخطاء
- تم إصلاح مشكلة تسبّبت في نشر عمليات التحقّق من Lint في
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
فارغة إلى الدالة الإنشائية الخاصة بها لتوفير دعم أفضل للحالات التي لا يكون فيها أحدها متاحًا بسهولة ولا يكون دعم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
لتعبئة هذا بشكل صحيح. تتوفّر إضافة KotlinfindViewTreeLifecycleOwner
في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 هذه الالتزامات.
تشارك ميزة Lifecycle ViewModel SaveState الآن الإصدار نفسه مع عناصر دورة الحياة الأخرى. يتطابق سلوك 2.2.0
مع سلوك 1.0.0
.
الإصدار 2.2.0
22 كانون الثاني (يناير) 2020
تم طرح "androidx.lifecycle:lifecycle-*:2.2.0
". يتضمّن الإصدار 2.2.0 هذه الالتزامات.
التغييرات المهمة منذ الإصدار 2.1.0
- تكامل دورة حياة الكوروتين: يضيف عنصر
lifecycle-runtime-ktx
الجديد تكاملاً بين دورة الحياة وكوروتينات Kotlin. وتم أيضًا توسيع نطاقlifecycle-livedata-ktx
للاستفادة من الكوروتيين. راجِع استخدام الكوروتينات في لغة Kotlin مع مكونات البنية للحصول على مزيد من التفاصيل. - إيقاف
ViewModelProviders.of()
نهائيًا: تم إيقافViewModelProviders.of()
نهائيًا. يمكنك تمريرFragment
أوFragmentActivity
إلى الدالة الإنشائيةViewModelProvider(ViewModelStoreOwner)
الجديدة لتحقيق الوظيفة نفسها عند استخدام القسم1.2.0
. - إيقاف العناصر في "
lifecycle-extensions
": مع الإيقاف النهائي لتطبيق "ViewModelProviders.of()
" المذكور أعلاه، يمثّل هذا الإصدار نهائيًا آخر واجهة برمجة تطبيقات في "lifecycle-extensions
"، وبالتالي يُعتبَر هذا العنصر متوقفًا بالكامل. استنادًا إلى العناصر المحدّدة التي تحتاج إليها في مراحل النشاط (مثلlifecycle-service
إذا كنت تستخدمLifecycleService
وlifecycle-process
في حال استخدامProcessLifecycleOwner
)، بدلاً منlifecycle-extensions
، لأنّه لن يكون هناك إصدار2.3.0
في المستقبل منlifecycle-extensions
. - معالج التعليقات التوضيحية المتزايدة في Gradle: يكون معالج التعليقات التوضيحية في دورة حياة المنتج تزايديًا بشكل تلقائي.
إذا كان تطبيقك مكتوبًا بلغة البرمجة Java 8 يمكنك استخدام
DefautLifecycleObserver
بدلاً من ذلك، وإذا كان التطبيق مكتوبًا بلغة البرمجة Java 7، يمكنك استخدامLifecycleEventObserver
.
الإصدار 2.2.0-rc03
4 كانون الأول (ديسمبر) 2019
تم طرح "androidx.lifecycle:lifecycle-*:2.2.0-rc03
". يحتوي الإصدار 2.2.0-rc03 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح عطل يحدث عند تخزين
ViewModel
نموذجيًا فيViewModelStore
والاستعلام عنه لاحقًا باستخدام الإعدادات الأصلية التلقائية. - إصلاح استخدام
Dispatchers.Main.immediate
فيlaunchWhenCreated
والطرق المشابهة ليتم طلبها بشكل متزامن أثناء حدث مراحل النشاط المقابل (aosp/1156203)
المساهمات الخارجية
- نشكر أندرس جارلبيرغ على مساهمتك في إصلاح المشكلة. (aosp/1156203)
- شكرًا لفسفولود تولستوبياوف من Jetbrains على مراجعة تنفيذ عملية تضمين.
التغييرات المتعلّقة بالتبعية
- تعتمد إضافات مراحل النشاط الآن على الجزء
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 هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح الانحدار الذي تم تقديمه في دورة الحياة 2.2.0-alpha05 بترتيب
ProcessLifecycleOwner
ونقل النشاطLifecycleOwner
إلى الوضع "البدء" واستئناف النشاط على الأجهزة التي تعمل بنظام التشغيل Android 10. (aosp/1128132) - تم إصلاح انحدار تم تقديمه في دورة الحياة
2.2.0-alpha05
والذي قد يتسبب في حدوثNullPointerException
عند استخدام الإصدار2.0.0
أو2.1.0
منlifecycle-process
. (b/141536990)
الإصدار 2.2.0-alpha05
18 أيلول (سبتمبر) 2019
تم طرح "androidx.lifecycle:lifecycle-*:2.2.0-alpha05
". يحتوي الإصدار 2.2.0-alpha05 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح شرط سباق في أداة إنشاء البيانات المباشرة الكوروتينية. 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
". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.
الميزات الجديدة
- يمكن الآن تنفيذ
HasDefaultViewModelProviderFactory
بشكل اختياري من خلال عمليات تنفيذViewModelStoreOwner
لتوفير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 لمراحل نشاط الحياة وLiveData. يمكنك الاطّلاع هنا على مستندات تفصيلية حول هذه المواضيع.
ViewModel-SavedState الإصدار 1.0.0
الإصدار 1.0.0
22 كانون الثاني (يناير) 2020
تم طرح "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0
". يتضمّن الإصدار 1.0.0 هذه الالتزامات.
ميزات مهمة في الإصدار 1.0.0
- تمت إضافة صف SavedStateHandle جديد. يتيح هذا الإجراء لصفوف "
ViewModel
" الوصول إلى الحالة المحفوظة والمساهمة فيها. يمكن تلقي هذا الكائن في الدالة الإنشائية لفئةViewModel
والمصانع التي يتم توفيرها تلقائيًا بواسطة Fragments وستدخل AppCompatActivitySavedStateHandle
تلقائيًا. - تمت إضافة AbstractSavedStateViewModelSettings. يتيح لك ذلك إنشاء مصانع مخصّصة لـ "
ViewModel
" ومنحها إمكانية الوصول إلى "SavedStateHandle
".
ViewModel-Savedstate الإصدار 1.0.0-rc03
4 كانون الأول (ديسمبر) 2019
تم طرح "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
". يحتوي الإصدار 1.0.0-rc03 على هذه الالتزامات.
التغييرات المتعلّقة بالتبعية
- تعتمد الآن تقنية ViewModel SaveState على دورة الحياة
2.2.0-rc03
.
Viewmodel-Savedstate الإصدار 1.0.0-rc02
7 تشرين الثاني (نوفمبر) 2019
تم طرح "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
". يحتوي الإصدار 1.0.0-rc02 على هذه الالتزامات.
التغييرات المتعلّقة بالتبعية
- يعتمد الوقت الآن على مراحل النشاط
2.2.0-rc02
.
ViewModel-SavedState الإصدار 1.0.0-rc01
23 تشرين الأول (أكتوبر) 2019
تم طرح الإصدار "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
" بدون أي تغييرات من "1.0.0-beta01
". يحتوي الإصدار 1.0.0-rc01 على هذه الالتزامات.
ViewModel-Savedstate الإصدار 1.0.0-beta01
9 تشرين الأول (أكتوبر) 2019
تم طرح "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
". يحتوي الإصدار 1.0.0-الإصدار التجريبي 01 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تؤدي إلى دخول SaveState ViewModel لأول مرة في
Activity.onActivityResult()
إلىIllegalStateException
. (b/139093676) - تم إصلاح
IllegalStateException
عند استخدامAbstractSavedStateViewModelFactory
. (b/141225984)
ViewModel-SavedState الإصدار 1.0.0-alpha05
18 أيلول (سبتمبر) 2019
تم طرح "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
". يحتوي الإصدار 1.0.0-alpha05 على هذه الالتزامات.
التغييرات في واجهة برمجة التطبيقات
- لم يعُد
SavedStateViewModelFactory
يمتد إلىAbstractSavedStateViewModelFactory
وتم إنشاءSavedStateHandle
فقط لنماذج ViewModels التي تم طلبها (aosp/1113593).
ViewModel-SavedState الإصدار 1.0.0-alpha03
7 آب (أغسطس) 2019
تم طرح "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.
تغييرات قد تؤدي إلى عطل
- لم تعُد
lifecycle-viewmodel-savedstate
تعتمد علىfragment
، وتمت إزالة دالتَي إنشاءSavedStateViewModelFactory(Fragment)
وSavedStateViewModelFactory(FragmentActivity)
ذات الصلة. بدلاً من ذلك، تم ضبط "SavedStateViewModelFactory
" على الإعدادات الأصلية التلقائية للأنشطة1.1.0-alpha02
والجزء1.2.0-alpha02
والتنقّل2.2.0-alpha01
. (b/135716331)
ViewModel-SavedState الإصدار 1.0.0-alpha02
2 تموز (يوليو) 2019
تم طرح "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02
". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.
الميزات الجديدة
- تمت إضافة حِمل
SavedStateHandle.getLiveData()
الزائد الذي يقبل قيمة تلقائية.
تغييرات واجهة برمجة التطبيقات
- تمت إعادة تسمية
SavedStateVMFactory
إلىSavedStateViewModelFactory
. - تمت إعادة تسمية
AbstractSavedStateVMFactory
إلىAbstractSavedStateViewModelFactory
.
ViewModel-Savedstate الإصدار 1.0.0-alpha01
13 آذار (مارس) 2019
تم طرح "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
". يمكن العثور على سجل الالتزام الكامل لهذا الإصدار الأولي هنا.
الميزات الجديدة
- يمكن لـ
ViewModels
الآن المساهمة فيsavestate. لإجراء ذلك، عليك استخدامSavedStateVMFactory
المصنع الجديد لـ viewmodel الذي تم تقديمه مؤخرًا، ويجب أن يحتوي ViewModel على دالة إنشاء تتلقىSavedStateHandle
كائنًا كمَعلمة.
الإصدار 2.1.0
التغييرات المهمة منذ الإصدار 2.0.0
- تمت إضافة
LifecycleEventObserver
للحالات التي تكون فيها هناك حاجة إلى بث أحداث مراحل النشاط. واجهة برمجة تطبيقات عامة بدلاً من فئةGenericLifecycleObserver
مخفية. - تم إدراج إضافات ktx لـ
LiveData.observe
طريقة وTransformations.*
طريقة. - تمت إضافة
Transformations.distinctUntilChanged
، ما يؤدي إلى إنشاء عنصر LiveData جديد لا يصدر قيمة إلى أن يتم تغيير قيمة المصدرLiveData
. - تمت إضافة دعم الكوروتين في ViewModels عن طريق إضافة خاصية الإضافة
ViewModel.viewModelScope
.
الإصدار 2.1.0
5 أيلول (سبتمبر) 2019
تم طرح "androidx.lifecycle:lifecycle-*:2.1.0
". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.
الإصدار 2.1.0-rc01
2 تموز (يوليو) 2019
تم طرح الإصدار "androidx.lifecycle:*:2.1.0-rc01
" بدون أي تغييرات من "androidx.lifecycle:*:2.1.0-beta01
". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.
الإصدار 2.1.0-beta01
7 أيار (مايو) 2019
تم طرح "androidx.lifecycle:*:2.1.0-beta01
". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.
الميزات الجديدة
- تتم ترقية دورات الحياة إلى إصدار تجريبي: واجهة برمجة التطبيقات التي تم تقديمها في إصدارات ألفا السابقة مثل دوال إضافة
liveData
لعمليات التحويل والملاحظات، وإعدادViewModel
باستخدام تفويض المواقع وغير ذلك من التغييرات التي لن تتغير.
الإصدار 2.1.0-alpha04
3 نيسان (أبريل) 2019
تم طرح "androidx.lifecycle:*:2.1.0-alpha04
". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.
التغييرات في واجهة برمجة التطبيقات
- تغيير قد يؤدي إلى عطل: تم تغيير واجهة برمجة التطبيقات الأساسية التي تستند إلى
by viewModels()
وby activityViewModels()
لإتاحة استخدامViewModelStore
مباشرةً، بدلاً من استخدامViewModelStoreOwner
فقط. (aosp/932932)
الإصدار 2.1.0-alpha03
13 آذار (مارس) 2019
تم طرح "androidx.lifecycle:*:2.1.0-alpha03
". يمكن العثور هنا على القائمة الكاملة لعمليات الالتزام المدرَجة في هذا الإصدار.
التغييرات في واجهة برمجة التطبيقات
- تمت إزالة الحقل "
ViewModelProvider.KeyedFactory
". لم يتم إنشاء الواجهة الثانية بالإضافة إلىViewModelProvider.Factory
بشكلٍ جيد مع الميزات الجديدة كتفويض المواقع فيby viewmodels {}
بلغة Kotlin. (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
تم إصدار دورة حياة 2.0.0
مع إصلاح خطأ واحد من 2.0.0-rc01
في ViewModel.
إصلاح الأخطاء
- تم إصلاح قاعدة Proguard لـ ViewModel التي أدت إلى إزالة دوال الإنشاء بشكل غير صحيح b/112230489
الإصدار 2.0.0-beta01
2 تموز (يوليو) 2018
إصلاح الأخطاء
- إصلاح قاعدة ProguardycycleMonitorer للاحتفاظ بعمليات التنفيذ فقط، وليس الواجهات الفرعية b/71389427
- تم إصلاح قواعد Proguard لـ ViewModel للسماح بإخفاء مفاتيح فك التشفير وتقليصها
إصدارات ما قبل AndroidX
بالنسبة إلى إصدارات ما قبل 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
، كما هو الحال في عملية الترحيل.
الإصدار 1.1.0
22 كانون الثاني (يناير) 2018
تغييرات الحزمة
تتوفر الآن تبعيات جديدة أصغر بكثير:
android.arch.lifecycle:livedata:1.1.0
android.arch.lifecycle:viewmodel:1.1.0
تغييرات واجهة برمجة التطبيقات
- تمت إزالة
LifecycleActivity
وLifecycleFragment
المتوقفة نهائيًا. يُرجى استخدامFragmentActivity
أوAppCompatActivity
أو دعمFragment
. - تمت إضافة تعليقات توضيحية واحدة (
@NonNull
) إلىViewModelProviders
وViewModelStores
. - تم إيقاف دالة إنشاء
ViewModelProviders
نهائيًا - يُرجى استخدام طُرقها الثابتة مباشرةً - تم إيقاف
ViewModelProviders.DefaultFactory
نهائيًا - يُرجى استخدامViewModelProvider.AndroidViewModelFactory
- تمت إضافة طريقة
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
الثابتة لاسترداد قيمةFactory
ثابتة مناسبة لإنشاء مثيلاتViewModel
وAndroidViewModel
.