Lifecycle
Tabel ini mencantumkan semua artefak dalam grup androidx.lifecycle
.
Artefak | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa |
---|---|---|---|---|
lifecycle-* | 2.8.7 | - | - | 2.9.0-alpha08 |
lifecycle-viewmodel-compose | 2.8.7 | - | - | 2.9.0-alpha08 |
Mendeklarasikan dependensi
Untuk menambahkan dependensi pada Lifecycle, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk informasi selengkapnya.
Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle
bagi aplikasi atau modul Anda:
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") }
Untuk mengetahui informasi dependensi selengkapnya, lihat Menambahkan Dependensi Build.
Masukan
Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.
Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.
Versi 2.9
Versi 2.9.0-alpha08
11 Desember 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha08
dirilis. Versi 2.9.0-alpha08 berisi commit ini.
Fitur Baru
- Tambahkan
ViewModelScenario.recreate
untuk menyimulasikan Kematian Proses Sistem yang membuat ulangViewModel
yang sedang diuji dan semua komponen terkait. (Id6a69, b/381063087) - Instance
LifecycleOwner
danViewModelStoreOwner
yang diambil melaluifindViewTree
API masing-masing kini dapat di-resolve melalui induk yang tidak terhubung dari tampilan, sepertiViewOverlay
. Lihat catatan rilis core atau dokumentasi diViewTree.setViewTreeDisjointParent
untuk informasi selengkapnya tentang induk tampilan yang tidak terhubung. (I800f4)
Perubahan API
- Membuat penamaan dan pengaturan paket lebih konsisten dengan
SavedStateRegistryOwnerDelegate
(I8c135, b/376026744)
Perbaikan Bug
- Library ini kini menggunakan anotasi nullness JSpecify, yang merupakan penggunaan jenis. Developer Kotlin harus menggunakan argumen compiler berikut untuk menerapkan penggunaan yang benar:
-Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode
(Ie4340, b/326456246) - Mendokumentasikan urutan penghapusan
ViewModel.onCleared
. (I586c7, b/363984116)
Versi 2.9.0-alpha07
13 November 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha07
dirilis. Versi 2.9.0-alpha07 berisi commit ini.
Kompatibilitas Multiplatform Kotlin
- Lifecycle
ViewModel SavedState
kini kompatibel dengan KMP. Hal ini memungkinkan Anda menggunakanSavedStateHandle
dalam kode umum. (Ib6394, b/334076622)
Dukungan Serialisasi KotlinX
Dengan dukungan KotlinX Serialization yang ditambahkan di SavedState
1.3.0-alpha05
, kami telah memperkenalkansaved
, delegasi properti lambat, untuk memudahkan penyimpanan class@Serializable
diSavedStateHandle
dan membuat class tersebut otomatis dipulihkan di seluruh penghentian dan pembuatan ulang proses. Perhatikan bahwa delegasisaved
lambat dan tidak akan memanggil lambdainit
atau menyimpan apa pun keSavedStateHandle
hingga diakses. (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 } }
Perubahan API
- Tambahkan
getMutableStateFlow
keSavedStateHandle
untuk menampilkanMutableStateFlow
. Fungsi baru ini bersifat eksklusif untuk kunci dan tidak dapat digunakan dengangetLiveData
. Pengecualian akan ditampilkan jika Anda mencoba menggunakan keduanya untuk mengakses status yang sama. (I04a4f, b/375408415)
Versi 2.9.0-alpha06
30 Oktober 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha06
dirilis. Versi 2.9.0-alpha06 berisi commit ini.
Perubahan Perilaku
- Status
Lifecycle.DESTROYED
bersifat terminal, dan setiap upaya untuk memindahkanLifecycle
dari status tersebut ke status lain kini akan menghasilkanIllegalStateException
. (I116c4, b/370577987) SavedStateHandle
tidak lagi menyertakanSavedStateProvider.saveState()
jikaBundle
yang ditampilkan kosong. (I910b5, b/370577987)
Perbaikan Bug
Lifecycle.eventFlow
kini selesai dengan benar saatLifecycle
adalahDESTROYED
(I293b2, b/374043130)
Versi 2.9.0-alpha05
16 Oktober 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha05
dirilis tanpa perubahan penting. Versi 2.9.0-alpha05 berisi commit ini.
Versi 2.9.0-alpha04
2 Oktober 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha04
dirilis. Versi 2.9.0-alpha04 berisi commit ini.
Multiplatform Kotlin
- Modul
lifecycle-viewmodel-savedstate
kini dikonfigurasi agar kompatibel dengan KMP sebagai persiapan untuk API sepertiSavedStateHandle
yang tersedia di set sumber umum dalam rilis mendatang. (I503ed, I48764, b/334076622)
Versi 2.9.0-alpha03
18 September 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha03
dirilis. Versi 2.9.0-alpha03 berisi commit ini.
Perbaikan Bug
- Dari Lifecycle
2.8.6
: Error LintNullSafeMutableLiveData
telah meningkatkan dukungan untuk smart cast, sehingga menghindari positif palsu. (85fed6, b/181042665)
Update Dependensi
- Dari Lifecycle
2.8.6
: Lifecycle Runtime Compose kini bergantung pada Compose Runtime1.7.1
- Runtime Lifecycle kini bergantung pada ProfileInstaller
1.4.0
Versi 2.9.0-alpha02
4 September 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha02
dirilis. Versi 2.9.0-alpha02 berisi commit ini.
Perbaikan Bug
- Dari Lifecycle
2.8.5
: Memperbarui aturan ProGuardandroidx.lifecycle.ReportFragment
untuk mengizinkan obfuscation . (ff898e1)
Kontribusi Eksternal
- Pindahkan
androidx.compose.ui.platform.LocalLifecycleOwner
ke set sumber umum (KMP). Terima kasih Ivan Matkov dari JetBrains atas kontribusinya. (8cd5d03) - Dari Lifecycle
2.8.5
: Delegasi ekstensi SavedStateHandle.saveable` kini mendukung nilai nullable. Terima kasih Roman Kalukiewicz atas kontribusinya. (0d78ea6)
Versi 2.9.0-alpha01
7 Agustus 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha01
dirilis. Versi 2.9.0-alpha01 berisi commit ini.
Multiplatform Kotlin
lifecycle-testing
kini kompatibel dengan KMP. (Iea41e)- Menambahkan dukungan untuk target multiplatform kotlin
linuxArm64
(I139d3, b/338268719)
Fitur Baru
- Artefak KMP
androidx.lifecycle:lifecycle-viewmodel-testing
baru tersedia yang menyediakan classViewModelScenario
untuk menguji ViewModel secara terpisah, dengan dukungan untukonCleared
(semua platform) danSavedStateHandle
(khusus Android). (337f68d, c9b3409, 9799a95c, b/264602919) - Membuat
ViewModel
denganViewModelProvider
kini aman untuk thread; anotasi@MainThread
telah dihapus. (Ifd978, b/237006831)
Perubahan API
- Tambahkan fungsi factory
CreationExtras.Key()
untuk menyederhanakan pembuatan objekCreationExtras.Key
anonim. (I970ee) CreationExtras
kini menyertakan overload operator seperti peta untuk memungkinkan manipulasi konten idiomatis di Kotlin. Hal ini memungkinkan penggunaanin
,+=
, dan+
denganCreationExtras
. (Ib4353)CreationExtras
sekarang mengimplementasikan metodeequals
,hashCode
, dantoString
. (Ib4353)NewInstanceFactory
kini tersedia di target Desktop dan Android JVM. (d3d0892)- Properti ekstensi inline untuk mengekspos Aplikasi yang mendasarinya dengan aman dalam bahasa Kotlin versi 2.0 (I39df2)
Perbaikan Bug
- Menghapus garis besar manual akses ke API platform baru karena hal ini terjadi secara otomatis melalui pemodelan API saat menggunakan R8 dengan AGP 7.3 atau yang lebih baru (misalnya, R8 versi 3.3) dan untuk semua build saat menggunakan AGP 8.1 atau yang lebih baru (misalnya, D8 versi 8.1). Klien yang tidak menggunakan AGP disarankan untuk mengupdate ke D8 versi 8.1 atau yang lebih baru. Baca artikel ini untuk informasi selengkapnya. (If6b4c, b/345472586)
Versi 2.8
Versi 2.8.7
30 Oktober 2024
androidx.lifecycle:lifecycle-*:2.8.7
dirilis. Versi 2.8.7 berisi commit ini.
Perubahan API
androidx.compose.ui.platform.LocalLifecycleOwner
kini tersedia di set sumber umum (KMP). (6a3f5b3)lifecycle-runtime-compose
: Artefakdesktop
dihapus dan artefak-jvmStubs
dan-linuxx64Stubs
ditambahkan. Tidak satu pun target ini yang dimaksudkan untuk digunakan, melainkan sebagai placeholder untuk membantu upaya Jetbrains Compose. (6a3f5b3)
Versi 2.8.6
18 September 2024
androidx.lifecycle:lifecycle-*:2.8.6
dirilis. Versi 2.8.6 berisi commit ini.
Perbaikan Bug
- Error Lint
NullSafeMutableLiveData
telah meningkatkan dukungan untuk transmisi smart, sehingga menghindari positif palsu. (85fed6, b/181042665)
Update Dependensi
- Lifecycle Runtime Compose kini bergantung pada Compose Runtime
1.7.1
Versi 2.8.5
4 September 2024
androidx.lifecycle:lifecycle-*:2.8.5
dirilis. Versi 2.8.5 berisi commit ini.
Perbaikan Bug
- Perbarui aturan ProGuard
androidx.lifecycle.ReportFragment
untuk mengizinkan obfuscation . (ff898e1)
Kontribusi Eksternal
- Delegasi ekstensi
SavedStateHandle.saveable
kini mendukung nilai nullable. Terima kasih Roman Kalukiewicz atas kontribusinya. (0d78ea6)
Versi 2.8.4
24 Juli 2024
androidx.lifecycle:lifecycle-*:2.8.4
dirilis. Versi 2.8.4 berisi commit ini.
Perbaikan Bug
LiveData.asFlow()
kini menangani kasus dengan benar saat Flow yang ditampilkan langsung diselesaikan setelah menerima nilai yang telah ditetapkan diLiveData
(misalnya, saat menggunakantake(1)
). (I9c566)- Penyelesaian
Lifecycle*Effect
kini bersifat idempoten (yaitu, jikaonStopOrDispose
dipanggil karena Lifecycle dihentikan,onStopOrDispose
tidak akan dipanggil untuk kedua kalinya setelah dihapus, kecuali jika Lifecycle kembali keSTARTED
lagi). (I5f607, b/352364595)
Versi 2.8.3
1 Juli 2023
androidx.lifecycle:lifecycle-*:2.8.3
dirilis. Versi 2.8.3 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah kompatibilitas mundur Lifecycle 2.8 dengan Compose 1.6.0 dan yang lebih lama saat menggunakan penyingkatan kode. (aosp/3133056, b/346808608)
Versi 2.8.2
12 Juni 2024
androidx.lifecycle:lifecycle-*:2.8.2
dirilis. Versi 2.8.2 berisi commit ini.
Perbaikan Bug
- Memperbaiki error
CompositionLocal LocalLifecycleOwner not present
saat menggunakan Lifecycle 2.8.X dengan Compose 1.6.X atau yang lebih lama - Anda kini dapat menggunakan Lifecycle 2.8.2 dengan versi Compose apa pun tanpa memerlukan solusi apa pun. (aosp/3105647, b/336842920) ViewModelProvider
tidak akan error lagi saat menggabungkan dependensi LifecyclecompileOnly
versi sebelumnya dengan versi 2.8 dan yang lebih baru, sehingga memperbaiki masalah pada library seperti LeakCanary. (I80383, b/341792251)
Versi 2.8.1
29 Mei 2024
androidx.lifecycle:lifecycle-*:2.8.1
dirilis. Versi 2.8.1 berisi commit ini.
Perbaikan Bug
lifecycle-viewmodel-compose
kini hanya memiliki dependensi umum padacompose-runtime
, yang menghapus dependensi umumnya padacompose-ui
. Artefak Android mempertahankancompose-ui
-nya untuk kompatibilitas. (aosp/3079334, b/339562627)- Integrasi
saveable
ViewModel
menggunakan delegasi properti kini menggunakan nama class sebagai bagian dari kunci yang dibuat otomatis, sehingga menghindari konflik jika beberapa class menggunakanSavedStateHandle
yang sama. (aosp/3063463)
Versi 2.8.0
14 Mei 2024
androidx.lifecycle:lifecycle-*:2.8.0
dirilis. Versi 2.8.0 berisi commit ini.
Perubahan penting sejak versi 2.7.0
LocalLifecycleOwner
telah dipindahkan dari UI Compose kelifecycle-runtime-compose
sehingga API helper berbasis Compose-nya dapat digunakan di luar UI Compose.- Artefak
lifecycle-runtime-compose
kini berisi APIdropUnlessResumed
dandropUnlessStarted
yang memungkinkan Anda menghapus klik atau peristiwa lain yang terjadi bahkan setelahLifecycleOwner
turun di bawahLifecycle.State
yang diberikan. Misalnya, ini dapat digunakan dengan Navigation Compose untuk menghindari penanganan peristiwa klik setelah transisi ke layar lain telah dimulai:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
ViewModel.viewModelScope
kini merupakan parameter konstruktor yang dapat diganti, sehingga Anda dapat memasukkan dispatcher danSupervisorJob()
Anda sendiri atau mengganti default dengan menggunakanbackgroundScope
yang tersedia dalamrunTest
. (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
telah ditulis ulang di Kotlin dan kini menggunakanAutoClosable
, bukanCloseable
. Sekarang, fungsi ini mendukung penambahan objekAutoCloseable
dengankey
yang memungkinkan pengambilannya melaluigetCloseable()
.Memanggil
LifecycleStartEffect
danLifecycleResumeEffect
tanpa kunci kini akan menghasilkan error, mengikuti konvensi yang sama denganDisposableEffect
API yang dicerminkan oleh API ini.LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
tidak digunakan lagi dan diganti denganLiveData.toPublisher(lifecycleOwner)
.Ekstensi kotlin
lifecycle-livedata-core-ktx
kini telah dipindahkan ke modullifecycle-livedata-core
.NullSafeMutableLiveData
telah difaktorkan ulang untuk menghindari banyak positif palsu.
Kompatibilitas Multiplatform Kotlin Siklus Proses
Lifecycle API inti di Lifecycle
, LifecycleOwner
, LifecycleObserver
, Lifecycle.State
, Lifecycle.Event
, dan LifecycleRegistry
kini dikirim dalam artefak yang kompatibel dengan Multiplatform Kotlin.
Artefak yang terpengaruh:
lifecycle-common
memindahkan sebagian besar API kecommon
dan mendukung jvm dan iOS selain Android.lifecycle-runtime
memindahkan sebagian besar API kecommon
dan mendukung jvm dan iOS selain Android.lifecycle-runtime-ktx
kini kosong, dengan semua API dipindahkan kelifecycle-runtime
.lifecycle-runtime-compose
memindahkan semua API kecommon
dan mengirimkan artefak Android, yang cocok dengan dukungan multiplatformandroidx.compose
.
Kompatibilitas Multiplatform Kotlin ViewModel
Artefak lifecycle-viewmodel
dan API seperti ViewModel
, ViewModelStore
, ViewModelStoreOwner
, dan ViewModelProvider
kini dikirim dalam artefak yang kompatibel dengan Multiplatform Kotlin.
Untuk mengakomodasi perubahan ini, metode seperti yang ada di ViewModelProvider
yang menggunakan java.lang.Class<T>
kini memiliki metode yang setara yang menggunakan kotlin.reflect.KClass<T>
.
Kompatibilitas biner di Android telah dipertahankan, tetapi ada beberapa perubahan penting saat membandingkan platform API Android dengan platform API umum:
- Pembuatan instance
ViewModelProvider
kini dilakukan melalui metodeViewModelProvider.create()
, bukan langsung memanggil konstruktornya. ViewModelProvider.NewInstanceFactory
danViewModelProvider.AndroidViewModelFactory
hanya tersedia di Android.- Factory Kustom direkomendasikan untuk diperluas dari
ViewModelProvider.Factory
dan menggunakan metodecreate
yang menggunakanCreationExtras
atau menggunakan DSL KotlinviewModelFactory
.
- Factory Kustom direkomendasikan untuk diperluas dari
- Menggunakan
ViewModelProvider
tanpa factory kustom di platform non-JVM akan menghasilkanUnsupportedOperationException
. Di platform JVM, kompatibilitas dipertahankan dengan menggunakan konstruktor ViewModel tanpa argumen jika factory kustom tidak disediakan. viewModelScope
akan kembali keEmptyCoroutineContext
di platform tempatDispatchers.Main
tidak tersedia (mis., Linux).
Artefak yang terpengaruh:
lifecycle-viewmodel
memindahkan sebagian besar API kecommon
dan mendukung jvm dan iOS selain Android.lifecycle-viewmodel-ktx
kini kosong, dengan semua API dipindahkan kelifecycle-viewmodel
.lifecycle-viewmodel-compose
memindahkan semua API kecommon
dan mengirimkan artefak Android, yang cocok dengan dukungan multiplatformandroidx.compose
.
Perubahan Perilaku
InitializerViewModelFactory
(termasuk fungsi builderviewModelFactory
) kini akan menampilkanIllegalArgumentException
jikainitializer
denganclazz: KClass<VM : ViewModel>
yang sama telah ditambahkan. (Ic3a36)
Masalah Umum
lifecycle-*:2.8.0
memerlukan versi Compose minimum 1.7.0-alpha05 (b/336842920).
Versi 2.8.0-rc01
1 Mei 2024
androidx.lifecycle:lifecycle-*:2.8.0-rc01
dirilis. Versi 2.8.0-rc01 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah saat Profil Dasar Pengukuran untuk class
lifecycle-common
tidak dikemas dengan benar. Sekarang, keduanya dikemas dalam AARlifecycle-runtime
. (aosp/3038274, b/322382422) - Memperbaiki perubahan pengurutan yang tidak disengaja dalam cara instance
AutoCloseable
yang dilampirkan ke ViewModel dihapus - urutan sebelumnyaaddCloseable(String, AutoCloseable)
, laluaddClosable(AutoCloseable)
, laluonCleared()
telah dipulihkan. (aosp/3041632) - Meningkatkan perilaku pembuatan default untuk
viewModelScope
untuk lingkungan Desktop native dan JVM. (aosp/3039221)
Kontribusi Eksternal
- Terima kasih Victor Kropp karena telah meningkatkan pemeriksaan untuk thread utama di Desktop JVM. (aosp/3037116)
Versi 2.8.0-beta01
17 April 2024
androidx.lifecycle:lifecycle-*:2.8.0-beta01
dirilis. Versi 2.8.0-beta01 berisi commit ini.
Fitur Baru
- Artefak
lifecycle-runtime-compose
kini kompatibel dengan Multiplatform Kotlin, memindahkan kodenya kecommon
dan mengirimkan artefak Android, yang cocok dengan dukungan multiplatform untukandroidx.compose
. (If7a71, I4f4a0, b/331769623)
Versi 2.8.0-alpha04
3 April 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha04
dirilis. Versi 2.8.0-alpha04 berisi commit ini.
Fitur Baru
- Artefak
lifecycle-viewmodel-compose
kini kompatibel dengan Multiplatform Kotlin, memindahkan kodenya kecommon
dan mengirimkan artefak Android, yang cocok dengan dukungan multiplatformandroidx.compose
. Untuk mengakomodasi perubahan ini, metodeviewModel
Composable kini menerimaKClass
selainjava.lang.Class
. (b/330323282)
Perbaikan Bug
NullSafeMutableLiveData
telah difaktorkan ulang untuk menghindari banyak positif palsu. (I2d8c1, Iafb18, I03463, I7ecef)
Pembaruan dependensi
- Artefak
lifecycle-viewmodel-compose
kini bergantung pada Compose 1.6.0. - Lifecycle kini bergantung pada Profile Installer 1.3.1.
Versi 2.8.0-alpha03
20 Maret 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha03
dirilis. Versi 2.8.0-alpha03 berisi commit ini.
Fitur Baru
ViewModel.viewModelScope
kini merupakan parameter konstruktor yang dapat diganti, sehingga Anda dapat memasukkan dispatcher danSupervisorJob()
Anda sendiri atau mengganti default dengan menggunakanbackgroundScope
yang tersedia dalamrunTest
. (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) }
Kompatibilitas Multiplatform Kotlin
Artefak lifecycle-viewmodel
dan API seperti ViewModel
, ViewModelStore
, ViewModelStoreOwner
, dan ViewModelProvider
kini dikirim dalam artefak yang kompatibel dengan Multiplatform Kotlin. (b/214568825)
Untuk mengakomodasi perubahan ini, metode seperti yang ada di ViewModelProvider
yang menggunakan java.lang.Class<T>
kini memiliki metode yang setara yang menggunakan kotlin.reflect.KClass<T>
.
Kompatibilitas biner di Android telah dipertahankan, tetapi ada beberapa perubahan penting saat membandingkan platform API Android dengan platform API umum:
- Pembuatan instance
ViewModelProvider
kini dilakukan melalui metodeViewModelProvider.create()
, bukan langsung memanggil konstruktornya. ViewModelProvider.NewInstanceFactory
danViewModelProvider.AndroidViewModelFactory
hanya tersedia di Android.- Factory Kustom direkomendasikan untuk diperluas dari
ViewModelProvider.Factory
dan menggunakan metodecreate
yang menggunakanCreationExtras
atau menggunakan DSL KotlinviewModelFactory
.
- Factory Kustom direkomendasikan untuk diperluas dari
- Menggunakan
ViewModelProvider
tanpa factory kustom di platform non-JVM akan menghasilkanUnsupportedOperationException
. Di platform JVM, kompatibilitas dipertahankan dengan menggunakan konstruktor ViewModel tanpa argumen jika factory kustom tidak disediakan. viewModelScope
akan kembali keEmptyCoroutineContext
di platform tempatDispatchers.Main
tidak tersedia (mis., Linux).
Perubahan Perilaku
InitializerViewModelFactory
(termasuk fungsi builderviewModelFactory
) kini akan menampilkanIllegalArgumentException
jikainitializer
denganclazz: KClass<VM : ViewModel>
yang sama telah ditambahkan. (Ic3a36)
Perbaikan Bug
ViewModel.getCloseable
kini menangani kunci duplikat: jikakey
sudah memiliki resourceAutoCloseable
yang terkait dengannya, resource lama akan segera diganti dan ditutup. (Ibeb67)- Mengakses
viewModelScope
dariViewModel
kini aman untuk thread. (If4766, b/322407038)
Kontribusi Eksternal
LocalLifecycleOwner
dipindahkan dari UI Compose ke lifecycle-runtime-compose sehingga API helper berbasis Compose-nya dapat digunakan di luar UI Compose. Terima kasih Jake Wharton atas kontribusinya. (I6c41b, b/328263448)
Versi 2.8.0-alpha02
21 Februari 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha02
dirilis. Versi 2.8.0-alpha02 berisi commit ini.
Fitur Baru
- API
dropUnlessResumed
dandropUnlessStarted
telah ditambahkan yang memungkinkan Anda menghapus klik atau peristiwa lain yang terjadi bahkan setelahLifecycleOwner
turun di bawahLifecycle.State
yang diberikan. Misalnya, ini dapat digunakan dengan Navigation Compose untuk menghindari penanganan peristiwa klik setelah transisi ke layar lain telah dimulai:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
(Icba83, b/317230685)
Konversi Kotlin
ViewModel
kini ditulis di Kotlin (I16f26, b/214568825)- Ekstensi kotlin
lifecycle-viewmodel-ktx
kini telah dipindahkan ke modul siklus proses dasar. (Id787b, b/274800183) - Ekstensi kotlin
lifecycle-runtime-ktx
kini telah dipindahkan ke modul siklus proses dasar. (Ic3686, b/274800183) - Ekstensi kotlin
lifecycle-livedata-core-ktx
kini telah dipindahkan ke modul siklus proses dasar. (I54a3d, b/274800183)
Kompatibilitas Multiplatform Kotlin
- Lifecycle API inti di
Lifecycle
,LifecycleOwner
,LifecycleObserver
,Lifecycle.State
,Lifecycle.Event
, danLifecycleRegistry
kini dikirim dalam artefak yang kompatibel dengan Multiplatform Kotlin. (b/317249252)
Perubahan API
- Memanggil
LifecycleStartEffect
danLifecycleResumeEffect
tanpa kunci kini akan menghasilkan error, mengikuti konvensi yang sama denganDisposableEffect
API yang dicerminkan oleh API ini. (Ib0e0c, b/323518079) ViewModel
sekarang menggunakanAutoCloseable
, bukanCloseable
. Ini adalah perubahan yang kompatibel dengan versi lama. (I27f8e, b/214568825)LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
tidak digunakan lagi dan diganti denganLiveData.toPublisher(lifecycleOwner)
. (Iabe29, b/262623005)
Kontribusi Eksternal
- Terima kasih Ivan Matkov dari Jetbrains karena telah membantu memindahkan Lifecycle ke Multiplatform Kotlin. (aosp/2926690, I0c5ac, If445d)
Versi 2.8.0-alpha01
24 Januari 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha01
dirilis. Versi 2.8.0-alpha01 berisi commit berikut.
Fitur Baru
ViewModel
kini mendukung penambahan objekCloseable
dengankey
yang memungkinkan pengambilannya melaluigetCloseable()
. (I3cf63)
Versi 2.7
Versi 2.7.0
10 Januari 2024
androidx.lifecycle:lifecycle-*:2.7.0
dirilis. Versi 2.7.0 berisi commit ini.
Perubahan penting sejak 2.6.0
TestLifecycleOwner
kini menyertakan fungsi penangguhansetCurrentState()
yang memastikan bahwa perubahan status dan semua callbackLifecycleObserver
selesai sebelum ditampilkan. Perlu diperhatikan, tidak seperti menetapkan properticurrentState
secara langsung, hal ini tidak menggunakanrunBlocking
, sehingga aman digunakan dalam coroutine seperti yang disediakan olehrunTest
.- Ekstensi
LiveData
darimap
danswitchMap
kini mencerminkan perilakudistinctUntilChanged
- jikaLiveData
memiliki kumpulanvalue
, fungsimap
/switchMap
akan langsung dipanggil untuk mengisivalue
dariLiveData
yang ditampilkan. Tindakan ini memastikan bahwa nilai awal akan ditetapkan sebagai bagian dari komposisi pertama (saat digunakan denganobserveAsState()
), tetapi tidak mengubah perilaku pengamatan - nilai pembaruan dariLiveData
sumber hanya akan berlaku setelah Anda mulai mengamatiLiveData
. - Rilis ini memperbaiki masalah saat
SavedStateHandle
tidak akan memulihkan classParcelable
kustom dengan benar setelah penghentian dan pembuatan ulang proses. Karena informasi jenis yang hilang oleh framework Android, array Parcelables kustom memerlukan pekerjaan tambahan (membuat array berjenis jenis yang tepat secara manual) dan dokumentasi diget
,getLiveData
, dangetStateFlow
kini secara khusus menyebutkan batasan ini. - Aturan proguard keep yang terkait dengan
LifecycleObserver
telah dihapus. Artinya, kode yang dilindungi yang ingin menggunakan API melalui refleksi (seperti menggunakan anotasi@OnLifecycleEvent
yang sudah tidak digunakan lagi) harus menyediakan aturan keep-nya sendiri untuk kasus penggunaan tertentu.
Kemampuan Observasi Peristiwa Siklus Proses
- Sebagai alternatif penggunaan
LifecycleEventObserver
, Anda kini dapat mengamatiFlow
dariLifecycle.Event
melalui metode ekstensiLifecycle.asFlow()
. - Pengguna Jetpack Compose kini dapat menggunakan
LifecycleEventEffect
untuk menjalankan efek samping Compose berdasarkanLifecycle.Event
.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Pengguna Jetpack Compose dapat menggunakan
LifecycleStartEffect
danLifecycleResumeEffect
untuk menangani pasangan peristiwa - dimulai hingga dihentikan dan dilanjutkan hingga dijeda. API ini mencerminkan API yang ditemukan diDisposableEffect
dan cocok untuk kasus saat perubahan yang dilakukan saat status naik perlu dibalik saat kembali turun.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
Lihat Menjalankan kode pada peristiwa siklus proses untuk mengetahui informasi selengkapnya.
Kemampuan Observasi Status Siklus Proses
Lifecycle.State
saat ini kini dapat diamati melalui propertiLifecycle.currentStateFlow
, yang menampilkanStateFlow
denganvalue
adalahLifecycle.State
saat ini.- Pengguna Jetpack Compose dapat menggunakan ekstensi
Lifecycle.currentStateAsState()
untuk mengeksposLifecycle.State
secara langsung sebagai ComposeState
. Ini setara (dan merupakan alternatif yang lebih singkat) denganlifecycle.currentStateFlow.collectAsState()
.
Lihat Mengumpulkan status siklus proses dengan alur untuk mengetahui informasi selengkapnya.
Versi 2.7.0-rc02
13 Desember 2023
androidx.lifecycle:lifecycle-*:2.7.0-rc02
dirilis. Versi 2.7.0-rc02 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah saat
SavedStateHandle
tidak akan memulihkan classParcelable
kustom dengan benar setelah penghentian dan pembuatan ulang proses. Karena informasi jenis yang hilang oleh framework Android, array Parcelables kustom memerlukan pekerjaan tambahan (membuat array berjenis jenis yang tepat secara manual) dan dokumentasi diget
,getLiveData
, dangetStateFlow
kini secara khusus menyebutkan batasan ini. (I0b55a)
Versi 2.7.0-rc01
15 November 2023
androidx.lifecycle:lifecycle-*:2.7.0-rc01
dirilis. Versi 2.7.0-rc01 berisi commit ini.
Perbaikan Bug
LifecycleStartEffect
danLifecycleResumeEffect
kini membuang dan membuat ulang blok efek dengan benar jikaLifecycleOwner
diubah. (Ia25c6)
Versi 2.7.0-beta01
1 November 2023
androidx.lifecycle:lifecycle-*:2.7.0-beta01
dirilis tanpa perubahan. Versi 2.7.0-beta01 berisi commit ini.
- Peningkatan versi beta, tidak ada perubahan besar pada versi rilis ini.
Versi 2.7.0-alpha03
18 Oktober 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha03
dirilis. Versi 2.7.0-alpha03 berisi commit ini.
Fitur Baru
lifecycle-runtime-testing
kini berisi pemeriksaan Lint baru untuk menghindari penetapanLifecycle.State
TestLifecycleOwner
menggunakan kolomcurrentState
saat berada di dalam coroutine. Pemeriksaan Lint kini menyarankan penangguhansetCurrentState
yang memungkinkan penetapanLifecycle.State
tanpa pemblokiran. (Icf728, b/297880630)
Perbaikan Bug
- Memperbaiki masalah pada
LiveData.switchMap
saat menampilkan instanceLiveData
yang sama pada panggilan awal dan panggilan berikutnya akan mencegah instanceLiveData
ditambahkan sebagai sumber. (Ibedcba7)
Versi 2.7.0-alpha02
6 September 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha02
dirilis. Versi 2.7.0-alpha02 berisi commit ini.
Fitur Baru
TestLifecycleOwner
kini menyertakan fungsi penangguhansetCurrentState()
untuk memberi pengguna opsi menggunakanTestLifecycleOwner
dari dalam coroutine seperti yang disediakan olehrunTest
. (I329de, b/259344129)
Perubahan API
- Semua file dari modul
lifecycle-livedata-ktx
telah dipindahkan ke modullifecycle-livedata
utama. (I10c6f, b/274800183)
Perubahan Perilaku
- Ekstensi
LiveData.map()
danLiveData.switchMap()
kini menetapkanvalue
dariLiveData
yang ditampilkan jikaLiveData
sebelumnya telah menetapkan nilai, sehingga memastikan bahwa penggunaan LiveData yang dihasilkan di Jetpack Compose memiliki status yang tepat pada komposisi awal. (I91d2b, b/269479952) addCloseable()
ViewModel
kini langsung menutupCloseable
jikaViewModel
telah menerima panggilan keonCleared()
. (I4712e, b/280294730)
Perbaikan Bug
- Dari Lifecycle
2.6.2
: Memperbaiki masalah saatSavedStateHandle
tidak akan dipulihkan dengan benar setelah penghentian proses jika status dipulihkan,save()
dipanggil tanpa benar-benar menyimpan status diSavedStateRegistry
induk, lalu status dipulihkan lagi. Tindakan ini memperbaiki interaksi antararememberSaveable
danNavHost
Navigation Compose. (aosp/2729289)
Versi 2.7.0-alpha01
26 Juli 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha01
dirilis. Versi 2.7.0-alpha01 berisi commit ini.
Perubahan API
Lifecycle.State
kini dapat diamati Compose melaluiLifecycle.currentStateFlow
, yang menampilkanStateFlow
denganvalue
adalahLifecycle.State
saat ini. (Ib212d, b/209684871)Lifecycle.Event
kini dapat diamati sebagaiFlow
denganLifecycle.asFlow().
(If2c0f, b/176311030)LifecycleResumeEffect
API telah ditambahkan untuk menjalankanSideEffect
Compose berdasarkan callback peristiwaLifecycle.Event.ON_RESUME
danLifecycle.Event.ON_PAUSE
. (I60386, b/235529345)LifecycleStartEffect
API telah ditambahkan untuk menjalankanSideEffect
Compose berdasarkan callback peristiwaLifecycle.Event.ON_START
danLifecycle.Event.ON_STOP
. (I5a8d1, b/235529345)LifecycleEventEffect
API telah ditambahkan untuk menjalankanSideEffect
Compose berdasarkanLifecycle.Event
. (Ic9794, b/235529345)- Ekstensi
Lifecycle.collectAsState()
telah ditambahkan untuk mengeksposLifecycle.State
secara langsung sebagai ComposeState
. Ini setara (dan merupakan alternatif yang lebih singkat) denganlifecycle.currentStateFlow.collectAsState()
. (I11015, b/235529345)
Perbaikan Bug
- Ekstensi
LiveData.distinctUntilChanged()
kini menetapkanvalue
dariLiveData
yang ditampilkan jikaLiveData
sebelumnya telah menetapkan nilai. Hal ini tidak mengubah perilaku pengamatan - nilai yang diperbarui dariLiveData
sumber hanya akan tetap berlaku setelah Anda mulai mengamatiLiveData
yang ditampilkan daridistinctUntilChanged()
. (Ib482f) - Aturan proguard keep yang terkait dengan
LifecycleObserver
telah dihapus. Artinya, kode yang dilindungi yang ingin menggunakan API melalui refleksi harus menyediakan aturan keep-nya sendiri untuk kasus penggunaan spesifiknya. (Ia12fd)
Versi 2.6
Versi 2.6.2
6 September 2023
androidx.lifecycle:lifecycle-*:2.6.2
dirilis. Versi 2.6.2 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah saat
SavedStateHandle
tidak akan dipulihkan dengan benar setelah penghentian proses jika status dipulihkan,save()
dipanggil tanpa benar-benar menyimpan status diSavedStateRegistry
induk, lalu status dipulihkan lagi. Tindakan ini memperbaiki interaksi antararememberSaveable
danNavHost
Navigation Compose. (aosp/2729289)
Versi 2.6.1
22 Maret 2023
androidx.lifecycle:lifecycle-*:2.6.1
dirilis. Versi 2.6.1 berisi commit ini.
Update Dependensi
lifecycle-viewmodel-savedstate
kini bergantung pada SavedState1.2.1
. (cd7251)- Lifecycle kini bergantung pada ProfileInstaller
1.3.0
. (f9d30b)
Versi 2.6.0
8 Maret 2023
androidx.lifecycle:lifecycle-*:2.6.0
dirilis. Versi 2.6.0 berisi commit ini.
Perubahan penting sejak versi 2.5.0
LiveData
kini menyertakan propertiisInitialized
baru yang menunjukkan apakah nilai eksplisit pernah ditetapkan diLiveData
, memungkinkan Anda membedakan antaraliveData.value
yang menampilkannull
karena tidak ada nilai yang pernah ditetapkan atau nilainull
eksplisit.MediatorLiveData
kini menyertakan konstruktor untuk menetapkan nilai awal.- Menambahkan ekstensi baru di
StateFlow
danFlow
daricollectAsStateWithLifecycle()
yang dikumpulkan dari alur dan mewakili nilai terbarunya sebagai Status Compose dengan cara yang berbasis siklus proses. - Metode
Lifecycle.launchWhenX
dan metodeLifecycle.whenX
tidak digunakan lagi karena penggunaan dispatcher jeda dapat menyebabkan resource yang sia-sia dalam beberapa kasus. Sebaiknya gunakanLifecycle.repeatOnLifecycle
. Untuk informasi selengkapnya tentang pekerjaan penangguhan satu kali, lihat penjelasan ini tentang alasan hal ini pada dasarnya tidak aman. - Konversi Kotlin - Sejumlah besar class Siklus Proses telah dikonversi ke Kotlin. Semua class yang dikonversi masih mempertahankan kompatibilitas binernya dengan versi sebelumnya. Class berikut memiliki perubahan sumber yang tidak kompatibel untuk class yang ditulis di Kotlin:
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
Tabel di bawah memberikan konversi sumber untuk siklus proses versi baru.
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 |
- Nullability metode
onChanged
dariObserver
yang dibuat di Kotlin kini cocok dengan nullability jenis generik. Jika Anda inginObserver.onChanged()
menerima jenis nullable, Anda harus membuat instanceObserver
dengan jenis nullable. - Class ini juga dikonversi ke Kotlin, tetapi tetap kompatibel dengan sumber:
DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
,ViewModelStore
,AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
, danProcessLifecycleOwner
Versi 2.6.0-rc01
22 Februari 2023
androidx.lifecycle:lifecycle-*:2.6.0-rc01
dirilis. Versi 2.6.0-rc01 berisi commit berikut ini.
Perbaikan Bug
- Ekstensi
LiveData.distinctUntilChanged()
kini menetapkanvalue
dariLiveData
yang ditampilkan jikaLiveData
sebelumnya telah menetapkan nilai. Hal ini tidak mengubah perilaku pengamatan - nilai yang diperbarui dariLiveData
sumber hanya akan tetap berlaku setelah Anda mulai mengamatiLiveData
yang ditampilkan daridistinctUntilChanged()
. (Ib482f)
Versi 2.6.0-beta01
8 Februari 2023
androidx.lifecycle:lifecycle-*:2.6.0-beta01
dirilis. Versi 2.6.0-beta01 berisi commit ini.
Konversi Kotlin
LifecycleOwner
kini ditulis dalam Kotlin. Ini adalah perubahan sumber yang tidak kompatibel untuk class yang ditulis di Kotlin - kini harus mengganti propertilifecycle
, bukan mengimplementasikan fungsigetLifecycle()
sebelumnya. (I75b4b, b/240298691)ViewModelStoreOwner
kini ada di Kotlin. Ini adalah perubahan sumber yang tidak kompatibel untuk class yang ditulis di Kotlin - kini harus mengganti propertiviewModelStore
, bukan mengimplementasikan fungsigetViewModelStore()
sebelumnya. (I86409, b/240298691)- Ekstensi Kotlin di
LifecycleOwner
yang menyediakan kolomlifecycleScope
telah dipindahkan ke artefaklifecycle-common
darilifecycle-runtime-ktx
. (I41d78, b/240298691) - Ekstensi Kotlin di
Lifecycle
yang menyediakan kolomcoroutineScope
telah dipindahkan ke artefaklifecycle-common
darilifecycle-runtime-ktx
. (Iabb91, b/240298691)
Versi 2.6.0-alpha05
25 Januari 2023
androidx.lifecycle:lifecycle-*:2.6.0-alpha05
dirilis. Versi 2.6.0-alpha05 berisi commit ini.
Konversi Kotlin
Transformations
kini ditulis dalam Kotlin. Ini adalah perubahan sumber yang tidak kompatibel untuk class yang ditulis di Kotlin yang secara langsung menggunakan sintaksis sepertiTransformations.map
- Kode Kotlin kini harusmenggunakan sintaksis metode ekstensi Kotlin yang sebelumnya hanya tersedia saat menggunakanlifecycle-livedata-ktx
. Saat menggunakan bahasa pemrograman Java, versi metode ini yang menggunakan metodeandroidx.arch.core.util.Function
tidak digunakan lagi dan diganti dengan versi yang menggunakanFunction1
Kotlin. Perubahan ini mempertahankan kompatibilitas biner. (I8e14f)ViewTreeViewModelStoreOwner
kini ditulis dalam Kotlin. Ini adalah perubahan yang tidak kompatibel dengan sumber untuk class yang ditulis di Kotlin - Anda sekarang harus mengimpor langsung dan menggunakan metode ekstensi Kotlin diView
dariandroidx.lifecycle.setViewTreeViewModelStoreOwner
danandroidx.lifecycle.findViewTreeViewModelStoreOwner
untuk menetapkan dan menemukan pemilik yang ditetapkan sebelumnya. Ini kompatibel dengan biner dan tetap kompatibel dengan sumber untuk implementasi yang ditulis dalam bahasa pemrograman Java. (Ia06d8, Ib22d8, b/240298691)- Antarmuka
HasDefaultViewModelProviderFactory
kini ditulis di Kotlin. Ini adalah perubahan sumber yang tidak kompatibel untuk class yang ditulis di Kotlin - perubahan tersebut kini harus mengganti propertidefaultViewModelProviderFactory
dandefaultViewModelCreationExtras
, bukan mengimplementasikan fungsi sebelumnya yang sesuai. (Iaed9c, b/240298691) Observer
kini ditulis dalam Kotlin. MetodeonChanged()
sekarang menggunakan namavalue
untuk parameternya. (Iffef2, I4995e, b/240298691)AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
, danProcessLifecycleOwner
kini ditulis di Kotlin (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)
Versi 2.6.0-alpha04
11 Januari 2023
androidx.lifecycle:lifecycle-*:2.6.0-alpha04
dirilis. Versi 2.6.0-alpha04 berisi commit ini.
Fitur Baru
LiveData
kini menyertakan propertiisInitialized
baru yang menunjukkan apakah nilai eksplisit pernah ditetapkan diLiveData
, memungkinkan Anda membedakan antaraliveData.value
yang menampilkannull
karena tidak ada nilai yang pernah ditetapkan atau nilainull
eksplisit. (Ibd018)
Perubahan API
collectAsStateWithLifecycle()
APIlifecycle-runtime-compose
tidak lagi dalam status eksperimental. (I09d42, b/258835424)- Metode
Lifecycle.launchWhenX
dan metodeLifecycle.whenX
tidak digunakan lagi karena penggunaan dispatcher jeda dapat menyebabkan resource yang sia-sia dalam beberapa kasus. Sebaiknya gunakanLifecycle.repeatOnLifecycle
. (Iafc54, b/248302832)
Konversi Kotlin
ViewTreeLifecycleOwner
kini ditulis dalam Kotlin. Ini adalah perubahan yang tidak kompatibel dengan sumber untuk class yang ditulis di Kotlin - Anda sekarang harus mengimpor langsung dan menggunakan metode ekstensi Kotlin diView
dariandroidx.lifecycle.setViewTreeLifecycleOwner
danandroidx.lifecycle.findViewTreeLifecycleOwner
untuk menetapkan dan menemukan pemilik yang ditetapkan sebelumnya. Ini menggantikan ekstensi Kotlin sebelumnya dilifecycle-runtime-ktx
. Ini kompatibel dengan biner dan tetap kompatibel dengan sumber untuk implementasi yang ditulis dalam bahasa pemrograman Java. (I8a77a, I5234e, b/240298691)LiveDataReactiveStreams
kini ditulis dalam Kotlin. Ekstensi Kotlin yang sebelumnya ada dilifecycle-reactivestreams-ktx
telah dipindahkan ke modullifecycle-reactivestreams
dan telah menjadi platform utama untuk kode yang ditulis dalam Kotlin. Ini adalah perubahan yang tidak kompatibel dengan sumber untuk kode yang ditulis dalam Kotlin jika Anda belum menggunakan API metode ekstensi Kotlin. (I2b1b9, I95d22, b/240298691)DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
, danViewModelStore
kini ditulis dalam Kotlin (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)
Perbaikan Bug
SavedStateHandle
tidak lagi error denganClassCastException
saat memanggilget()
dengan jenis class yang salah. (I6ae7c)
Versi 2.6.0-alpha03
24 Oktober 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha03
dirilis. Versi 2.6.0-alpha03 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah batasan antara modul Lifecycle berbeda yang tidak berfungsi sebagaimana mestinya. (I18d0d, b/249686765)
- Error yang ditampilkan oleh
LifecycleRegistry.moveToState()
kini menyertakan pesan error yang lebih bermanfaat yang memberi tahu developer tentang komponen yang menyebabkan error. (Idf4b2, b/244910446)
Versi 2.6.0-alpha02
7 September 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha02
dirilis. Versi 2.6.0-alpha02 berisi commit ini.
Perubahan API
MediatorLiveData
kini menyertakan konstruktor untuk menetapkan nilai awal. (Ib6cc5, b/151244085)
Perbaikan Bug
- Artefak
Lifecycle
kini menyertakan batasan yang memastikan bahwa semua artefak Lifecycle antar-dependensi menggunakan versi yang sama, yang otomatis mengupgrade dependensi lainnya saat satu dependensi diupgrade. 2/242871265 FlowLiveData.asFlow()
kini membuatcallbackFlow
, bukan menggunakan implementasiChannel
-nya sendiri untuk memastikan keamanan thread dan penyimpanan konteks. (I4a8b2, b/200596935)- Fungsi
asLiveData
FlowLiveData
kini akan mempertahankan nilai awalStateFlow
saat membuat objekLiveData
baru. (I3f530, b/157380488) - Dari Lifecycle
2.5.1
: Implementasi kustomAndroidViewModelFactory
sekarang memanggil fungsicreate(modelClass)
dengan benar saat menggunakan konstruktor stateful denganLifecycle
2.4+ (I5b315, b/238011621)
Versi 2.6.0-alpha01
29 Juni 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha01
dirilis. Versi 2.6.0-alpha01 berisi commit berikut.
Fitur Baru
- Menambahkan ekstensi baru di
StateFlow
danFlow
daricollectAsStateWithLifecycle
yang dikumpulkan dari alur dan mewakili nilai terbarunya sebagai Status Compose dengan cara yang berbasis siklus proses. Alur dikumpulkan dan emisi baru ditetapkan ke nilai Status saat siklus proses setidaknya dalamLifecycle.State
tertentu. Saat siklus proses berada dalamLifecycle.State
tersebut, pengumpulan alur akan berhenti dan nilai Status tidak diperbarui. (I1856e, b/230557927)
Versi 2.5
Versi 2.5.1
27 Juli 2022
androidx.lifecycle:lifecycle-*:2.5.1
dirilis. Versi 2.5.1 berisi commit ini.
Perbaikan Bug
- Implementasi kustom
AndroidViewModelFactory
kini memanggil fungsicreate(modelClass)
dengan benar saat menggunakan konstruktorAndroidViewModelFactory
stateful denganLifecycle
2.4+. (I5b315, b/238011621)
Versi 2.5.0
29 Juni 2022
androidx.lifecycle:lifecycle-*:2.5.0
dirilis. Versi 2.5.0 berisi commit ini.
Perubahan penting sejak versi 2.4.0
SavedStateHandle
kini menawarkangetStateFlow()
API yang menampilkanStateFlow
Kotlin untuk memantau perubahan nilai sebagai alternatif penggunaanLiveData
.ViewModel CreationExtras - saat menulis
ViewModelProvider.Factory
kustom, Anda tidak perlu lagi memperluasAndroidViewModelFactory
atauAbstractSavedStateViewModelFactory
untuk mendapatkan akses keApplication
atauSavedStateHandle
. Sebagai gantinya, kolom ini diberikan ke setiap subclassViewModelProvider.Factory
sebagaiCreationExtras
melalui overload barucreate
:create(Class<T>, CreationExtras)
. Tambahan ini disediakan secara otomatis oleh Aktivitas atau Fragmen saat menggunakan Activity1.5.0
dan 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
sekarang menyediakanviewModelFactory
DSL Kotlin yang memungkinkan Anda menentukanViewModelProvider.Factory
terkait dengan satu atau beberapa penginisialisasi lambda, satu untuk setiap classViewModel
tertentu yang didukung oleh factory kustom Anda, menggunakanCreationExtras
sebagai sumber data utama.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
kini menawarkan APIviewModel()
yang menggunakan factory lambda untuk membuat instanceViewModel
tanpa memerlukan pembuatanViewModelProvider.Factory
kustom.// 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) }
Integrasi Saver SavedStateHandle Compose - Artefak
lifecycle-viewmodel-compose
sekarang berisi API eksperimental baru diSavedStateHandle.saveable
yang memungkinkan perilaku sepertirememberSaveable
didukung olehSavedStateHandle
`ViewModel.class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
Menambahkan
addCloseable()
API dan overload konstruktor baru yang memungkinkan Anda menambahkan satu atau beberapa objekCloseable
keViewModel
yang akan ditutup saatViewModel
dihapus tanpa perlu penanganan manual dionCleared()
.Misalnya, untuk membuat cakupan coroutine yang dapat Anda masukkan ke ViewModel, tetapi pengontrolan dilakukan melalui pengujian, Anda dapat membuat
CoroutineScope
yang menerapkanCloseable
:class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
Yang kemudian dapat digunakan di konstruktor
ViewModel
sambil mempertahankan masa pakai yang sama sepertiviewModelScope
:class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
Perubahan perilaku
- Mencoba memindahkan
Lifecycle.State
dariINITIALIZED
keDESTROYED
kini akan selalu menampilkanIllegalStateException
, terlepas dari apakahLifecycle
memiliki observer terlampir atau tidak. LifecycleRegistry
kini akan menghapus observernya saat mencapai statusDESTROYED
.
Versi 2.5.0-rc02
15 Juni 2022
androidx.lifecycle:lifecycle-*:2.5.0-rc02
dirilis. Versi 2.5.0-rc02 berisi commit ini.
Perbaikan Bug
ViewModelProvider
tidak akan error lagi saat menggabungkan dependensi compileOnly Lifecycle versi sebelumnya dengan versi 2.5 dan yang lebih baru. (I81a66, b/230454566)
Versi 2.5.0-rc01
11 Mei 2022
androidx.lifecycle:lifecycle-*:2.5.0-rc01
dirilis. Versi 2.5.0-rc01 berisi commit ini.
Perbaikan Bug
MediatorLiveData.addSource()
kini menampilkanNullPointerException
saat meneruskan sumbernull
, bukan menyebarkan sumbernull
ke observer.(Ibd0fb, b/123085232)
Versi 2.5.0-beta01
20 April 2022
androidx.lifecycle:lifecycle-*:2.5.0-beta01
dirilis. Versi 2.5.0-beta01 berisi commit ini.
Perubahan API
- Menambahkan delegasi properti
SavedStateHandle.saveable
untuk menggunakan nama properti sebagai kunci guna mempertahankan status ke dalamSavedStateHandle
(I8bb86, b/225014345)
Perbaikan Bug
- Memperbaiki masalah ketika membuat satu tingkat
NavHost
dalamNavHost
lainnya di tab navigasi bawah yang bukan utama akan menyebabkanIllegalStateException
saat menggunakan beberapa data sebelumnya. (I11bd5, b/228865698)
Versi 2.5.0-alpha06
6 April 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha06
dirilis. Versi 2.5.0-alpha06 berisi commit ini.
Fitur Baru
- Menambahkan overload
MutableState
eksperimental keSavedStateHandle.saveable
untuk paritas denganrememberSaveable
(I38cfe, b/224565154)
Perubahan API
CreationExtras
kini bersifat abstrak, bukan tertutup. (Ib8a7a)
Perbaikan Bug
- Memperbaiki error
IllegalStateException: Already attached to lifecycleOwner
yang disebabkan olehSavedStateHandleController
. (I7ea47, b/215406268)
Versi 2.5.0-alpha05
23 Maret 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha05
dirilis. Versi 2.5.0-alpha05 berisi commit ini.
Fitur Baru
- Modul
lifecycle-viewmodel-compose
kini menyediakanSavedStateHandleSaver
, API eksperimental yang memastikan nilai dalamSavedStateHandle
terintegrasi dengan benar dengan status instance tersimpan yang sama dengan yang digunakanrememberSaveable
. (Ia88b7, b/195689777)
Perubahan API
- Memperbaiki masalah kompatibilitas dengan Lifecycle 2.3 dan versi Lifecycle yang lebih baru di Java. (I52c8a, b/219545060)
Perbaikan Bug
SavedStateViewFactory
sekarang mendukung penggunaanCreationExtras
meskipun diinisialisasi denganSavedStateRegistryOwner
. Jika tambahan disediakan, argumen yang diinisialisasi akan diabaikan. (I6c43b, b/224844583)
Versi 2.5.0-alpha04
9 Maret 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha04
dirilis. Versi 2.5.0-alpha04 berisi commit ini.
Perubahan API
SavedStateHandle
kini menawarkangetStateFlow()
API yang menampilkanStateFlow
Kotlin untuk memantau perubahan nilai sebagai alternatif penggunaanLiveData
. (Iad3ab, b/178037961)
Versi 2.5.0-alpha03
23 Februari 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha03
dirilis. Versi 2.5.0-alpha03 berisi commit ini.
Fitur Baru
- Menambahkan API
addCloseable()
dan overload konstruktor baru yang memungkinkan Anda menambahkan satu atau beberapa objekCloseable
keViewModel
yang akan ditutup saatViewModel
dihapus tanpa memerlukan tugas manual dionCleared()
. (I55ea0) lifecycle-viewmodel
kini memberikanInitializerViewModelFactory
yang memungkinkan Anda menambahkan lambda untuk menangani classViewModel
tertentu, menggunakanCreationExtras
sebagai sumber data utama. (If58fc, b/216687549)lifecycle-viewmodel-compose
kini menawarkan APIviewModel()
yang menggunakan factory lambda untuk membuat instanceViewModel
tanpa memerlukan pembuatanViewModelProvider.Factory
kustom. (I97fbb, b/216688927)
Perubahan API
- Anda kini dapat membuat
ViewModel
denganCreationExtras
melaluilifecycle-viewmodel-compose
. (I08887, b/216688927)
Perubahan perilaku
- Mencoba memindahkan
Lifecycle.State
dariINITIALIZED
keDESTROYED
kini akan selalu menampilkanIllegalStateException
, terlepas dariLifecycle
memiliki observer terlampir atau tidak. (I7c390, b/177924329) LifecycleRegistry
kini akan menghapus observernya saat mencapai statusDESTROYED
. (I4f8dd, b/142925860)
Versi 2.5.0-alpha02
9 Februari 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha02
dirilis. Versi 2.5.0-alpha02 berisi commit ini.
Perubahan API
SavedStateHandle
danSavedStateViewModelFactory
telah dikonversi ke Kotlin. Tindakan ini meningkatkan nullability generik di kedua class. (Ib6ce2, b/216168263, I9647a, b/177667711)- Parameter fungsi
LiveData
switchMap
kini dapat memiliki output nullable. (I40396, b/132923666) - Ekstensi -ktx
LiveData
kini dianotasi dengan@CheckResult
agar hasil tersebut digunakan saat memanggil fungsi ini. (Ia0f05, b/207325134)
Perubahan perilaku
SavedStateHandle
kini menyimpan defaultValue dengan benar saat tidak ada nilai untuk kunci yang ditentukan. (I1c6ce, b/178510877)
Perbaikan Bug
- Dari Lifecycle
2.4.1
: Mengupdatelifecycle-process
agar bergantung pada Startup 1.1.1 untuk memastikan bahwa perbaikan yang mencegahProcessLifecycleInitializer
menampilkanStartupException
tersedia secara default. (Ib01df, b/216490724) - Kini terdapat pesan error yang lebih baik saat class
AndroidViewModel
kustom memiliki parameter dalam urutan yang salah dan mencoba membuatViewModel
. (I340f7, b/177667711) - Kini Anda dapat membuat model tampilan melalui
CreationExtras
menggunakanAndroidViewModelFactory
tanpa menyetel aplikasi. (I6ebef, b/217271656)
Versi 2.5.0-alpha01
26 Januari 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha01
dirilis. Versi 2.5.0-alpha01 berisi commit ini.
CreationExtras ViewModel
Dengan rilis ini, kami menyiapkan dasar untuk merestrukturisasi cara pembuatan ViewModel
. Sebagai ganti sekumpulan subclass ViewModelProvider.Factory
kaku yang masing-masing menambahkan fungsi tambahan (memungkinkan parameter konstruktor Application
melalui AndroidViewModelFactory
, memungkinkan parameter konstruktor SavedStateHandle
melalui SavedStateViewModelFactory
dan AbstractSavedStateViewModelFactory
, dll.), kami beralih ke factory stateless yang mengandalkan konsep baru, CreationExtras
. (Ia7343, b/188691010, b/188541057)
Dengan perubahan ini, ViewModelProvider
tidak lagi melakukan panggilan langsung ke metode create(Class<T>)
sebelumnya dari ViewModelProvider.Factory
. Sebaliknya, perubahan ini memanggil overload baru dari create
: create(Class<T>, CreationExtras)
. Artinya, implementasi langsung dari instance ViewModelProvider.Factory
sekarang memiliki akses ke setiap CreationExtras
baru ini:
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
:String
ini menyediakan akses ke kunci kustom yang Anda teruskan keViewModelProvider.get()
.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
menyediakan akses ke classApplication
.SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
menyediakan akses keSavedStateRegistryOwner
yang digunakan untuk membuat ViewModel ini.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
menyediakan akses keViewModelStoreOwner
yang digunakan untuk membuat ViewModel ini.SavedStateHandleSupport.DEFAULT_ARGS_KEY
menyediakan akses keBundle
argumen yang harus digunakan untuk membuatSavedStateHandle
.
Tambahan ini disediakan secara default saat menggunakan Activity 1.5.0-alpha01
, Fragment 1.5.0-alpha01
, dan Navigation 2.5.0-alpha01
. Jika Anda menggunakan versi sebelumnya dari library tersebut, CreationExtras
Anda akan kosong - semua subclass ViewModelProvider.Factory
yang ada telah ditulis ulang untuk mendukung jalur pembuatan lama yang digunakan oleh versi sebelumnya dari library tersebut dan jalur CreationExtras
yang akan digunakan selanjutnya.
CreationExtras
ini memungkinkan pembuatan ViewModelProvider.Factory
yang hanya meneruskan informasi yang Anda butuhkan ke setiap ViewModel
tanpa bergantung pada hierarki subclass Factory yang ketat:
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
}
}
Kami menggunakan fungsi ekstensi Kotlin createSavedStateHandle()
di CreationExtras
dari SavedStateHandleSupport
untuk membuat SavedStateHandle
hanya untuk satu ViewModel yang membutuhkannya. (Ia6654, b/188541057)
CreationExtras
kustom dapat diberikan dengan mengganti getDefaultViewModelCreationExtras()
di ComponentActivity
atau Fragment
, sehingga tersedia untuk ViewModelProvider.Factory
kustom sebagai bentuk injeksi berbantuan secara bawaan. Tambahan ini akan otomatis tersedia untuk Factory kustom saat digunakan langsung dengan ViewModelProvider
atau saat menggunakan ekstensi properti Kotlin by viewModels()
dan by activityViewModels()
. (I79f2b, b/207012584, b/207012585, b/207012490)
Perbaikan Bug
- Memperbaiki masalah saat nilai default yang diberikan
ke
SavedStateHandle
akan muncul kembali setelah penghentian dan pembuatan ulang proses, meskipun nilai tersebut secara khusus dihapus dariSavedStateHandle
. Konsekuensinya,SavedStateHandle
tidak akan lagi menggabungkan nilai default dan nilai yang dipulihkan, melainkan hanya menggunakan nilai yang dipulihkan sebagai sumber kebenaran. (I53a4b)
Versi 2.4
Versi 2.4.1
9 Februari 2022
androidx.lifecycle:lifecycle-*:2.4.1
dirilis. Versi 2.4.1 berisi commit ini.
Perbaikan Bug
- Di-backport dari Lifecycle
2.5.0-alpha01
: Memperbaiki masalah saat nilai default yang diberikan keSavedStateHandle
akan muncul kembali setelah penghentian dan pembuatan ulang proses, meskipun nilai tersebut secara khusus dihapus dariSavedStateHandle
. Konsekuensinya,SavedStateHandle
tidak akan lagi menggabungkan nilai default dan nilai yang dipulihkan, melainkan hanya menggunakan nilai yang dipulihkan sebagai sumber kebenaran. (I53a4b) lifecycle-process
kini bergantung pada Androidx Startup 1.1.1 yang memperbaiki regresi ketika menggunakanProcessLifecycleInitializer
akan menyebabkanStartupException
. (b/216490724)
Versi 2.4.0
27 Oktober 2021
androidx.lifecycle:lifecycle-*:2.4.0
dirilis. Versi 2.4.0 berisi commit ini.
Perubahan penting sejak versi 2.3.0
@OnLifecycleEvent
tidak digunakan lagi.LifecycleEventObserver
atauDefaultLifecycleObserver
harus digunakan sebagai gantinya.- Library
androidx.lifecycle:lifecycle-viewmodel-compose
telah ditambahkan. Class ini menyediakan composableviewModel()
danLocalViewModelStoreOwner
.- Perubahan yang dapat menyebabkan gangguan sumber:
ViewModelProvider
telah ditulis ulang di Kotlin. MetodeViewModelProvider.Factory.create
tidak lagi mengizinkan nullable generik.
- Perubahan yang dapat menyebabkan gangguan sumber:
- API coroutine baru telah ditambahkan ke
androidx.lifecycle:lifecycle-runtime-ktx
: Lifecycle.repeatOnLifecycle
, API yang mengeksekusi blok kode di coroutine jika Lifecycle setidaknya berada dalam status tertentu. Blokir akan dibatalkan dan diluncurkan kembali saat siklus proses bergerak masuk dan keluar dari status target;Flow.flowWithLifecycle
, API yang memunculkan nilai dari Flow upstream saat siklus proses setidaknya dalam status tertentu.DefaultLifecycleObserver
dipindahkan darilifecycle.lifecycle-common-java8
kelifecycle.lifecycle-common
.lifecycle.lifecycle-common-java8
tidak lagi menyediakan fungsi tambahan apa pun selainlifecycle.lifecycle-common
, sehingga dependensi padanya dapat diganti denganlifecycle.lifecycle-common
.- API non-coroutine dari
lifecycle-viewmodel-ktx
telah dipindahkan ke modullifecycle-viewmodel
. lifecycle-process
sekarang menggunakanandroidx.startup
untuk melakukan inisialisasiProcessLifecycleOwner
.Sebelumnya, perilaku ini dilakukan oleh
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Jika sebelumnya Anda menggunakan
tools:node="remove"
yang digunakanContentProvider
untuk melakukan inisialisasi siklus proses, Anda harus melakukan hal berikut ini.<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>
(atau)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Versi 2.4.0-rc01
29 September 2021
androidx.lifecycle:lifecycle-*:2.4.0-rc01
dirilis tanpa perubahan dari Lifecycle 2.4.0-beta01. Versi 2.4.0-rc01 berisi commit ini.
Versi 2.4.0-beta01
15 September 2021
androidx.lifecycle:lifecycle-*:2.4.0-beta01
dirilis. Versi 2.4.0-beta01 berisi commit ini.
Perubahan API
@OnLifecycleEvent
tidak digunakan lagi.LifecycleEventObserver
atauDefaultLifecycleObserver
harus digunakan sebagai gantinya. (I5a8fa)- DefaultLifecycleObserver telah dipindahkan dari
androidx.lifecycle.lifecycle-common-java8
keandroidx.lifecycle.lifecycle-common
.androidx.lifecycle.lifecycle-common-java8
tidak lagi menyediakan fungsi tambahan apa pun selainandroidx.lifecycle.lifecycle-common
, sehingga dependensi padanya dapat diganti denganandroidx.lifecycle.lifecycle-common
. (I021aa) - API non-coroutine dari
lifecycle-viewmodel-ktx
telah dipindahkan ke modullifecycle-viewmodel
. (I6d5b2)
Kontribusi Eksternal
Versi 2.4.0-alpha03
4 Agustus 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha03
dirilis. Versi 2.4.0-alpha03 berisi commit ini.
Perubahan API
- Perubahan yang dapat menyebabkan gangguan sumber: ViewModelProvider telah ditulis ulang di Kotlin.
Metode
ViewModelProvider.Factory.create
tidak lagi mengizinkan nullable generik. (I9b9f6)
Perubahan Perilaku
Lifecycle.repeatOnLifecycle
:block
sekarang selalu dipanggil secara berseri saat eksekusi berulang. (Ibab33)
Kontribusi Eksternal
- Terima kasih chao2zhang karena telah memperbaiki cuplikan kode di dokumentasi
repeatOnLifecycle
. #205.
Versi 2.4.0-alpha02
16 Juni 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha02
dirilis. Versi 2.4.0-alpha02 berisi commit ini.
Fitur Baru
- Menambahkan pemeriksaan lint
RepeatOnLifecycleWrongUsage
baru kelifecycle-runtime-ktx
yang mendeteksi saatrepeateOnLifecycle
salah digunakan dionStart()
atauonResume()
. (706078, b/187887400)
Perubahan API
LifecycleOwner.addRepeatingJob
API dihapus dan diganti denganLifecycle.repeatOnLifecycle
yang mengikuti konkurensi terstruktur dan lebih mudah untuk dipahami. (I4a3a8)- Membuat
ProcessLifecycleInitializer
menjadi publik sehinggaandroidx.startup.Initializer
lainnya dapat menggunakan ini sebagai dependensi. (I94c31)
Perbaikan Bug
- Memperbaiki masalah pemeriksaan lint
NullSafeMutableLiveData
saat kolom memiliki pengubah. (#147, b/183696616) - Memperbaiki masalah lain pada pemeriksaan lint
NullSafeMutableLiveData
saat menggunakan generik. (#161, b/184830263)
Kontribusi Eksternal
- Terima kasih maxsav karena telah mengoptimalkan pemeriksaan lint
NullSafeMutableLiveData
. (#147, b/183696616) - Terima kasih kozaxinan karena telah mengoptimalkan pemeriksaan lint
NullSafeMutableLiveData
. (#161, b/184830263)
Versi 2.4.0-alpha01
24 Maret 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha01
dirilis. Versi 2.4.0-alpha01 berisi commit ini.
Perubahan Perilaku
lifecycle-process
sekarang menggunakanandroidx.startup
untuk melakukan inisialisasiProcessLifecycleOwner
.Sebelumnya, perilaku ini dilakukan oleh
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Jika sebelumnya Anda menggunakan
tools:node="remove"
yang digunakanContentProvider
untuk melakukan inisialisasi siklus proses, Anda harus melakukan hal berikut ini.<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>
(atau)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Perubahan API
- Menambahkan
Flow.flowWithLifecycle
API yang memunculkan nilai dari Flow upstream saat siklus proses setidaknya berada dalam status tertentu menggunakanLifecycle.repeatOnLifecycle
API. Ini merupakan alternatif untukLifecycleOwner.addRepeatinJob
API yang juga baru. (I0f4cd)
Perbaikan Bug
- Dari Lifecycle 2.3.1: Aturan lint
NonNullableMutableLiveData
sekarang dapat dengan tepat membedakan setiap variabel kolom dengan nullability yang berbeda. (b/169249668)
Lifecycle Viewmodel Compose Versi 1.0.0
Versi 1.0.0-alpha07
16 Juni 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
dirilis. Versi 1.0.0-alpha07 berisi commit ini.
Perubahan API yang Dapat Menyebabkan Gangguan
viewModel()
kini menggunakanViewModelStoreOwner
opsional, sehingga lebih mudah untuk bekerja dengan pemilik selainLocalViewModelStoreOwner
. Misalnya, kini Anda dapat menggunakanviewModel(navBackStackEntry)
untuk mengambil ViewModel yang terkait dengan grafik navigasi tertentu. (I2628d, b/188693123)
Versi 1.0.0-alpha06
2 Juni 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
dirilis. Versi 1.0.0-alpha06 berisi commit ini.
Diupdate agar kompatibel dengan Compose versi 1.0.0-beta08
.
Versi 1.0.0-alpha05
18 Mei 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
dirilis. Versi 1.0.0-alpha05 berisi commit ini.
Fitur Baru
- Diupdate agar kompatibel dengan Compose versi
1.0.0-beta07
.
Perbaikan Bug
- File AndroidManifest dari ui-test-manifest dan ui-tooling-data kini kompatibel dengan Android 12 (I6f9de, b/184718994)
Versi 1.0.0-alpha04
7 April 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
dirilis. Versi 1.0.0-alpha04 berisi commit ini.
Perubahan Dependensi
- Versi ini memungkinkan
androidx.hilt:hilt-navigation-compose
danandroidx.navigation:navigation-compose
menyinkronkan dependensi padaandroidx.compose.compiler:compiler:1.0.0-beta04
danandroidx.compose.runtime:runtime:1.0.0-beta04
. Untuk 1.0.0, compiler dan runtime harus cocok.
Versi 1.0.0-alpha03
10 Maret 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03
dirilis. Versi 1.0.0-alpha03 berisi commit ini.
Perubahan API
LocalViewModelStoreOwner.current
kini menampilkanViewModelStoreOwner
nullable untuk menentukan lebih baik apakahViewModelStoreOwner
tersedia di komposisi saat ini. API yang memerlukanViewModelStoreOwner
, sepertiviewModel()
danNavHost
, masih menampilkan pengecualian jikaViewModelStoreOwner
tidak ditetapkan. (Idf39a)
Lifecycle-Viewmodel-Compose Versi 1.0.0-alpha02
24 Februari 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
dirilis. Versi 1.0.0-alpha02 berisi commit ini.
Perubahan API
LocalViewModelStoreOwner
sekarang memiliki fungsiprovides
yang dapat digunakan denganCompositionLocalProvider
, menggantikanasProvidableCompositionLocal()
API. (I45d24)
Lifecycle-Viewmodel-Compose Versi 1.0.0-alpha01
10 Februari 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
dirilis. Versi 1.0.0-alpha01 berisi commit ini.
Fitur Baru
- Composable
viewModel()
danLocalViewModelStoreOwner
dipindahkan dariandroidx.compose.ui.viewinterop
ke artefak ini dalam paketandroidx.lifecycle.viewmodel.compose
. (I7a374)
Versi 2.3.1
Lifecycle Versi 2.3.1
24 Maret 2021
androidx.lifecycle:lifecycle-*:2.3.1
dirilis. Versi 2.3.1 berisi commit ini.
Perbaikan Bug
- Aturan lint
NonNullableMutableLiveData
sekarang dapat membedakan dengan tepat setiap variabel kolom dengan nullability yang berbeda. (b/169249668)
Versi 2.3.0
Versi 2.3.0
10 Februari 2021
androidx.lifecycle:lifecycle-*:2.3.0
dirilis. Versi 2.3.0 berisi commit ini.
Perubahan utama sejak versi 2.2.0
- Dukungan
SavedStateHandle
untuk class yang tidak dapat dibagi-bagi:SavedStateHandle
kini mendukung serialisasi lambat dengan memungkinkan Anda memanggilsetSavedStateProvider()
untuk kunci tertentu, sehingga menyediakanSavedStateProvider
yang akan mendapatkan callback kesaveState()
saatSavedStateHandle
diminta untuk menyimpan statusnya. Lihat Menyimpan class yang tidak dapat dibagi-bagi. - Penerapan Perilaku Siklus Proses:
- LifecycleRegistry kini memberlakukan
DESTROYED
sebagai status terminal. LifecycleRegistry
kini memverifikasi bahwa metodenya dipanggil pada thread utama. Hal ini selalu menjadi persyaratan untuk siklus proses aktivitas, fragmen, dll. Penambahan observer dari thread non-utama berakibat pada error yang sulit ditemukan dalam runtime. Untuk objekLifecycleRegistry
yang dimiliki oleh komponen Anda sendiri, Anda dapat secara eksplisit memilih tidak melakukan pemeriksaan dengan menggunakanLifecycleRegistry.createUnsafe(...)
, tetapi Anda harus memastikan bahwa sinkronisasi yang tepat diterapkan saatLifecycleRegistry
ini diakses dari thread berbeda.
- LifecycleRegistry kini memberlakukan
- Status Siklus Proses dan Helper Peristiwa: Menambahkan metode helper statis
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
keLifecycle.Event
untuk menghasilkanEvent
dengan mempertimbangkanState
dan arah transisi. Menambahkan metodegetTargetState()
yang memberikanState
yang akan menjadi tujuan transisi Lifecycle langsung setelahEvent
. withStateAtLeast
: Menambahkan APILifecycle.withStateAtLeast
yang menunggu status siklus proses dan menjalankan blok kode non-penangguhan secara sinkron pada saat terjadi perubahan status, lalu melanjutkan dengan hasilnya. API ini berbeda dari metodewhen*
yang ada karena tidak mengizinkan dijalankannya kode penangguhan dan tidak menggunakan dispatcher khusus. (aosp/1326081)ViewTree
API: APIViewTreeLifecycleOwner.get(View)
danViewTreeViewModelStoreOwner.get(View)
baru memungkinkan Anda mengambil masing-masingLifecycleOwner
danViewModelStoreOwner
di dalamnya, dengan mempertimbangkan instanceView
. Anda harus mengupgrade ke Activity1.2.0
dan Fragment1.3.0
, serta AppCompat 1.3.0-alpha01 atau yang lebih tinggi agar dapat mengisinya dengan benar. Ekstensi KotlinfindViewTreeLifecycleOwner
danfindViewTreeViewModelStoreOwner
masing-masing tersedia dilifecycle-runtime-ktx
danlifecycle-viewmodel-ktx
.- Penghentian ekstensi Kotlin
LiveData.observe()
: Ekstensi KotlinLiveData.observe()
yang diperlukan untuk menggunakan sintaksis lambda kini tidak digunakan lagi karena tidak diperlukan saat menggunakan Kotlin 1.4.
Versi 2.3.0-rc01
16 Desember 2020
androidx.lifecycle:lifecycle-*:2.3.0-rc01
dirilis. Versi 2.3.0-rc01 berisi commit ini.
Perbaikan Bug
- Metode
keys()
SavedStateHandle
sekarang konsisten sebelum dan setelah status disimpan - sekarang menyertakan kunci yang sebelumnya digunakan dengansetSavedStateProvider()
selain kunci yang digunakan denganset()
dangetLiveData()
. (aosp/1517919, b/174713653)
Kontribusi Eksternal
- API untuk menangguhkan coroutine berbasis Lifecycle sekarang menangani panggilan ke
yield()
dengan lebih baik. Terima kasih Nicklas Anman Giertz! (aosp/1430830, b/168777346)
Versi 2.3.0-beta01
1 Oktober 2020
androidx.lifecycle:lifecycle-*:2.3.0-beta01
dirilis. Versi 2.3.0-beta01 berisi commit ini.
Perubahan API
- Ekstensi Kotlin
LiveData.observe()
yang diperlukan untuk menggunakan sintaksis lambda kini tidak digunakan lagi karena tidak diperlukan saat menggunakan Kotlin 1.4. (I40d3f)
Perbaikan Bug
- Mengupgrade androidx untuk menggunakan Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Perubahan Dokumentasi
- Builder
liveData
dan dokumenasLiveData()
telah diperbarui untuk menyertakan detail tentang mengubah nilai waktu tunggu yang diberikan. (aosp/1122324)
Versi 2.3.0-alpha07
19 Agustus 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha07
dirilis. Versi 2.3.0-alpha07 berisi commit ini.
Perbaikan Bug
- Memperbaiki masalah error dalam pemeriksaan Lint
NullSafeMutableLiveData
. (aosp/1395367)
Versi 2.3.0-alpha06
22 Juli 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha06
dirilis. Versi 2.3.0-alpha06 berisi commit ini.
Fitur Baru
- Menambahkan metode helper statis
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
keLifecycle.Event
untuk menghasilkanEvent
dengan mempertimbangkanState
dan arah transisi. Menambahkan metodegetTargetState()
yang memberikanState
yang akan menjadi tujuan transisi Lifecycle langsung setelahEvent
. (I00887) - Menambahkan
Lifecycle.withStateAtLeast
API yang menunggu status siklus proses dan menjalankan blok kode non-penangguhan secara sinkron pada saat terjadi perubahan status, lalu melanjutkan dengan hasilnya. API ini berbeda dari metodewhen*
yang ada karena tidak mengizinkan dijalankannya kode penangguhan dan tidak menggunakan dispatcher khusus. (aosp/1326081)
Perubahan Perilaku
- LifecycleRegistry kini memberlakukan
DESTROYED
sebagai status terminal. (I00887) LifecycleRegistry
kini memverifikasi bahwa metodenya dipanggil pada thread utama. Hal ini selalu menjadi persyaratan untuk siklus proses aktivitas, fragmen, dll. Penambahan observer dari thread non-utama berakibat pada error yang sulit ditemukan dalam runtime. Untuk objekLifecycleRegistry
yang dimiliki oleh komponen Anda sendiri, Anda dapat secara eksplisit memilih tidak melakukan pemeriksaan dengan menggunakanLifecycleRegistry.createUnsafe(...)
, tetapi Anda harus memastikan bahwa sinkronisasi yang tepat diterapkan saatLifecycleRegistry
ini diakses dari thread berbeda (Ie7280, b/137392809)
Perbaikan Bug
- Memperbaiki error di
NullSafeMutableLiveData
. (b/159987480) - Memperbaiki
ObsoleteLintCustomCheck
untuk pemeriksaan Lint yang digabungkan denganlifecycle-livedata-core-ktx
(dan khususnyaNullSafeMutableLiveData
). (b/158699265)
Versi 2.3.0-alpha05
24 Juni 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha05
dirilis. Versi 2.3.0-alpha05 berisi commit ini.
Perbaikan Bug
LiveData
kini dapat menangani kasus reentrant dengan lebih baik, menghindari panggilan duplikat keonActive()
atauonInactive()
. (b/157840298)- Memperbaiki masalah pemeriksaan Lint tidak berjalan saat menggunakan Android Studio 4.1 Canary 6 atau versi yang lebih tinggi. (aosp/1331903)
Versi 2.3.0-alpha04
10 Juni 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha04
dirilis. Versi 2.3.0-alpha04 berisi commit ini.
Perbaikan Bug
- Memperbaiki error dalam pemeriksaan Lint
NonNullableMutableLiveData
. (b/157294666) - Pemeriksaan Lint
NonNullableMutableLiveData
kini mencakup lebih banyak kasus secara signifikan ketika nilainull
ditetapkan padaMutableLiveData
dengan parameter jenis non-null. (b/156002218)
Versi 2.3.0-alpha03
20 Mei 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha03
dirilis. Versi 2.3.0-alpha03 berisi commit ini.
Fitur Baru
SavedStateHandle
kini mendukung serialisasi lambat sehingga Anda dapat memanggilsetSavedStateProvider()
untuk kunci tertentu, menyediakanSavedStateProvider
yang akan mendapatkan callback kesaveState()
saatSavedStateHandle
diminta untuk menyimpan statusnya. (b/155106862)ViewTreeViewModelStoreOwner.get(View)
API yang baru memungkinkan Anda mengambil instanceView
berisiViewModelStoreOwner
. Anda harus melakukan upgrade ke Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
, dan AppCompat1.3.0-alpha01
untuk mengisi ini dengan benar. Ekstensi KotlinfindViewModelStoreOwner()
telah ditambahkan kelifecycle-viewmodel-ktx
. (aosp/1295522)
Perbaikan Bug
- Memperbaiki masalah yang menyebabkan pemeriksaan Lint
MutableLiveData
yang dirilis dalam Lifecycle2.3.0-alpha01
tidak dipublikasikan bersama artefaklifecycle-livedata-core-ktx
. (b/155323109)
Versi 2.3.0-alpha02
29 April 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha02
dirilis. Versi 2.3.0-alpha02 berisi commit ini.
Perubahan API
SavedStateViewModelFactory
sekarang memungkinkan Anda meneruskanApplication
null ke konstruktornya untuk kasus dukungan yang lebih baik jika salah satu tidak tersedia dan dukungan untukAndroidViewModel
tidak diperlukan. (aosp/1285740)
Perbaikan Bug
- Meningkatkan performa cold start dengan menghindari kegagalan verifikasi class di API 28 dan perangkat yang lebih lama. (aosp/1282118)
Versi 2.3.0-alpha01
4 Maret 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha01
dirilis. Versi 2.3.0-alpha01 berisi commit ini.
Fitur Baru
ViewTreeLifecycleOwner.get(View)
API yang baru memungkinkan Anda mengambil instanceView
berisiLifecycleOwner
. Anda harus melakukan upgrade ke Activity1.2.0-alpha01
dan Fragment1.3.0-alpha01
untuk mengisi ini dengan benar. Ekstensi KotlinfindViewTreeLifecycleOwner
tersedia dilifecycle-runtime-ktx
. (aosp/1182361, aosp/1182956)- Menambahkan pemeriksaan Lint baru yang memberi Anda peringatan saat menetapkan nilai
null
padaMutableLiveData
yang telah ditetapkan di Kotlin sebagai non-null. Opsi ini tersedia saat menggunakan artefaklivedata-core-ktx
ataulivedata-ktx
. (aosp/1154723, aosp/1159092) - Artefak
lifecycle-runtime-testing
baru tersedia, yang menyediakanTestLifecycleOwner
yang menerapkanLifecycleOwner
dan menyediakanLifecycle
dapat diubah yang aman untuk thread. (aosp/1242438)
Perbaikan bug
- Artefak
lifecycle-runtime
sekarang memiliki nama paket yang unik. (aosp/1187196)
Versi 2.2.0
ViewModel-Savedstate Versi 2.2.0
5 Februari 2020
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
dirilis. Versi 2.2.0 berisi commit ini.
Lifecycle ViewModel SavedState sekarang memiliki versi yang sama dengan artefak Lifecycle lainnya. Perilaku 2.2.0
identik dengan perilaku 1.0.0
.
Versi 2.2.0
22 Januari 2020
androidx.lifecycle:lifecycle-*:2.2.0
dirilis. Versi 2.2.0 berisi commit ini.
Perubahan penting sejak versi 2.1.0
- Integrasi Coroutine Lifecycle: Artefak
lifecycle-runtime-ktx
baru menambahkan integrasi antara coroutine Lifecycle dan Kotlin.lifecycle-livedata-ktx
juga telah diperluas untuk memanfaatkan coroutine. Lihat Menggunakan coroutine Kotlin dengan Komponen Arsitektur untuk detail selengkapnya. - Penghentian
ViewModelProviders.of()
:ViewModelProviders.of()
sekarang tidak digunakan lagi. Anda dapat meneruskanFragment
atauFragmentActivity
ke konstruktorViewModelProvider(ViewModelStoreOwner)
baru untuk mendapatkan fungsionalitas yang sama saat menggunakan Fragment1.2.0
. - Penghentian Artefak
lifecycle-extensions
: Dengan penghentianViewModelProviders.of()
di atas, rilis ini menandai penghentian API terakhir dilifecycle-extensions
dan artefak ini sekarang akan dianggap tidak digunakan lagi secara keseluruhan. Sebaiknya tetapkan dependensi pada artefak Lifecycle spesifik yang Anda perlukan (mis.lifecycle-service
jika menggunakanLifecycleService
danlifecycle-process
jika menggunakanProcessLifecycleOwner
), bukanlifecycle-extensions
, karena tidak akan ada rilis2.3.0
selanjutnya untuklifecycle-extensions
. - Pemroses Anotasi Inkremental Gradle: Pemroses anotasi Lifecycle bersifat inkremental secara default.
Jika aplikasi Anda ditulis dalam bahasa pemrograman Java 8, Anda dapat menggunakan
DefautLifecycleObserver
; dan jika ditulis dalam bahasa pemrograman Java 7, Anda dapat menggunakanLifecycleEventObserver
.
Versi 2.2.0-rc03
4 Desember 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc03
dirilis. Versi 2.2.0-rc03 berisi commit ini.
Perbaikan bug
- Memperbaiki kegagalan yang terjadi saat
ViewModel
tiruan disimpan diViewModelStore
, kemudian diminta dengan setelan pabrik default. - Memperbaiki penggunaan
Dispatchers.Main.immediate
dalamlaunchWhenCreated
dan metode serupa yang akan dipanggil secara tersinkron selama peristiwa siklus proses yang sesuai. (aosp/1156203)
Kontribusi eksternal
- Terima kasih Anders Järleberg atas kontribusinya untuk perbaikan ini! (aosp/1156203)
- Terima kasih untuk Vsevolod Tolstopyatov dari Jetbrains karena telah meninjau implementasi eksekusi sisipan.
Perubahan dependensi
- Ekstensi Lifecycle sekarang bergantung pada Fragment
1.2.0-rc03
.
Versi 2.2.0-rc02
7 November 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc02
dirilis. Versi 2.2.0-rc02 berisi commit ini.
Perbaikan bug
- Memperbaiki bug dalam penyiapan proguard library yang memengaruhi perangkat yang menjalankan API 28+ jika API target lebih rendah dari 29. (b/142778206)
Versi 2.2.0-rc01
23 Oktober 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc01
dirilis. Versi 2.2.0-rc01 berisi commit ini.
Perbaikan bug
- Memperbaiki masalah yang menyebabkan
launchWhenCreated
dan metode terkait berjalan satu frame lebih lambat dari metode siklus proses yang terkait karena penggunaannya atasDispatchers.Main
, bukanDispatchers.Main.immediate
. (aosp/1145596)
Kontribusi eksternal
- Terima kasih Nicklas Ansman atas kontribusinya dalam perbaikan ini! (aosp/1145596)
Versi 2.2.0-beta01
9 Oktober 2019
androidx.lifecycle:lifecycle-*:2.2.0-beta01
dirilis. Versi 2.2.0-beta01 berisi commit ini.
Perbaikan bug
- Memperbaiki regresi yang diperkenalkan pada Lifecycle 2.2.0-alpha05 dalam pengurutan
ProcessLifecycleOwner
danLifecycleOwner
aktivitas beralih ke dimulai dan dilanjutkan di perangkat Android 10. (aosp/1128132) - Memperbaiki regresi yang diperkenalkan pada Lifecycle
2.2.0-alpha05
yang menyebabkanNullPointerException
ketika menggunakanlifecycle-process
versi2.0.0
atau2.1.0
. (b/141536990)
Versi 2.2.0-alpha05
18 September 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha05
dirilis. Versi 2.2.0-alpha05 berisi commit ini.
Perbaikan bug
- Memperbaiki kondisi race dalam builder livedata coroutine. b/140249349
Versi 2.2.0-alpha04
5 September 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha04
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Fitur baru
lifecycleScope
,whenCreated
,whenStarted
,whenResumed
,viewModelScope
, dan implementasiliveData
yang mendasari kini menggunakanDispatchers.Main.immediate
, bukanDispatchers.Main
. (b/139740492)
Kontribusi eksternal
- Terima kasih Nicklas Ansman atas kontribusinya dalam peralihan ke
Dispatchers.Main.immediate
! (aosp/1106073)
Versi 2.2.0-alpha03
7 Agustus 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha03
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Fitur baru
- Penerapan
ViewModelStoreOwner
kini dapat secara opsional menerapkanHasDefaultViewModelProviderFactory
untuk menyediakanViewModelProvider.Factory
default. Perubahan ini telah dilakukan untuk Activity1.1.0-alpha02
, Fragment1.2.0-alpha02
, dan Navigation2.2.0-alpha01
. (aosp/1092370, b/135716331)
Perubahan API
ViewModelProviders.of()
tidak digunakan lagi. Anda dapat meneruskanFragment
atauFragmentActivity
ke konstruktorViewModelProvider(ViewModelStoreOwner)
yang baru untuk mendapatkan fungsionalitas yang sama. (aosp/1009889)
Versi 2.2.0-alpha02
2 Juli 2019
androidx.lifecycle:*:2.2.0-alpha02
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Perubahan API
- Mengganti
LiveDataScope.initialValue
denganLiveDataScope.latestValue
yang akan melacak nilai yang dikeluarkan saat ini dari blokliveData
. - Menambahkan overload baru ke builder
liveData
yang menerima parametertimeout
sebagai jenisDuration
Versi 2.2.0-alpha01
7 Mei 2019
androidx.lifecycle:*:2.2.0-alpha01
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Fitur baru
- Rilis ini menambahkan fitur baru yang menambahkan dukungan untuk coroutine Kotlin untuk Lifecycle dan LiveData. Dokumentasi selengkapnya dapat dilihat di sini.
ViewModel-SavedState Versi 1.0.0
Versi 1.0.0
22 Januari 2020
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0
dirilis. Versi 1.0.0 berisi commit ini.
Fitur penting dalam versi 1.0.0
- Class SavedStateHandle baru telah ditambahkan. Dengan demikian, class
ViewModel
Anda dapat mengakses dan berkontribusi pada status tersimpan. Objek ini dapat diterima dalam konstruktor classViewModel
, dan factory yang disediakan secara default oleh Fragment dan AppCompatActivity akan memasukkanSavedStateHandle
secara otomatis. - AbstractSavedStateViewModelFactory telah ditambahkan. Dengan demikian, Anda sekarang dapat membuat factory kustom untuk
ViewModel
dan memberinya akses keSavedStateHandle
.
ViewModel-Savedstate Versi 1.0.0-rc03
4 Desember 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
dirilis. Versi 1.0.0-rc03 berisi commit ini.
Perubahan dependensi
- Lifecycle ViewModel SavedState sekarang bergantung pada Lifecycle
2.2.0-rc03
.
Viewmodel-Savedstate Versi 1.0.0-rc02
7 November 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
dirilis. Versi 1.0.0-rc02 berisi commit ini.
Perubahan dependensi
- Kini bergantung pada Lifecycle
2.2.0-rc02
.
ViewModel-SavedState Versi 1.0.0-rc01
23 Oktober 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
dirilis tanpa perubahan dari 1.0.0-beta01
. Versi 1.0.0-rc01 berisi commit ini.
ViewModel-Savedstate Versi 1.0.0-beta01
9 Oktober 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
dirilis. Versi 1.0.0-beta01 berisi commit ini.
Perbaikan bug
- Memperbaiki masalah saat mengakses ViewModel SavedState untuk kali pertama di
Activity.onActivityResult()
akan menghasilkanIllegalStateException
. (b/139093676) - Memperbaiki
IllegalStateException
saat menggunakanAbstractSavedStateViewModelFactory
. (b/141225984)
ViewModel-SavedState Versi 1.0.0-alpha05
18 September 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
dirilis. Versi 1.0.0-alpha05 berisi commit ini.
Perubahan API
SavedStateViewModelFactory
tidak lagi memperluasAbstractSavedStateViewModelFactory
danSavedStateHandle
hanya dibuat untuk ViewModel yang memintanya aosp/1113593)
ViewModel-SavedState Versi 1.0.0-alpha03
7 Agustus 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Perubahan yang Dapat Menyebabkan Gangguan
lifecycle-viewmodel-savedstate
tidak lagi bergantung padafragment
, dan konstruktorSavedStateViewModelFactory(Fragment)
sertaSavedStateViewModelFactory(FragmentActivity)
yang terkait telah dihapus. Namun,SavedStateViewModelFactory
kini menjadi factory default untuk Activity1.1.0-alpha02
, Fragment1.2.0-alpha02
, dan Navigation2.2.0-alpha01
. (b/135716331)
ViewModel-SavedState Versi 1.0.0-alpha02
2 Juli 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Fitur baru
- Menambahkan overload
SavedStateHandle.getLiveData()
yang menerima nilai default.
Perubahan API
SavedStateVMFactory
diganti namanya menjadiSavedStateViewModelFactory
.AbstractSavedStateVMFactory
diganti namanya menjadiAbstractSavedStateViewModelFactory
.
ViewModel-Savedstate Versi 1.0.0-alpha01
13 Maret 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
dirilis. Log commit lengkap untuk rilis awal ini dapat dilihat di sini.
Fitur baru
ViewModels
sekarang dapat berkontribusi pada savedstate. Untuk melakukannya, gunakan factorySavedStateVMFactory
viewmodel yang baru saja diperkenalkan, dan ViewModel Anda harus memiliki konstruktor yang menerima objekSavedStateHandle
sebagai parameter.
Versi 2.1.0
Perubahan penting sejak 2.0.0
- Menambahkan
LifecycleEventObserver
untuk situasi ketika aliran peristiwa siklus proses diperlukan. API ini merupakan API publik, bukan classGenericLifecycleObserver
tersembunyi. - Menambahkan ekstensi ktx untuk metode
LiveData.observe
dan metodeTransformations.*
. - Menambahkan
Transformations.distinctUntilChanged
, yang membuat objek LiveData baru yang tidak mengeluarkan nilai hingga nilaiLiveData
sumber telah diubah. - Menambahkan dukungan coroutine dalam ViewModel dengan menambahkan properti ekstensi
ViewModel.viewModelScope
.
Versi 2.1.0
5 September 2019
androidx.lifecycle:lifecycle-*:2.1.0
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Versi 2.1.0-rc01
2 Juli 2019
androidx.lifecycle:*:2.1.0-rc01
dirilis tanpa perubahan dari androidx.lifecycle:*:2.1.0-beta01
. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Versi 2.1.0-beta01
7 Mei 2019
androidx.lifecycle:*:2.1.0-beta01
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Fitur baru
- Lifecycle beralih ke beta: API yang diperkenalkan dalam rilis alfa sebelumnya, seperti fungsi ekstensi
liveData
untuk transformasi dan observasi, inisialisasiViewModel
dengan delegasi properti, dan lainnya distabilkan dan tidak akan berubah.
Versi 2.1.0-alpha04
3 April 2019
androidx.lifecycle:*:2.1.0-alpha04
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Perubahan API
- Perubahan yang dapat menyebabkan gangguan: API yang digunakan di balik
by viewModels()
danby activityViewModels()
telah diubah untuk mendukungViewModelStore
secara langsung, bukan hanyaViewModelStoreOwner
. (aosp/932932)
Versi 2.1.0-alpha03
13 Maret 2019
androidx.lifecycle:*:2.1.0-alpha03
dirilis. Daftar lengkap commit yang disertakan dalam versi ini dapat dilihat di sini.
Perubahan API
ViewModelProvider.KeyedFactory
telah dihapus. Antarmuka kedua selainViewModelProvider.Factory
tidak ditulis dengan baik dengan fitur-fitur baru sebagai delegasi properti di Kotlinby viewmodels {}
. (aosp/914133)
Versi 2.1.0-alpha02
30 Januari 2019
androidx.lifecycle 2.1.0-alpha02
dirilis.
Perubahan API
LifecycleRegistry
kini menyertakan metodesetCurrentState()
untuk menggantikan metodesetState()
yang sekarang sudah tidak digunakan lagi. (aosp/880715)
Perbaikan bug
- Memperbaiki masalah dengan instance
ViewModel
palsu yang mengalami error jikaViewModelStore
yang memuatnya dihapus. b/122273087
Versi 2.1.0-alpha01
17 Desember 2018
androidx.lifecycle 2.1.0-alpha01
dirilis.
Fitur baru
- Menambahkan
LifecycleEventObserver
untuk situasi ketika aliran peristiwa siklus proses diperlukan. API ini merupakan API publik, bukan classGenericLifecycleObserver
tersembunyi. - Menambahkan ekstensi ktx untuk metode
LiveData.observe
dan metodeTransformations.*
. - Metode
Transformations.distinctUntilChanged
telah ditambahkan. Penambahan ini membuat objekLiveData
baru yang tidak mengeluarkan nilai hingga nilai LiveData sumber telah diubah. - Dukungan Coroutine di ViewModel: properti ekstensi
ViewModel.viewModelScope
ditambahkan. - Menambahkan
ViewModelProvider.KeyedFactory
, factory untuk ViewModel yang menerimakey
danClass
dalam metodecreate
.
Versi 2.0.0
Versi 2.0.0
21 September 2018
Lifecycle 2.0.0
dirilis dengan satu perbaikan bug dari 2.0.0-rc01
dalam ViewModel.
Perbaikan Bug
- Memperbaiki aturan proguard ViewModel yang salah menghapus konstruktor b/112230489
Versi 2.0.0-beta01
2 Juli 2018
Perbaikan Bug
- Memperbaiki aturan proguard LifecycleObserver agar hanya menyimpan implementasi, bukan sub-antarmuka. b/71389427
- Memperbaiki aturan proguard ViewModel untuk memungkinkan obfuscation dan penyingkatan
Versi Pra-AndroidX
Untuk versi Lifecycle pra-AndroidX, sertakan dependensi berikut:
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"
}
Versi 1.1.1
21 Maret 2018
Hanya satu perubahan kecil: android.arch.core.util.Function
dipindahkan dari arch:runtime
ke arch:common
. Pemindahan tersebut memungkinkan class ini untuk digunakan tanpa dependensi runtime, misalnya dalam paging:common
di bawah.
lifecycle:common
merupakan dependensi dari lifecycle:runtime
sehingga perubahan ini tidak memengaruhi lifecycle:runtime
secara langsung, hanya modul yang bergantung secara langsung pada lifecycle:common
, seperti yang dilakukan oleh Paging.
Versi 1.1.0
22 Januari 2018
Perubahan Paket
Dependensi baru yang jauh lebih kecil sekarang tersedia:
android.arch.lifecycle:livedata:1.1.0
android.arch.lifecycle:viewmodel:1.1.0
Perubahan API
LifecycleActivity
danLifecycleFragment
yang sudah tidak digunakan lagi sekarang telah dihapus. Harap gunakanFragmentActivity
,AppCompatActivity
, atau dukungFragment
.- Anotasi
@NonNull
telah ditambahkan keViewModelProviders
danViewModelStores
- Konstruktor
ViewModelProviders
tidak digunakan lagi. Harap gunakan metode statisnya secara langsung ViewModelProviders.DefaultFactory
tidak digunakan lagi - harap gunakanViewModelProvider.AndroidViewModelFactory
- Metode
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
statis telah ditambahkan untuk mengambilFactory
statis yang cocok untuk membuat instanceViewModel
danAndroidViewModel
.