מחזור חיים
בטבלה הזו מפורטים כל הארטיפקטים בקבוצה androidx.lifecycle
.
פריט מידע שנוצר בתהליך פיתוח (Artifact) | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסה אלפא |
---|---|---|---|---|
lifecycle-* | 2.8.7 | - | - | 2.9.0-alpha07 |
lifecycle-viewmodel-compose | 2.8.7 | - | - | 2.9.0-alpha07 |
הצהרת יחסי תלות
כדי להוסיף תלות ב-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") }
מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ל-build.
משוב
המשוב שלכם עוזר לנו לשפר את Jetpack. אם נתקלתם בבעיות חדשות או שיש לכם רעיונות לשיפור הספרייה הזו, נשמח לשמוע מכם. לפני שיוצרים בעיה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להצביע על בעיה קיימת, לוחצים על לחצן הכוכב.
מידע נוסף זמין במסמכי התיעוד של Issue Tracker.
גרסה 2.9
גרסה 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
או ישמור משהו ב-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 } }
שינויים ב-API
- מוסיפים את
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, לקראת הזמנת ממשקי API כמוSavedStateHandle
ב-Common Source Set (קבוצת המקור המשותפת) בגרסה עתידית. (I503ed, I48764, b/334076622)
גרסה 2.9.0-alpha03
18 בספטמבר 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha03
משוחרר. הגרסה 2.9.0-alpha03 מכילה את ההוספות האלה.
תיקוני באגים
- מ-Lifecycle
2.8.6
: שגיאת ה-LintNullSafeMutableLiveData
כוללת עכשיו תמיכה משופרת בהמרות חכמות, כדי למנוע תוצאות חיוביות מוטעות. (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 מכילה את ההוספות האלה.
תיקוני באגים
- מLifecycle
2.8.5
: מעדכנים את כללי ProGuard שלandroidx.lifecycle.ReportFragment
כדי לאפשר ערפול . (ff898e1)
תרומה חיצונית
- מעבירים את
androidx.compose.ui.platform.LocalLifecycleOwner
לקבוצת מקורות משותפת (KMP). תודה לאיוון מטקוב (Ivan Matkov) מ-JetBrains על התרומה. (8cd5d03) - מ-Lifecycle
2.8.5
: נציג התוסף SavedStateHandle.saveable תומך עכשיו בערכים nullable. תודה לרומן קלוצ'יוויצ' על התרומה. (0d78ea6)
גרסה 2.9.0-alpha01
7 באוגוסט 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha01
משוחרר. הגרסה 2.9.0-alpha01 מכילה את ההוספות האלה.
Kotlin Multiplatform
lifecycle-testing
תואם עכשיו ל-KMP. (Iea41e)- הוספת תמיכה ביעד
linuxArm64
של kotlin למספר פלטפורמות (I139d3, b/338268719)
תכונות חדשות
- יש גרסת KMP חדשה של
androidx.lifecycle:lifecycle-viewmodel-testing
שמספקת את הכיתהViewModelScenario
לבדיקת ViewModels בנפרד, עם תמיכה ב-onCleared
(כל הפלטפורמות) וב-SavedStateHandle
(Android בלבד). (337f68d, c9b3409, 9799a95c, b/264602919) - היצירה של
ViewModel
באמצעותViewModelProvider
היא עכשיו בטוחה לשרשור. ההערות של@MainThread
הוסרו. (Ifd978, b/237006831)
שינויים ב-API
- מוסיפים את פונקציית המפעל
CreationExtras.Key()
כדי לפשט את היצירה של אובייקטים אנונימיים מסוגCreationExtras.Key
. (I970ee) CreationExtras
כולל עכשיו עומסי יתר של אופרטורים דמויי מפה, כדי לאפשר מניפולציה של תוכן ב-Kotlin באופן שתואם לשפה. הוא מאפשר להשתמש ב-in
, ב-+=
וב-+
עםCreationExtras
. (Ib4353)CreationExtras
מטמיע עכשיו את השיטותequals
,hashCode
ו-toString
. (Ib4353)NewInstanceFactory
זמין עכשיו ביעדים של JVM Desktop ו-Android. (d3d0892)- מאפיין הרחבה בקוד כדי לחשוף בבטחה את האפליקציה הבסיסית בשפת Kotlin בגרסה 2.0 (I39df2)
תיקוני באגים
- הסרנו את התיאור הידני של הגישה לממשקי API חדשים של פלטפורמות, כי זה קורה באופן אוטומטי באמצעות בניית מודלים של API כשמשתמשים ב-R8 עם AGP 7.3 ואילך (למשל, R8 גרסה 3.3) ובכל גרסאות ה-build כשמשתמשים ב-AGP 8.1 ואילך (למשל, D8 גרסה 8.1). לקוחות שלא משתמשים ב-AGP מומלצים לעדכן ל-D8 בגרסה 8.1 ואילך. למידע נוסף, מומלץ לעיין במאמר הזה. (If6b4c, b/345472586)
גרסה 2.8
גרסה 2.8.7
30 באוקטובר 2024
androidx.lifecycle:lifecycle-*:2.8.7
משוחרר. גרסת 2.8.7 כוללת את ההוספות האלה.
שינויים ב-API
androidx.compose.ui.platform.LocalLifecycleOwner
זמין עכשיו בקבוצת המקור המשותפת (KMP). (6a3f5b3)lifecycle-runtime-compose
: פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) מסוג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 כוללת את ההוספות האלה.
תיקוני באגים
- מעדכנים את כללי ProGuard של
androidx.lifecycle.ReportFragment
כדי לאפשר ערפול . (ff898e1)
תרומה חיצונית
- עכשיו יש תמיכה בערכים nullable במתווך התוסף
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
במחזור החיים עם גרסאות 2.8 ואילך, ותוקנו בעיות בספריות כמו LeakCanary. (I80383, b/341792251)
גרסה 2.8.1
29 במאי 2024
androidx.lifecycle:lifecycle-*:2.8.1
משוחרר. גרסת 2.8.1 כוללת את ההוספות האלה.
תיקוני באגים
- עכשיו יש ל-
lifecycle-viewmodel-compose
רק תלות משותפת ב-compose-runtime
, והתלות המשותפת ב-compose-ui
הוסרה. הארטיפקט של Android שומר עלcompose-ui
שלו לצורך תאימות. (aosp/3079334, b/339562627) - השילוב של
ViewModel
עםsaveable
באמצעות נציגי נכסים משתמש עכשיו בשם הכיתה כחלק מהמפתח שנוצר באופן אוטומטי, כדי למנוע התנגשויות אם כמה כיתות משתמשות באותוSavedStateHandle
. (aosp/3063463)
גרסה 2.8.0
14 במאי 2024
androidx.lifecycle:lifecycle-*:2.8.0
משוחרר. גרסה 2.8.0 כוללת את ההוספות האלה.
שינויים חשובים מאז גרסה 2.7.0
LocalLifecycleOwner
הועבר מ-Compose UI אלlifecycle-runtime-compose
כדי שאפשר יהיה להשתמש בממשקי ה-API העוזרים שמבוססים על Compose מחוץ לממשק המשתמש של Compose.- הארטיפקט
lifecycle-runtime-compose
מכיל עכשיו את ממשקי ה-APIdropUnlessResumed
ו-dropUnlessStarted
, שמאפשרים להשמיט אירועי קליקים או אירועים אחרים שמתרחשים גם אחרי שהערך שלLifecycleOwner
ירד מתחת ל-Lifecycle.State
שצוין. לדוגמה, אפשר להשתמש בזה עם Navigation Compose כדי להימנע משימוש באירועי קליקים אחרי שהמעבר למסך אחר כבר התחיל:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
ViewModel.viewModelScope
הוא עכשיו פרמטר של ה-constructor שאפשר לשנות, ומאפשר להחדיר את המפנה ואת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
ללא מפתח נחשבת עכשיו לשגיאה, בהתאם לאותם כללים כמו ב-API שלDisposableEffect
שמשמש כמראה של ממשקי ה-API האלה.הוצא משימוש
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
לטובתLiveData.toPublisher(lifecycleOwner)
.התוספים של
lifecycle-livedata-core-ktx
ל-Kotlin הועברו למודולlifecycle-livedata-core
.NullSafeMutableLiveData
עבר שינוי מבני כדי למנוע הרבה תוצאות חיוביות כוזבות.
תאימות של Kotlin למולטי-פלטפורמות במחזור החיים
ממשקי ה-API המרכזיים של מחזור החיים ב-Lifecycle
, LifecycleOwner
, LifecycleObserver
, Lifecycle.State
, Lifecycle.Event
ו-LifecycleRegistry
נשלחים עכשיו בארטיפקטים שתואמים ל-Kotlin Multiplatform.
פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) שהושפעו:
- ב-
lifecycle-common
רוב ממשקי ה-API מועברים ל-common
, והוא תומך ב-JVM וב-iOS בנוסף ל-Android. - ב-
lifecycle-runtime
רוב ממשקי ה-API מועברים ל-common
, והוא תומך ב-JVM וב-iOS בנוסף ל-Android. lifecycle-runtime-ktx
ריק עכשיו, וכל ממשקי ה-API הועברו אלlifecycle-runtime
.- ב-
lifecycle-runtime-compose
, כל ממשקי ה-API מועברים אלcommon
ומשווקים כארטיפקט של Android, בהתאם לתמיכה בפלטפורמות מרובות שלandroidx.compose
.
תאימות של ViewModel Kotlin לפלטפורמות מרובות
הארטיפקט lifecycle-viewmodel
וממשקי ה-API כמו ViewModel
, ViewModelStore
, ViewModelStoreOwner
ו-ViewModelProvider
נשלחים עכשיו בארטיפקטים שתואמים ל-Kotlin Multiplatform.
כדי להתאים את השינוי הזה, לשיטות כמו אלה ב-ViewModelProvider
שהשתמשו ב-java.lang.Class<T>
יש עכשיו שיטה מקבילה שמשתמשת ב-kotlin.reflect.KClass<T>
.
תאימות הבינארי ב-Android נשמרה, אבל יש כמה שינויים בולטים בהשוואה בין ממשק ה-API של Android לממשק ה-API המשותף:
- עכשיו אפשר ליצור מופע של
ViewModelProvider
באמצעות השיטות שלViewModelProvider.create()
, במקום לקרוא ישירות ל-constructor שלו. ViewModelProvider.NewInstanceFactory
ו-ViewModelProvider.AndroidViewModelFactory
זמינים רק ב-Android.- מומלץ להרחיב מ-
ViewModelProvider.Factory
את ה-Factories בהתאמה אישית ולהשתמש בשיטהcreate
שמקבלתCreationExtras
, או להשתמש ב-viewModelFactory
Kotlin DSL.
- מומלץ להרחיב מ-
- שימוש ב-
ViewModelProvider
ללא מפעל מותאם אישית בפלטפורמות שאינן JVM יוביל ל-UnsupportedOperationException
. בפלטפורמות של JVM, התאימות נשמרת באמצעות ה-constructor של ViewModel ללא ארגומנטים, אם לא סיפקו מפעל מותאם אישית. viewModelScope
יעבור ל-EmptyCoroutineContext
בפלטפורמות שבהןDispatchers.Main
לא זמין (למשל, Linux).
פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) שהושפעו:
- ב-
lifecycle-viewmodel
רוב ממשקי ה-API מועברים ל-common
, והוא תומך ב-JVM וב-iOS בנוסף ל-Android. lifecycle-viewmodel-ktx
ריק עכשיו, וכל ממשקי ה-API הועברו אלlifecycle-viewmodel
.- ב-
lifecycle-viewmodel-compose
, כל ממשקי ה-API מועברים אלcommon
ומשווקים כארטיפקט של Android, בהתאם לתמיכה בפלטפורמות מרובות שלandroidx.compose
.
שינויים בהתנהגות
InitializerViewModelFactory
(כולל פונקציית ה-builderviewModelFactory
) תגרום עכשיו להודעת השגיאה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 Desktop. (aosp/3039221)
תרומה חיצונית
- תודה ל-Victor Kropp על שיפור הבדיקה של הליבה הראשית ב-JVM Desktop. (aosp/3037116)
גרסה 2.8.0-beta01
17 באפריל 2024
androidx.lifecycle:lifecycle-*:2.8.0-beta01
משוחרר. גרסת 2.8.0-beta01 כוללת את ההוספות האלה.
תכונות חדשות
- הארטיפקט
lifecycle-runtime-compose
תואם עכשיו ל-Kotlin Multiplatform, הקוד שלו הועבר ל-common
והוא כולל ארטיפקט ל-Android, בהתאם לתמיכה בפלטפורמות מרובות ב-androidx.compose
. (If7a71, I4f4a0, b/331769623)
גרסה 2.8.0-alpha04
3 באפריל 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha04
משוחרר. גרסת 2.8.0-alpha04 מכילה את ההוספות האלה.
תכונות חדשות
- הארטיפקט
lifecycle-viewmodel-compose
תואם עכשיו ל-Kotlin Multiplatform, הקוד שלו הועבר ל-common
והוא כולל ארטיפקט ל-Android, בהתאם לתמיכה בפלטפורמות מרובות שלandroidx.compose
. כדי להתאים את השינוי הזה, השיטהviewModel
הניתנת לקישור מקבלת עכשיוKClass
בנוסף ל-java.lang.Class
. (b/330323282)
תיקוני באגים
NullSafeMutableLiveData
עבר שינוי מבני כדי למנוע הרבה תוצאות חיוביות כוזבות. (I2d8c1, Iafb18, I03463, I7ecef)
עדכון יחסי תלות
- הארטיפקט
lifecycle-viewmodel-compose
תלוי עכשיו ב-Compose 1.6.0. - עכשיו, מחזור החיים תלוי ב-Profile Installer 1.3.1.
גרסה 2.8.0-alpha03
20 במרץ 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha03
משוחרר. גרסת 2.8.0-alpha03 מכילה את ההוספות האלה.
תכונות חדשות
ViewModel.viewModelScope
הוא עכשיו פרמטר של ה-constructor שאפשר לשנות, ומאפשר להחדיר את המפנה ואת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
וממשקי ה-API כמו ViewModel
, ViewModelStore
, ViewModelStoreOwner
ו-ViewModelProvider
נשלחים עכשיו בארטיפקטים שתואמים ל-Kotlin Multiplatform. (b/214568825)
כדי להתאים את השינוי הזה, לשיטות כמו אלה ב-ViewModelProvider
שהשתמשו ב-java.lang.Class<T>
יש עכשיו שיטה מקבילה שמשתמשת ב-kotlin.reflect.KClass<T>
.
תאימות הבינארי ב-Android נשמרה, אבל יש כמה שינויים בולטים בהשוואה בין ממשק ה-API של Android לממשק ה-API המשותף:
- עכשיו אפשר ליצור מופע של
ViewModelProvider
באמצעות השיטות שלViewModelProvider.create()
, במקום לקרוא ישירות ל-constructor שלו. ViewModelProvider.NewInstanceFactory
ו-ViewModelProvider.AndroidViewModelFactory
זמינים רק ב-Android.- מומלץ להרחיב מ-
ViewModelProvider.Factory
את ה-Factories בהתאמה אישית ולהשתמש בשיטהcreate
שמקבלתCreationExtras
, או להשתמש ב-viewModelFactory
Kotlin DSL.
- מומלץ להרחיב מ-
- שימוש ב-
ViewModelProvider
ללא מפעל מותאם אישית בפלטפורמות שאינן JVM יוביל ל-UnsupportedOperationException
. בפלטפורמות של JVM, התאימות נשמרת באמצעות ה-constructor של ViewModel ללא ארגומנטים, אם לא סיפקו מפעל מותאם אישית. viewModelScope
יעבור ל-EmptyCoroutineContext
בפלטפורמות שבהןDispatchers.Main
לא זמין (למשל, Linux).
שינויים בהתנהגות
InitializerViewModelFactory
(כולל פונקציית ה-builderviewModelFactory
) תגרום עכשיו להודעת השגיאהIllegalArgumentException
אם כבר נוספהinitializer
עם אותוclazz: KClass<VM : ViewModel>
. (Ic3a36)
תיקוני באגים
ViewModel.getCloseable
מטפל עכשיו במפתחות כפולים: אם ל-key
כבר משויך משאבAutoCloseable
, המשאב הישן יוחלף וייסגר באופן מיידי. (Ibeb67)- הגישה ל-
viewModelScope
שלViewModel
מאובטחת עכשיו מפני סכנות של שרשור (thread). (If4766, b/322407038)
תרומה חיצונית
LocalLifecycleOwner
הועבר מ-Compose UI אל lifecycle-runtime-compose כדי שניתן יהיה להשתמש בממשקי ה-API העוזרים שמבוססים על Compose מחוץ לממשק המשתמש של Compose. תודה ל-Jake Wharton על התרומה. (I6c41b, b/328263448)
גרסה 2.8.0-alpha02
21 בפברואר 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha02
משוחרר. גרסה 2.8.0-alpha02 כוללת את ההצהרות האלה.
תכונות חדשות
- נוספו ממשקי ה-API
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 למספר פלטפורמות
- ממשקי ה-API המרכזיים של מחזור החיים ב-
Lifecycle
,LifecycleOwner
,LifecycleObserver
,Lifecycle.State
,Lifecycle.Event
ו-LifecycleRegistry
נשלחים עכשיו בארטיפקטים שתואמים ל-Kotlin Multiplatform. (b/317249252)
שינויים ב-API
- קריאה ל-
LifecycleStartEffect
ול-LifecycleResumeEffect
ללא מפתח נחשבת עכשיו לשגיאה, בהתאם לאותם כללים כמו ב-API שלDisposableEffect
שמשמש כמראה של ממשקי ה-API האלה. (Ib0e0c, b/323518079) - עכשיו
ViewModel
משתמש ב-AutoCloseable
במקום ב-Closeable
. זהו שינוי שתואמת לאחור. (I27f8e, b/214568825) - הוצא משימוש
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
לטובתLiveData.toPublisher(lifecycleOwner)
. (Iabe29, b/262623005)
תרומה חיצונית
- תודה לאיוון מטקוב (Ivan Matkov) מ-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
גרסה
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
הוסרו. המשמעות היא שקוד מוגן שרוצים להשתמש בו בממשקי API באמצעות רפלקציה (למשל, שימוש בהערה@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
כדי לטפל בזוגות של אירועים – התחלה לעצירה והמשך להשהיה, בהתאמה. ה-API הזה משקף את ה-API שמופיע ב-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, מערכים של Parcelables מותאמים אישית דורשים עבודה נוספת (יצירה ידנית של מערך ממוין מהסוג הנכון), והמגבלה הזו מצוינת עכשיו במפורש במסמכי התיעוד של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)
שינויים ב-API
- כל הקבצים מהמודולים
lifecycle-livedata-ktx
הועברו למודול הראשיlifecycle-livedata
. (I10c6f, b/274800183)
שינויים בהתנהגות
- התוספים
LiveData.map()
ו-LiveData.switchMap()
מגדירים עכשיו אתvalue
של ה-LiveData
המוחזר אם ל-LiveData
הקודם הוגדר ערך, כדי להבטיח שהמצב הנכון יהיה בשימוש ב-LiveData שנוצר ב-Jetpack Compose בתהליך ה-composition הראשוני. (I91d2b, b/269479952) - עכשיו, ה-
addCloseable()
שלViewModel
סוגר את ה-Closeable
באופן מיידי אם ה-ViewModel
כבר קיבל קריאה ל-onCleared()
. (I4712e, b/280294730)
תיקוני באגים
- מ-Lifecycle
2.6.2
: תוקנה בעיה שבהSavedStateHandle
לא שוחזר בצורה נכונה אחרי מוות התהליך אם המצב שוחזר,save()
הופעל בלי לשמור בפועל את המצב ב-SavedStateRegistry
ההורה, ואז המצב שוחזר שוב. כך מתקנים את האינטראקציה ביןrememberSaveable
לביןNavHost
של Navigation Compose. (aosp/2729289)
גרסה 2.7.0-alpha01
26 ביולי 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha01
משוחרר. גרסה 2.7.0-alpha01 כוללת את ההצהרות האלה.
שינויים ב-API
- עכשיו אפשר לראות את
Lifecycle.State
ב-Compose דרךLifecycle.currentStateFlow
, שמחזירStateFlow
שבוvalue
הואLifecycle.State
הנוכחי. (Ib212d, b/209684871) - עכשיו אפשר לצפות ב-
Lifecycle.Event
כ-Flow
באמצעותLifecycle.asFlow().
(If2c0f, b/176311030) - נוספה פונקציית API של
LifecycleResumeEffect
להרצתSideEffect
של Compose על סמך אירועי חזרה (callbacks) שלLifecycle.Event.ON_RESUME
ושלLifecycle.Event.ON_PAUSE
. (I60386, b/235529345) - נוספה קריאה ל-API של
LifecycleStartEffect
כדי להריץSideEffect
של Compose על סמך אירועיLifecycle.Event.ON_START
ו-Lifecycle.Event.ON_STOP
. (I5a8d1, b/235529345) - הוספנו את ה-API של
LifecycleEventEffect
כדי להריץSideEffect
של Compose על סמךLifecycle.Event
. (Ic9794, b/235529345) - הוספנו את התוסף
Lifecycle.collectAsState()
כדי לחשוף ישירות אתLifecycle.State
בתור ComposeState
. זהו ערך שווה ערך ל-lifecycle.currentStateFlow.collectAsState()
(וחלופה קצרה יותר). (I11015, b/235529345)
תיקוני באגים
- התוסף
LiveData.distinctUntilChanged()
מגדיר עכשיו אתvalue
שלLiveData
המוחזר אם ל-LiveData
הקודם הוגדר ערך. הפעולה הזו לא משנה את התנהגות התצפית – הערכים המעודכנים מהמקורLiveData
יחולו רק אחרי שתתחילו לצפות ב-LiveData
שהוחזר מ-distinctUntilChanged()
. (Ib482f) - כללי השמירה של Proguard שמשויכים ל-
LifecycleObserver
הוסרו. המשמעות היא שכדי להשתמש בממשקי API באמצעות שיקוף בקוד שמוגן באמצעות Proguard, צריך לספק כללי שמירה משלו לתרחישים לדוגמה הספציפיים. (Ia12fd)
גרסה 2.6
גרסה 2.6.2
6 בספטמבר 2023
androidx.lifecycle:lifecycle-*:2.6.2
משוחרר. גרסה 2.6.2 כוללת את השמירות האלה.
תיקוני באגים
- תוקנה בעיה שבה
SavedStateHandle
לא שוחזר בצורה נכונה אחרי מוות התהליך אם המצב שוחזר,save()
הופעל בלי לשמור בפועל את המצב ברכיב ההורהSavedStateRegistry
, ואז המצב שוחזר שוב. כך מתקנים את האינטראקציה ביןrememberSaveable
לביןNavHost
של Navigation Compose. (aosp/2729289)
גרסה 2.6.1
22 במרץ 2023
androidx.lifecycle:lifecycle-*:2.6.1
משוחרר. גרסה 2.6.1 כוללת את ההצהרות האלה.
עדכוני יחסי תלות
- עכשיו,
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()
, שמאגר מזרמים ומציג את הערך העדכני ביותר שלו כ-Compose State באופן שמתחשב במחזור החיים. - השיטות
Lifecycle.launchWhenX
והשיטותLifecycle.whenX
הוצאו משימוש, כי השימוש במפנה משימות מושהה עלול להוביל לבזבוז משאבים במקרים מסוימים. מומלץ להשתמש ב-Lifecycle.repeatOnLifecycle
. מידע נוסף על השעיה חד-פעמית של עבודה זמין בהסבר הזה על הסיבה לכך שהיא לא בטוחה מטבעה. - המרה ל-Kotlin – מספר גדול של כיתות של מחזור חיים הומרו ל-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 להיות null תואמת לאפשרות של הסוג הכללי להיות null. אם רוצים ש-Observer.onChanged()
יקבל סוג nullable, צריך ליצור אתObserver
עם סוג nullable. - גם הכיתות האלה הומרו ל-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 מכילה את ההצהרות האלה על ביצוע שינויים (commits).
המרות ב-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)
שינויים ב-API
- ממשקי ה-API של
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, אם עדיין לא השתמשתם בממשקי ה-API של שיטות ההרחבה של 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 מכילה את ההצהרות האלה.
שינויים ב-API
MediatorLiveData
כולל עכשיו קונסטרוקטור להגדרת ערך ראשוני. (Ib6cc5, b/151244085)
תיקוני באגים
- פריטי המידע שנוצרו בתהליך פיתוח (Artifacts) של
Lifecycle
כוללים עכשיו אילוצים שמבטיחים שכל פריטי המידע שנוצרו בתהליך פיתוח (Artifacts) של Lifecycle שמוגדרים ביניהם יחסי תלות ישתמשו באותה גרסה, וישדרגו באופן אוטומטי יחסי תלות אחרים כשאחד מהם יתעדכן. b/242871265 FlowLiveData.asFlow()
יוצר עכשיוcallbackFlow
במקום להשתמש בהטמעה משלו שלChannel
, כדי להבטיח בטיחות בשרשור ושמירה על ההקשר. (I4a8b2, b/200596935)- הפונקציה
asLiveData
שלFlowLiveData
תישמר עכשיו את הערך הראשוני שלStateFlow
כשיוצרים את האובייקט החדשLiveData
. (I3f530, b/157380488) - מ-Lifecycle
2.5.1
: הטמעות בהתאמה אישית שלAndroidViewModelFactory
קוראות עכשיו בצורה נכונה לפונקציהcreate(modelClass)
כשמשתמשים ב-constructor עם מצב (stateful) ב-Lifecycle
מגרסה 2.4 ואילך (I5b315, b/238011621)
גרסה 2.6.0-alpha01
29 ביוני 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha01
משוחרר. גרסה 2.6.0-alpha01 מכילה את ההוספות האלה.
תכונות חדשות
- נוספה תוסף חדש ל-
StateFlow
ול-Flow
שלcollectAsStateWithLifecycle
, שמאגר מזרמים ומציג את הערך העדכני ביותר שלו כ-Compose State באופן שמתחשב במחזור החיים. הזרימה נאספת והפליטה החדשה מוגדרת לערך של המצב כשמחזור החיים נמצא לפחות ב-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)
כשמשתמשים ב-constructor שלAndroidViewModelFactory
עם מצב (stateful) ב-Lifecycle
בגרסה 2.4 ואילך. (I5b315, b/238011621)
גרסה 2.5.0
29 ביוני 2022
androidx.lifecycle:lifecycle-*:2.5.0
משוחרר. גרסה 2.5.0 כוללת את השמירות האלה.
שינויים חשובים מאז גרסה 2.4.0
SavedStateHandle
מציע עכשיו ממשק API שלgetStateFlow()
שמחזיר KotlinStateFlow
למעקב אחרי שינויים בערכים, כחלופה לשימוש ב-LiveData
.ViewModel CreationExtras – כשכותבים
ViewModelProvider.Factory
מותאם אישית, כבר לא צריך להרחיב אתAndroidViewModelFactory
אוAbstractSavedStateViewModelFactory
כדי לקבל גישה ל-Application
או ל-SavedStateHandle
, בהתאמה. במקום זאת, השדות האלה ניתנים לכל תת-הסוג שלViewModelProvider.Factory
בתורCreationExtras
באמצעות עומס יתר חדש שלcreate
:create(Class<T>, CreationExtras)
. הנתונים הנוספים האלה מסופקים באופן אוטומטי על ידי הפעילות או החלק כשמשתמשים ב-Activity1.5.0
וב-Fragment1.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
מציע עכשיו ממשק API מסוג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 – הארטיפקט
lifecycle-viewmodel-compose
מכיל עכשיו ממשקי API ניסיוניים חדשים ב-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) } }
נוספו API של
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
ב-constructor תוך שמירה על אורך החיים של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 כוללת את ההצהרות האלה.
שינויים ב-API
- נוספו נציגים של מאפייני
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)
שינויים ב-API
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
, ממשק API ניסיוני שמבטיח שהערכים ב-SavedStateHandle
משולבים בצורה נכונה עם אותו מצב של המכונה השמור שבוrememberSaveable
משתמש. (Ia88b7, b/195689777)
שינויים ב-API
- תוקנה בעיית תאימות עם Lifecycle 2.3 וגרסאות Lifecycle חדשות יותר ב-Java. (I52c8a, b/219545060)
תיקוני באגים
- עכשיו יש תמיכה ב-
SavedStateViewFactory
בשימוש ב-CreationExtras
גם אם הוא הופעל באמצעותSavedStateRegistryOwner
. אם מציינים פרמטרים נוספים, המערכת תתעלם מהארגומנטים שהועברו ל-init. (I6c43b, b/224844583)
גרסה 2.5.0-alpha04
9 במרץ 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha04
משוחרר. גרסה 2.5.0-alpha04 מכילה את ההצהרות האלה.
שינויים ב-API
SavedStateHandle
מציע עכשיו ממשק API מסוגgetStateFlow()
שמחזיר KotlinStateFlow
למעקב אחרי שינויים בערך, כחלופה לשימוש ב-LiveData
. (Iad3ab, b/178037961)
גרסה 2.5.0-alpha03
23 בפברואר 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha03
משוחרר. גרסה 2.5.0-alpha03 מכילה את ההצהרות האלה.
תכונות חדשות
- הוספנו ממשק API של
addCloseable()
ועומס יתר חדש של קונסטרוקטור שמאפשרים להוסיף אובייקטCloseable
אחד או יותר ל-ViewModel
שייסגר כאשר ה-ViewModel
יימחק, בלי צורך בעבודה ידנית ב-onCleared()
. (I55ea0) lifecycle-viewmodel
כולל עכשיוInitializerViewModelFactory
שמאפשר להוסיף פונקציית lambda לטיפול בקטגוריותViewModel
מסוימות, באמצעותCreationExtras
כמקור הנתונים הראשי. (If58fc, b/216687549)lifecycle-viewmodel-compose
מציע עכשיו ממשק API מסוגviewModel()
שמשתמש במפעל lambda ליצירת מכונה שלViewModel
בלי צורך ליצורViewModelProvider.Factory
בהתאמה אישית. (I97fbb, b/216688927)
שינויים ב-API
- עכשיו אפשר ליצור
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 מכילה את ההצהרות האלה.
שינויים ב-API
- הפונקציות
SavedStateHandle
ו-SavedStateViewModelFactory
הומרו ל-Kotlin. כך שיפורה היכולת של הגנריקים בשתי הכיתות להיות ערכים null. (Ib6ce2, b/216168263, I9647a, b/177667711) - עכשיו אפשר להגדיר לפרמטר
LiveData
של הפונקציהswitchMap
פלט nullable. (I40396, b/132923666) - התוספים של
LiveData
-ktx מתויגים עכשיו ב-@CheckResult
כדי לאכוף את השימוש בתוצאה בזמן הקריאה לפונקציות האלה. (Ia0f05, b/207325134)
שינויים בהתנהגות
- עכשיו, כשאין ערך למפתח שצוין,
SavedStateHandle
שומר את defaultValue בצורה תקינה. (I1c6ce, b/178510877)
תיקוני באגים
- מ-Lifecycle
2.4.1
: עדכנו אתlifecycle-process
כך שיהיה תלוי ב-Startup 1.1.1 כדי להבטיח שהתיקונים שמונעים מ-ProcessLifecycleInitializer
להפעילStartupException
יהיו זמינים כברירת מחדל. (Ib01df, b/216490724) - הודעת השגיאה שופר כאשר יש פרמטרים בסדר שגוי בתוך כיתות
AndroidViewModel
בהתאמה אישית, ומנסים ליצורViewModel
. (I340f7, b/177667711) - עכשיו אפשר ליצור מודל תצוגה דרך
CreationExtras
באמצעותAndroidViewModelFactory
בלי להגדיר אפליקציה. (I6ebef, b/217271656)
גרסה 2.5.0-alpha01
26 בינואר 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha01
משוחרר. גרסה 2.5.0-alpha01 מכילה את ההצהרות האלה.
ViewModel CreationExtras
במהדורה הזו אנחנו מניחים את היסודות לשינוי המבנה של ViewModel
. במקום קבוצה נוקשה של תת-כיתות של ViewModelProvider.Factory
שכל אחת מהן מוסיפה פונקציונליות נוספת (מתן אפשרות להשתמש בפרמטר של ה-constructor של Application
דרך AndroidViewModelFactory
, מתן אפשרות להשתמש בפרמטר של ה-constructor של SavedStateHandle
דרך SavedStateViewModelFactory
ו-AbstractSavedStateViewModelFactory
וכו'), אנחנו עוברים לעולם של מפעלים ללא מצב שמסתמכים על מושג חדש, CreationExtras
. (Ia7343, b/188691010, b/188541057)
בעקבות השינוי הזה, ViewModelProvider
לא מבצע יותר קריאות ישירות לשיטה הקודמת create(Class<T>)
של ViewModelProvider.Factory
. במקום זאת, הוא קורא לטעינה יתר חדשה של create
: create(Class<T>, CreationExtras)
. פירוש הדבר הוא שלכל הטמעה ישירה של המכונה ViewModelProvider.Factory
יש עכשיו גישה לכל אחד מה-CreationExtras
החדשים האלה:
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
: ה-String
הזה מספק גישה למפתח המותאם אישית שהעברתם ל-ViewModelProvider.get()
.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
מספק גישה לכיתהApplication
.SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
מספק גישה ל-SavedStateRegistryOwner
שמשמש ליצירת ViewModel הזה.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
מספק גישה ל-ViewModelStoreOwner
שמשמש ליצירת ViewModel הזה.SavedStateHandleSupport.DEFAULT_ARGS_KEY
מספק גישה ל-Bundle
של הארגומנטים שצריך להשתמש בהם כדי ליצורSavedStateHandle
.
האפשרויות הנוספות האלה מוצגות כברירת מחדל כשמשתמשים ב-Activity 1.5.0-alpha01
, ב-Fragment 1.5.0-alpha01
וב-Navigation 2.5.0-alpha01
. אם אתם משתמשים בגרסה קודמת של הספריות האלה, השדה CreationExtras
יהיה ריק – כל המחלקות המשניות הקיימות של ViewModelProvider.Factory
נכתבו מחדש כדי לתמוך גם בנתיב היצירה הקודם ששימש גרסאות קודמות של הספריות האלה וגם בנתיב CreationExtras
שבו ייעשה שימוש מעכשיו והלאה.
באמצעות CreationExtras
אפשר ליצור ViewModelProvider.Factory
שמעביר רק את המידע הדרוש לכל ViewModel
, בלי להסתמך על היררכיה קפדנית של תת-כיתות של Factory:
class CustomFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
return when (modelClass) {
HomeViewModel::class -> {
// Get the Application object from extras
val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
// Pass it directly to HomeViewModel
HomeViewModel(application)
}
DetailViewModel::class -> {
// Create a SavedStateHandle for this ViewModel from extras
val savedStateHandle = extras.createSavedStateHandle()
DetailViewModel(savedStateHandle)
}
else -> throw IllegalArgumentException("Unknown class $modelClass")
} as T
}
}
אנחנו משתמשים בפונקציית ההרחבה createSavedStateHandle()
של Kotlin ב-CreationExtras
מ-SavedStateHandleSupport
כדי ליצור SavedStateHandle
רק ל-ViewModel אחד שזקוק לו. (Ia6654, b/188541057)
אפשר לספק CreationExtras
בהתאמה אישית על ידי שינוי getDefaultViewModelCreationExtras()
ב-ComponentActivity
או ב-Fragment
, וכך להפוך אותם לזמינים ל-ViewModelProvider.Factory
בהתאמה אישית כצורה מובנית של הזרקה שמופעלת על ידי המערכת. התוספים האלה יהיו זמינים באופן אוטומטי ל-Factory בהתאמה אישית כשמשתמשים בו ישירות עם ViewModelProvider
או כשמשתמשים בתוספי המאפיינים של Kotlin by viewModels()
ו-by activityViewModels()
. (I79f2b, b/207012584, b/207012585, b/207012490)
תיקוני באגים
- תוקנה בעיה שבה ערך ברירת המחדל שסופק ל-
SavedStateHandle
הופיע שוב אחרי מותו של התהליך ויצירתו מחדש, גם אם הוא הוסר באופן ספציפי מה-SavedStateHandle
. כתוצאה מכך,SavedStateHandle
לא ישלב יותר בין ערכי ברירת המחדל לבין הערכים המשוחזרים, אלא ישתמש רק בערכים המשוחזרים כמקור האמיתי. (I53a4b)
גרסה 2.4
גרסה 2.4.1
9 בפברואר 2022
androidx.lifecycle:lifecycle-*:2.4.1
משוחרר. גרסה 2.4.1 מכילה את ההוספות האלה.
תיקוני באגים
- תיקון שהועבר מ-Lifecycle
2.5.0-alpha01
: תוקנה בעיה שבה ערך ברירת המחדל שסופק ל-SavedStateHandle
הופיע שוב אחרי מותו של התהליך ויצירתו מחדש, גם אם הוא הוסר במיוחד מה-SavedStateHandle
. כתוצאה מכך,SavedStateHandle
לא ישלב יותר בין ערכי ברירת המחדל לבין הערכים המשוחזרים, אלא ישתמש רק בערכים המשוחזרים כמקור האמיתי. (I53a4b) lifecycle-process
תלוי עכשיו ב-Androidx Startup 1.1.1, שבו תוקנה נסיגה (regression) שבה שימוש ב-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
לא מאפשרת יותר שימוש ב-nullable generic.
- שינוי שגורם לשינוי בקוד המקור:
- הוספנו ל-
androidx.lifecycle:lifecycle-runtime-ktx
ממשקי API חדשים של קורוטינים: Lifecycle.repeatOnLifecycle
, ממשק API שמפעיל בלוק של קוד ב-coroutine כש-Lifecycle נמצא לפחות במצב מסוים. החסימה תבוטל ותופעל מחדש כשמחזור החיים יעבור למצב היעד ויצא ממנו.Flow.flowWithLifecycle
, ממשק API שמפיק ערכים מ-Flow במעלה הזרם כשמחזור החיים נמצא לפחות במצב מסוים.DefaultLifecycleObserver
הועבר מ-lifecycle.lifecycle-common-java8
ל-lifecycle.lifecycle-common
.lifecycle.lifecycle-common-java8
כבר לא מספק פונקציונליות נוספת מעבר ל-lifecycle.lifecycle-common
, כך שאפשר להחליף את התלות בו ב-lifecycle.lifecycle-common
.- ממשקי API שאינם של קורוטינים מ-
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 מכילה את ההצהרות האלה.
שינויים ב-API
- האפשרות
@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) - ממשקי API שאינם של קורוטינים מ-
lifecycle-viewmodel-ktx
הועברו למודולlifecycle-viewmodel
. (I6d5b2)
תרומה חיצונית
גרסה 2.4.0-alpha03
4 באוגוסט 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha03
משוחרר. גרסה 2.4.0-alpha03 מכילה את ההצהרות האלה.
שינויים ב-API
- שינוי שגורם לשינוי בקוד המקור: ViewModelProvider נכתב מחדש ב-Kotlin.
השיטה
ViewModelProvider.Factory.create
לא מאפשרת יותר שימוש ב-nullable generic. (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 כוללת את ההצהרות האלה.
תכונות חדשות
- הוספנו בדיקת איתור שגיאות בקוד (lint) חדשה של
RepeatOnLifecycleWrongUsage
ל-lifecycle-runtime-ktx
, שמזהה מתי נעשה שימוש שגוי ב-repeateOnLifecycle
ב-onStart()
או ב-onResume()
. (706078, b/187887400)
שינויים ב-API
- ה-API של
LifecycleOwner.addRepeatingJob
הוסר לטובתLifecycle.repeatOnLifecycle
, שמתחשב במקביליות מובנית וקל יותר להבין אותו. (I4a3a8) - מגדירים את
ProcessLifecycleInitializer
כציבורי כדי ש-androidx.startup.Initializer
אחרים יוכלו להשתמש בהם כיחסי תלות. (I94c31)
תיקוני באגים
- תוקנה בעיה בבדיקת האיתור של שגיאות בקוד (lint) של
NullSafeMutableLiveData
כשיש לשדה משתני אופן. (#147, b/183696616) - תוקנה בעיה נוספת בבדיקת ה-lint של
NullSafeMutableLiveData
כשמשתמשים ב-generics. (#161, b/184830263)
תרומה חיצונית
- תודה ל-maxsav על שיפור בדיקת האיתור של שגיאות בקוד (lint) ב-
NullSafeMutableLiveData
. (#147, b/183696616) - תודה ל-kozaxinan על שיפור בדיקת האיתור של שגיאות בקוד (lint) ב-
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>
שינויים ב-API
- הוספנו ממשק API מסוג
Flow.flowWithLifecycle
שמפיק ערכים מ-Flow במעלה הזרם כשמחזור החיים נמצא לפחות במצב מסוים באמצעות ממשק ה-API מסוגLifecycle.repeatOnLifecycle
. זוהי חלופה ל-API החדש שלLifecycleOwner.addRepeatinJob
. (I0f4cd)
תיקוני באגים
- מ-Lifecycle 2.3.1: עכשיו אפשר להבדיל כראוי בין משתני שדות עם יכולת אופציונליות שונה באמצעות כלל האיתור של שגיאות בקוד (lint)
NonNullableMutableLiveData
. (b/169249668)
Lifecycle Viewmodel Compose גרסה 1.0.0
גרסה 1.0.0-alpha07
16 ביוני 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
משוחרר. גרסה 1.0.0-alpha07 מכילה את ההצהרות האלה על ביצוע שינויים (commits).
שינויים ב-API שמשביתים את הקוד
- עכשיו אפשר להוסיף ל-
viewModel()
את השדה האופציונליViewModelStoreOwner
, כך שיהיה קל יותר לעבוד עם בעלים שאינםLocalViewModelStoreOwner
. לדוגמה, עכשיו אפשר להשתמש ב-viewModel(navBackStackEntry)
כדי לאחזר ViewModel שמשויך לתרשים ניווט מסוים. (I2628d, b/188693123)
גרסה 1.0.0-alpha06
2 ביוני 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
משוחרר. גרסה 1.0.0-alpha06 מכילה את ההוספות האלה.
העדכון מותאם לגרסה 1.0.0-beta08
של Compose.
גרסה 1.0.0-alpha05
18 במאי 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
משוחרר. גרסה 1.0.0-alpha05 מכילה את ההוספות האלה.
תכונות חדשות
- העדכון מותאם לגרסה
1.0.0-beta07
של Compose.
תיקוני באגים
- קובצי AndroidManifest מ-ui-test-manifest ומ-ui-tooling-data תואמים עכשיו ל-Android 12 (I6f9de, b/184718994)
גרסה 1.0.0-alpha04
7 באפריל 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
משוחרר. גרסה 1.0.0-alpha04 מכילה את ההצהרות האלה על ביצוע שינויים (commits).
שינויים ביחסי התלות
- הגרסה הזו מאפשרת ל-
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 כוללת את ההצהרות האלה.
שינויים ב-API
- הפונקציה
LocalViewModelStoreOwner.current
מחזירה עכשיוViewModelStoreOwner
שאפשר להעביר לו ערך null, כדי לקבוע טוב יותר אםViewModelStoreOwner
זמין בהרכב הנוכחי. ממשקי API שדורשיםViewModelStoreOwner
, כמוviewModel()
ו-NavHost
, עדיין גורמים להשלכת חריגה אם לא מגדיריםViewModelStoreOwner
. (Idf39a)
Lifecycle-Viewmodel-Compose גרסה 1.0.0-alpha02
24 בפברואר 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
משוחרר. גרסה 1.0.0-alpha02 מכילה את ההצהרות האלה.
שינויים ב-API
- ל-
LocalViewModelStoreOwner
יש עכשיו פונקציותprovides
שאפשר להשתמש בהן עםCompositionLocalProvider
, והן מחליפות את ה-API שלasProvidableCompositionLocal()
. (I45d24)
Lifecycle-Viewmodel-Compose גרסה 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
Lifecycle Version 2.3.1
24 במרץ 2021
androidx.lifecycle:lifecycle-*:2.3.1
משוחרר. גרסה 2.3.1 מכילה את השמירות האלה.
תיקוני באגים
- עכשיו כלל האיתור של שגיאות בקוד (lint)
NonNullableMutableLiveData
יכול להבדיל כראוי בין משתני שדה עם יכולת אופציונליות שונה. (b/169249668)
גרסה
גרסה
10 בפברואר 2021
androidx.lifecycle:lifecycle-*:2.3.0
משוחרר. גרסה 2.3.0 כוללת את ההצהרות האלה.
שינויים משמעותיים מאז גרסה 2.2.0
- תמיכה של
SavedStateHandle
בקטגוריות שלא ניתן לחלק לחלקים (non-parcelable):SavedStateHandle
תומך עכשיו בסריאליזציה עצלה (lazy serialization) ומאפשר לכם לקרוא ל-setSavedStateProvider()
למפתח נתון, ולספקSavedStateProvider
שיקבל קריאה חוזרת (callback) ל-saveState()
כשה-SavedStateHandle
יתבקש לשמור את המצב שלו. שמירה של כיתות שלא ניתן לפצל - אכיפת התנהגות במחזור החיים:
- LifecycleRegistry אוכף עכשיו את
DESTROYED
כמצב סופי. LifecycleRegistry
מאמת עכשיו שהשיטות שלו נקראות בשרשור הראשי. תמיד הייתה דרישה למחזור החיים של פעילויות, קטעי קוד וכו'. הוספת משגיחים משרשורות שאינם הראשיים הביאה לקריסות שקשה לזהות בסביבת זמן הריצה. לגבי אובייקטים מסוגLifecycleRegistry
שבבעלות הרכיבים שלכם, אתם יכולים לבטל את ההסכמה לבדיקות באופן מפורש באמצעותLifecycleRegistry.createUnsafe(...)
, אבל לאחר מכן תצטרכו לוודא שיש סנכרון תקין כשמתבצעת גישה ל-LifecycleRegistry
הזה משרשורות שונים.
- LifecycleRegistry אוכף עכשיו את
- עזרים למצבים ולאירועים במחזור החיים: נוספו ל-
Lifecycle.Event
שיטות עזר סטטיות שלdownFrom(State)
,downTo(State)
,upFrom(State)
ו-upTo(State)
ליצירתEvent
לפיState
וכיוון המעבר. נוספה השיטהgetTargetState()
שמספקת את הערך שלState
שאליו מחזור החיים יעבור מיד אחריEvent
. withStateAtLeast
: נוספו ממשקי API מסוגLifecycle.withStateAtLeast
שממתינים למצב של מחזור חיים ומפעילים באופן סינכרוני בלוק קוד שלא מושהה בנקודת שינוי המצב, ולאחר מכן ממשיכים עם התוצאה. ממשקי ה-API האלה שונים מהשיטות הקיימות שלwhen*
כי הם לא מאפשרים להריץ קוד בהשהיה ולא משתמשים במפזר מותאם אישית. (aosp/1326081)- ממשקי API של
ViewTree
: ממשקי API חדשים שלViewTreeLifecycleOwner.get(View)
ו-ViewTreeViewModelStoreOwner.get(View)
מאפשרים לאחזר אתLifecycleOwner
ו-ViewModelStoreOwner
המכילים, בהתאמה, נתונים של מכונה מסוג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 הוצא משימוש, כי הוא לא נדרש כשמשתמשים ב-Kotlin 1.4.
גרסה 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)
תרומה חיצונית
- ממשקי ה-API להשהיית פונקציות רפיטיביות (coroutines) שמותאמות למחזור חיים מטפלים עכשיו טוב יותר בקריאות ל-
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 מכילה את ההצהרות האלה.
שינויים ב-API
- הרחבת Kotlin
LiveData.observe()
שנדרשת לשימוש בתחביר lambda הוצאה משימוש, כי היא לא נדרשת כשמשתמשים ב-Kotlin 1.4. (I40d3f)
תיקוני באגים
- שדרוג androidx לשימוש ב-Kotlin 1.4 (Id6471, b/165307851, b/165300826)
שינויים במסמכי התיעוד
- העדכנו את ה-builder של
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 מכילה את ההוספות האלה.
תכונות חדשות
- נוספו ל-
Lifecycle.Event
שיטות עזר סטטיות שלdownFrom(State)
,downTo(State)
,upFrom(State)
ו-upTo(State)
ליצירתEvent
לפיState
וכיוון המעבר. נוספה השיטהgetTargetState()
שמספקת את הערך שלState
שאליו מחזור החיים יעבור מיד אחריEvent
. (I00887) - נוספו ממשקי API מסוג
Lifecycle.withStateAtLeast
שממתינים למצב במחזור החיים ומפעילים בלוק קוד לא מושהה באופן סינכרוני בנקודת שינוי המצב, ולאחר מכן ממשיכים עם התוצאה. ממשקי ה-API האלה שונים מהשיטות הקיימות של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
מטפל עכשיו טוב יותר במקרים של קריאה חוזרת (reentrant), ומונעת קריאות כפולות ל-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) - בדיקת ה-Lint של
NonNullableMutableLiveData
מכסה עכשיו מקרים רבים יותר שבהם ערךnull
הוגדר ב-MutableLiveData
עם פרמטר מסוג שאינו null. (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)- ממשק API חדש של
ViewTreeViewModelStoreOwner.get(View)
מאפשר לאחזר את ה-ViewModelStoreOwner
שמכיל את המופע שלView
. כדי לאכלס את השדה הזה בצורה נכונה, צריך לשדרג ל-Activity1.2.0-alpha05
, ל-Fragment1.3.0-alpha05
ול-AppCompat1.3.0-alpha01
. נוסף תוסףfindViewModelStoreOwner()
Kotlin ל-lifecycle-viewmodel-ktx
. (aosp/1295522)
תיקוני באגים
- תוקנה בעיה שגרמה לכך שבדיקות ה-Lint של
MutableLiveData
שפורסמו ב-Lifecycle2.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 מכילה את ההוספות האלה.
שינויים ב-API
- מעכשיו אפשר להעביר ל-
SavedStateViewModelFactory
ערך null שלApplication
ליצירת העצמים שלו, כדי לספק תמיכה טובה יותר במקרים שבהם לא ניתן למצוא ערך כזה בקלות ואין צורך בתמיכה ב-AndroidViewModel
. (aosp/1285740)
תיקוני באגים
- שיפור הביצועים בזמן ההפעלה הראשונית על ידי מניעת כשל באימות הכיתה במכשירים עם API מגרסה 28 ומטה. (aosp/1282118)
גרסה 2.3.0-alpha01
4 במרץ 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha01
משוחרר. גרסה 2.3.0-alpha01 מכילה את ההוספות האלה.
תכונות חדשות
- ממשק API חדש של
ViewTreeLifecycleOwner.get(View)
מאפשר לאחזר את ה-LifecycleOwner
שמכיל את המופע שלView
. כדי לאכלס את השדה הזה בצורה נכונה, צריך לשדרג ל-Activity1.2.0-alpha01
ול-Fragment1.3.0-alpha01
. תוסף Kotlin ל-findViewTreeLifecycleOwner
זמין ב-lifecycle-runtime-ktx
. (aosp/1182361, aosp/1182956) - הוספנו בדיקת Lint חדשה שמזהירה כשמגדירים ערך
null
ל-MutableLiveData
שהוגדר ב-Kotlin כ-non-null. האפשרות הזו זמינה כשמשתמשים ב-artifacts שלlivedata-core-ktx
אוlivedata-ktx
. (aosp/1154723, aosp/1159092) - יש גרסת
lifecycle-runtime-testing
חדשה של ארטיפקט שמספקתTestLifecycleOwner
שמטמיע אתLifecycleOwner
ומספקLifecycle
שניתן לשינוי בצורה בטוחה לשרשור. (aosp/1242438)
תיקוני באגים
- לארטיפקט
lifecycle-runtime
יש עכשיו שם חבילה ייחודי. (aosp/1187196)
גרסה 2.2.0
ViewModel-Savedstate גרסה 2.2.0
5 בפברואר 2020
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
משוחרר. גרסה 2.2.0 כוללת את ההצהרות האלה.
עכשיו, ל-Lifecycle ViewModel SavedState יש את אותה גרסה כמו לארטיפקטים אחרים של Lifecycle. ההתנהגות של 2.2.0
זהה להתנהגות של 1.0.0
.
גרסה 2.2.0
22 בינואר 2020
androidx.lifecycle:lifecycle-*:2.2.0
משוחרר. גרסה 2.2.0 כוללת את ההצהרות האלה.
שינויים חשובים מאז גרסה 2.1.0
- שילוב של פונקציות רפיטיביות (Coroutines) ב-Lifecycle: הארטיפקט החדש
lifecycle-runtime-ktx
מוסיף שילוב בין Lifecycle לבין פונקציות רפיטיביות ב-Kotlin. הרחבנו גם אתlifecycle-livedata-ktx
כדי לנצל את היתרונות של קורוטינים. פרטים נוספים זמינים במאמר שימוש ב-coroutines של Kotlin עם רכיבי ארכיטקטורה. - הוצאה משימוש של
ViewModelProviders.of()
: האפשרותViewModelProviders.of()
הוצאה משימוש. אפשר להעבירFragment
אוFragmentActivity
למבנה החדשViewModelProvider(ViewModelStoreOwner)
כדי לקבל את אותה פונקציונליות כשמשתמשים בקטע1.2.0
. - הוצאה משימוש של
lifecycle-extensions
: בהמשך להוצאה משימוש שלViewModelProviders.of()
שצוינה למעלה, הגרסה הזו מסמנת את הוצאת משימוש של ממשק ה-API האחרון ב-lifecycle-extensions
, ועכשיו צריך להתייחס לארטיפקט הזה כאל פריט שהוצא משימוש במלואו. מומלץ מאוד להשתמש ב-lifecycle-service
אם אתם משתמשים ב-LifecycleService
, ב-lifecycle-process
אם אתם משתמשים ב-ProcessLifecycleOwner
וב-lifecycle-process
אם אתם משתמשים ב-ProcessLifecycleOwner
, במקום ב-lifecycle-extensions
, כי לא תהיה גרסה עתידית שלlifecycle-extensions
עם2.3.0
. - Gradle Incremental Annotation Processor: מעבד האנוטציות של 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 על בדיקת ההטמעה של ביצוע מוטמע.
שינויים ביחסי התלות
- התוספים למעקב אחר מחזור חיים תלויים עכשיו ב-Fragment
1.2.0-rc03
.
גרסה 2.2.0-rc02
7 בנובמבר 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc02
משוחרר. גרסה 2.2.0-rc02 כוללת את ההוספות האלה.
תיקוני באגים
- תוקן באג בהגדרת Proguard של הספרייה שהשפיע על מכשירים עם API מגרסה 28 ואילך, אם ממשק ה-API היעד הוא מתחת לגרסה 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)
תכנים שנוספו על ידי גורמים חיצוניים
- תודה ל-Nicklas Ansman על התיקון! (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
של הפעילות ל-started ול-resumed במכשירי Android 10. (aosp/1128132) - תוקנה נסיגה שהופיעה ב-Lifecycle
2.2.0-alpha05
, שגרמה ל-NullPointerException
כשמשתמשים בגרסה2.0.0
או2.1.0
שלlifecycle-process
. (b/141536990)
גרסה 2.2.0-alpha05
18 בספטמבר 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha05
משוחרר. גרסה 2.2.0-alpha05 מכילה את ההצהרות האלה.
תיקוני באגים
- תוקן מצב מרוץ ב-coroutine livedata builder. b/140249349
גרסה 2.2.0-alpha04
5 בספטמבר 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha04
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תכונות חדשות
lifecycleScope
,whenCreated
,whenStarted
,whenResumed
,viewModelScope
וההטמעה הבסיסית שלliveData
משתמשים עכשיו ב-Dispatchers.Main.immediate
במקום ב-Dispatchers.Main
. (b/139740492)
תכנים שנוספו על ידי גורמים חיצוניים
- תודה ל-Nicklas Ansman על התרומה של המעבר אל
Dispatchers.Main.immediate
! (aosp/1106073)
גרסה 2.2.0-alpha03
7 באוגוסט 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha03
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תכונות חדשות
- עכשיו אפשר להטמיע את
HasDefaultViewModelProviderFactory
בהטמעות שלViewModelStoreOwner
כדי לספקViewModelProvider.Factory
שמוגדר כברירת מחדל. הפעולה הזו בוצעה עבור פעילות1.1.0-alpha02
, קטע1.2.0-alpha02
וניווט2.2.0-alpha01
. (aosp/1092370, b/135716331)
שינויים ב-API
- האפשרות
ViewModelProviders.of()
הוצאה משימוש. כדי להשיג את אותה פונקציונליות, אפשר להעבירFragment
אוFragmentActivity
למבנה החדשViewModelProvider(ViewModelStoreOwner)
. (aosp/1009889)
גרסה 2.2.0-alpha02
2 ביולי 2019
androidx.lifecycle:*:2.2.0-alpha02
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
שינויים ב-API
- החלפת
LiveDataScope.initialValue
ב-LiveDataScope.latestValue
, שיהיה אחראי למעקב אחרי הערך הנוכחי שמועבר על ידי הבלוקliveData
. - נוספה עומס יתר חדש ל-builder של
liveData
שמקבל את הפרמטרtimeout
כסוגDuration
גרסה 2.2.0-alpha01
7 במאי 2019
androidx.lifecycle:*:2.2.0-alpha01
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תכונות חדשות
- בגרסה הזו נוספו תכונות חדשות עם תמיכה ב-coroutines של Kotlin ל-Lifecycle ול-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
לגשת למצב השמור ולתרום לו. אפשר לקבל את האובייקט הזה ב-constructor של הכיתהViewModel
, והמפעלים שסופקו כברירת מחדל על ידי Fragments ו-AppCompatActivity יזריקו אתSavedStateHandle
באופן אוטומטי. - נוספה AbstractSavedStateViewModelFactory. הוא מאפשר ליצור מפעלים מותאמים אישית ל-
ViewModel
ולספק להם גישה ל-SavedStateHandle
.
ViewModel-Savedstate גרסה 1.0.0-rc03
4 בדצמבר 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
משוחרר. גרסה 1.0.0-rc03 כוללת את ההצהרות האלה.
שינויים ביחסי התלות
- המצב השמור של Lifecycle ViewModel תלוי עכשיו ב-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
.
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-beta01 מכילה את ההצהרות האלה.
תיקוני באגים
- תוקנה בעיה שבה גישה ל-SavedState 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 מכילה את ההצהרות האלה.
שינויים ב-API
SavedStateViewModelFactory
כבר לא מרחיב אתAbstractSavedStateViewModelFactory
ו-SavedStateHandle
נוצר רק ל-ViewModels שביקשו זאת (aosp/1113593)
גרסת ViewModel-SavedState 1.0.0-alpha03
7 באוגוסט 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
שינויים שעלולים לגרום לכשלים
lifecycle-viewmodel-savedstate
כבר לא תלוי ב-fragment
, והמגדירים הקשוריםSavedStateViewModelFactory(Fragment)
ו-SavedStateViewModelFactory(FragmentActivity)
הוסרו. במקום זאת,SavedStateViewModelFactory
הוא עכשיו המפעל שמוגדר כברירת מחדל ל-Activity1.1.0-alpha02
, ל-Fragment1.2.0-alpha02
ול-Navigation2.2.0-alpha01
. (b/135716331)
ViewModel-SavedState גרסה 1.0.0-alpha02
2 ביולי 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תכונות חדשות
- נוספה עומס יתר של
SavedStateHandle.getLiveData()
שמקבל ערך ברירת מחדל.
שינויים ב-API
- השם של
SavedStateVMFactory
השתנה ל-SavedStateViewModelFactory
. - השם של
AbstractSavedStateVMFactory
השתנה ל-AbstractSavedStateViewModelFactory
.
ViewModel-Savedstate גרסה 1.0.0-alpha01
13 במרץ 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
משוחרר. יומן ההתחייבויות המלא של הגרסה הראשונית הזו זמין כאן.
תכונות חדשות
- עכשיו
ViewModels
יכול לתרום ל-savedstate. כדי לעשות זאת, משתמשים במפעל החדש של ה-ViewModelSavedStateVMFactory
, ול-ViewModel צריך להיות קונסטרוקטור שמקבל את האובייקטSavedStateHandle
כפרמטר.
גרסה
שינויים חשובים מאז גרסה 2.0.0
- נוספה
LifecycleEventObserver
למקרים שבהם יש צורך בזרם של אירועי מחזור חיים. זהו ממשק API ציבורי במקום כיתהGenericLifecycleObserver
מוסתרת. - נוספו תוספים מסוג ktx לשיטות
LiveData.observe
ולשיטותTransformations.*
. - נוספה
Transformations.distinctUntilChanged
, שמאפשרת ליצור אובייקט LiveData חדש שלא משדר ערך עד שערכו של המקורLiveData
ישתנה. - הוספנו תמיכה ב-coroutine ב-ViewModels על ידי הוספת מאפיין ההרחבה
ViewModel.viewModelScope
.
גרסה
5 בספטמבר 2019
androidx.lifecycle:lifecycle-*:2.1.0
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
גרסה 2.1.0-rc01
2 ביולי 2019
androidx.lifecycle:*:2.1.0-rc01
משוחרר ללא שינויים מ-androidx.lifecycle:*:2.1.0-beta01
. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
גרסה 2.1.0-beta01
7 במאי 2019
androidx.lifecycle:*:2.1.0-beta01
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
תכונות חדשות
- מעבר של מחזורי חיים לגרסת בטא: ממשקי API שהוצגו בגרסאות אלפא קודמות, כמו פונקציות ההרחבה
liveData
לטרנספורמציות ולתצפיות,ViewModel
אתחול עם הענקת גישה לנכסים ועוד, עברו תהליך יצירה ויציבות ולא ישתנו.
גרסה 2.1.0-alpha04
3 באפריל 2019
androidx.lifecycle:*:2.1.0-alpha04
משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.
שינויים ב-API
- שינוי שפוגע בתאימות: ממשק ה-API הבסיסי שמאחורי
by viewModels()
ו-by activityViewModels()
השתנה כך שיתמוך ישירות ב-ViewModelStore
, ולא רק ב-ViewModelStoreOwner
. (aosp/932932)
גרסה 2.1.0-alpha03
13 במרץ 2019
androidx.lifecycle:*:2.1.0-alpha03
משוחרר. כאן אפשר למצוא את הרשימה המלאה של השינויים שכלולים בגרסה הזו.
שינויים ב-API
- השדה
ViewModelProvider.KeyedFactory
הוסר. הממשק השני בנוסף ל-ViewModelProvider.Factory
לא התאים היטב לתכונות חדשות כמו הענקת גישה לנכס ב-Kotlinby viewmodels {}
. (aosp/914133)
גרסה 2.1.0-alpha02
30 בינואר 2019
androidx.lifecycle 2.1.0-alpha02
משוחרר.
שינויים ב-API
LifecycleRegistry
מכיל עכשיו את השיטהsetCurrentState()
שמחליפה את השיטהsetState()
, שהוצאה משימוש. (aosp/880715)
תיקוני באגים
- תוקנה בעיה שבה מכונות
ViewModel
מדמיקות קרסו כשה-ViewModelStore
המכיל אותן נמחק. b/122273087
גרסה 2.1.0-alpha01
17 בדצמבר 2018
androidx.lifecycle 2.1.0-alpha01
משוחרר.
תכונות חדשות
- נוספה
LifecycleEventObserver
למקרים שבהם יש צורך בזרם של אירועי מחזור חיים. זהו ממשק API ציבורי במקום סוגGenericLifecycleObserver
מוסתר. - נוספו תוספים מסוג ktx לשיטות
LiveData.observe
ולשיטותTransformations.*
. - השיטה
Transformations.distinctUntilChanged
נוספה. הוא יוצר אובייקטLiveData
חדש שלא פולט ערך עד שערכו של מקור LiveData ישתנה. - תמיכה ב-Coroutine ב-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 כדי לאפשר ערפול קוד (obfuscation) וצמצום (shrinking)
גרסאות קודמות ל-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
שינויים ב-API
- השדות
LifecycleActivity
ו-LifecycleFragment
הוצאו משימוש והוסרו. יש להשתמש בשדותFragmentActivity
,AppCompatActivity
או בתמיכהFragment
. - נוספו הערות
@NonNull
ל-ViewModelProviders
ול-ViewModelStores
- ה-constructor של
ViewModelProviders
הוצא משימוש – יש להשתמש בשיטות הסטטיות שלו ישירות ViewModelProviders.DefaultFactory
הוצא משימוש – יש להשתמש ב-ViewModelProvider.AndroidViewModelFactory
- השיטה הסטטית
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
נוספה כדי לאחזרFactory
סטטי שמתאים ליצירת מכונותViewModel
ו-AndroidViewModel
.