Lifecycle

Komponen berbasis Lifecycle melakukan tindakan sebagai respons terhadap perubahan status siklus proses komponen lain, seperti aktivitas dan fragmen. Komponen-komponen ini membantu Anda menghasilkan kode yang lebih rapi dan sering kali lebih ringan, yang lebih mudah dipelihara.

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
Library ini terakhir diperbarui pada: 11 Desember 2024

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.

Laporkan masalah baru

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 ulang ViewModel yang sedang diuji dan semua komponen terkait. (Id6a69, b/381063087)
  • Instance LifecycleOwner dan ViewModelStoreOwner yang diambil melalui findViewTree API masing-masing kini dapat di-resolve melalui induk yang tidak terhubung dari tampilan, seperti ViewOverlay. Lihat catatan rilis core atau dokumentasi di ViewTree.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 menggunakan SavedStateHandle dalam kode umum. (Ib6394, b/334076622)

Dukungan Serialisasi KotlinX

  • Dengan dukungan KotlinX Serialization yang ditambahkan di SavedState 1.3.0-alpha05, kami telah memperkenalkan saved, delegasi properti lambat, untuk memudahkan penyimpanan class @Serializable di SavedStateHandle dan membuat class tersebut otomatis dipulihkan di seluruh penghentian dan pembuatan ulang proses. Perhatikan bahwa delegasi saved lambat dan tidak akan memanggil lambda init atau menyimpan apa pun ke SavedStateHandle 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 ke SavedStateHandle untuk menampilkan MutableStateFlow. Fungsi baru ini bersifat eksklusif untuk kunci dan tidak dapat digunakan dengan getLiveData. 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 memindahkan Lifecycle dari status tersebut ke status lain kini akan menghasilkan IllegalStateException. (I116c4, b/370577987)
  • SavedStateHandle tidak lagi menyertakan SavedStateProvider.saveState() jika Bundle yang ditampilkan kosong. (I910b5, b/370577987)

Perbaikan Bug

  • Lifecycle.eventFlow kini selesai dengan benar saat Lifecycle adalah DESTROYED (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 seperti SavedStateHandle 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 Lint NullSafeMutableLiveData telah meningkatkan dukungan untuk smart cast, sehingga menghindari positif palsu. (85fed6, b/181042665)

Update Dependensi

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 ProGuard androidx.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 class ViewModelScenario untuk menguji ViewModel secara terpisah, dengan dukungan untuk onCleared (semua platform) dan SavedStateHandle (khusus Android). (337f68d, c9b3409, 9799a95c, b/264602919)
  • Membuat ViewModel dengan ViewModelProvider kini aman untuk thread; anotasi @MainThread telah dihapus. (Ifd978, b/237006831)

Perubahan API

  • Tambahkan fungsi factory CreationExtras.Key() untuk menyederhanakan pembuatan objek CreationExtras.Key anonim. (I970ee)
  • CreationExtras kini menyertakan overload operator seperti peta untuk memungkinkan manipulasi konten idiomatis di Kotlin. Hal ini memungkinkan penggunaan in, +=, dan + dengan CreationExtras. (Ib4353)
  • CreationExtras sekarang mengimplementasikan metode equals, hashCode, dan toString. (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: Artefak desktop 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

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 di LiveData (misalnya, saat menggunakan take(1)). (I9c566)
  • Penyelesaian Lifecycle*Effect kini bersifat idempoten (yaitu, jika onStopOrDispose dipanggil karena Lifecycle dihentikan, onStopOrDispose tidak akan dipanggil untuk kedua kalinya setelah dihapus, kecuali jika Lifecycle kembali ke STARTED 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 Lifecycle compileOnly 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 pada compose-runtime, yang menghapus dependensi umumnya pada compose-ui. Artefak Android mempertahankan compose-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 menggunakan SavedStateHandle 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 ke lifecycle-runtime-compose sehingga API helper berbasis Compose-nya dapat digunakan di luar UI Compose.
  • Artefak lifecycle-runtime-compose kini berisi API dropUnlessResumed dan dropUnlessStarted yang memungkinkan Anda menghapus klik atau peristiwa lain yang terjadi bahkan setelah LifecycleOwner turun di bawah Lifecycle.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 dan SupervisorJob() Anda sendiri atau mengganti default dengan menggunakan backgroundScope yang tersedia dalam runTest. (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    
  • ViewModel telah ditulis ulang di Kotlin dan kini menggunakan AutoClosable, bukan Closeable. Sekarang, fungsi ini mendukung penambahan objek AutoCloseable dengan key yang memungkinkan pengambilannya melalui getCloseable().

  • Memanggil LifecycleStartEffect dan LifecycleResumeEffect tanpa kunci kini akan menghasilkan error, mengikuti konvensi yang sama dengan DisposableEffect API yang dicerminkan oleh API ini.

  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) tidak digunakan lagi dan diganti dengan LiveData.toPublisher(lifecycleOwner).

  • Ekstensi kotlin lifecycle-livedata-core-ktx kini telah dipindahkan ke modul lifecycle-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 ke common dan mendukung jvm dan iOS selain Android.
  • lifecycle-runtime memindahkan sebagian besar API ke common dan mendukung jvm dan iOS selain Android.
  • lifecycle-runtime-ktx kini kosong, dengan semua API dipindahkan ke lifecycle-runtime.
  • lifecycle-runtime-compose memindahkan semua API ke common dan mengirimkan artefak Android, yang cocok dengan dukungan multiplatform androidx.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 metode ViewModelProvider.create(), bukan langsung memanggil konstruktornya.
  • ViewModelProvider.NewInstanceFactory dan ViewModelProvider.AndroidViewModelFactory hanya tersedia di Android.
    • Factory Kustom direkomendasikan untuk diperluas dari ViewModelProvider.Factory dan menggunakan metode create yang menggunakan CreationExtras atau menggunakan DSL Kotlin viewModelFactory.
  • Menggunakan ViewModelProvider tanpa factory kustom di platform non-JVM akan menghasilkan UnsupportedOperationException. Di platform JVM, kompatibilitas dipertahankan dengan menggunakan konstruktor ViewModel tanpa argumen jika factory kustom tidak disediakan.
  • viewModelScope akan kembali ke EmptyCoroutineContext di platform tempat Dispatchers.Main tidak tersedia (mis., Linux).

Artefak yang terpengaruh:

  • lifecycle-viewmodel memindahkan sebagian besar API ke common dan mendukung jvm dan iOS selain Android.
  • lifecycle-viewmodel-ktx kini kosong, dengan semua API dipindahkan ke lifecycle-viewmodel.
  • lifecycle-viewmodel-compose memindahkan semua API ke common dan mengirimkan artefak Android, yang cocok dengan dukungan multiplatform androidx.compose.

Perubahan Perilaku

  • InitializerViewModelFactory (termasuk fungsi builder viewModelFactory) kini akan menampilkan IllegalArgumentException jika initializer dengan clazz: KClass<VM : ViewModel> yang sama telah ditambahkan. (Ic3a36)

Masalah Umum

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 AAR lifecycle-runtime. (aosp/3038274, b/322382422)
  • Memperbaiki perubahan pengurutan yang tidak disengaja dalam cara instance AutoCloseable yang dilampirkan ke ViewModel dihapus - urutan sebelumnya addCloseable(String, AutoCloseable), lalu addClosable(AutoCloseable), lalu onCleared() 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 ke common dan mengirimkan artefak Android, yang cocok dengan dukungan multiplatform untuk androidx.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 ke common dan mengirimkan artefak Android, yang cocok dengan dukungan multiplatform androidx.compose. Untuk mengakomodasi perubahan ini, metode viewModel Composable kini menerima KClass selain java.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 dan SupervisorJob() Anda sendiri atau mengganti default dengan menggunakan backgroundScope yang tersedia dalam runTest. (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    

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 metode ViewModelProvider.create(), bukan langsung memanggil konstruktornya.
  • ViewModelProvider.NewInstanceFactory dan ViewModelProvider.AndroidViewModelFactory hanya tersedia di Android.
    • Factory Kustom direkomendasikan untuk diperluas dari ViewModelProvider.Factory dan menggunakan metode create yang menggunakan CreationExtras atau menggunakan DSL Kotlin viewModelFactory.
  • Menggunakan ViewModelProvider tanpa factory kustom di platform non-JVM akan menghasilkan UnsupportedOperationException. Di platform JVM, kompatibilitas dipertahankan dengan menggunakan konstruktor ViewModel tanpa argumen jika factory kustom tidak disediakan.
  • viewModelScope akan kembali ke EmptyCoroutineContext di platform tempat Dispatchers.Main tidak tersedia (mis., Linux).

Perubahan Perilaku

  • InitializerViewModelFactory (termasuk fungsi builder viewModelFactory) kini akan menampilkan IllegalArgumentException jika initializer dengan clazz: KClass<VM : ViewModel> yang sama telah ditambahkan. (Ic3a36)

Perbaikan Bug

  • ViewModel.getCloseable kini menangani kunci duplikat: jika key sudah memiliki resource AutoCloseable yang terkait dengannya, resource lama akan segera diganti dan ditutup. (Ibeb67)
  • Mengakses viewModelScope dari ViewModel 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 dan dropUnlessStarted telah ditambahkan yang memungkinkan Anda menghapus klik atau peristiwa lain yang terjadi bahkan setelah LifecycleOwner turun di bawah Lifecycle.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, dan LifecycleRegistry kini dikirim dalam artefak yang kompatibel dengan Multiplatform Kotlin. (b/317249252)

Perubahan API

  • Memanggil LifecycleStartEffect dan LifecycleResumeEffect tanpa kunci kini akan menghasilkan error, mengikuti konvensi yang sama dengan DisposableEffect API yang dicerminkan oleh API ini. (Ib0e0c, b/323518079)
  • ViewModel sekarang menggunakan AutoCloseable, bukan Closeable. Ini adalah perubahan yang kompatibel dengan versi lama. (I27f8e, b/214568825)
  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) tidak digunakan lagi dan diganti dengan LiveData.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 objek Closeable dengan key yang memungkinkan pengambilannya melalui getCloseable(). (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 penangguhan setCurrentState() yang memastikan bahwa perubahan status dan semua callback LifecycleObserver selesai sebelum ditampilkan. Perlu diperhatikan, tidak seperti menetapkan properti currentState secara langsung, hal ini tidak menggunakan runBlocking, sehingga aman digunakan dalam coroutine seperti yang disediakan oleh runTest.
  • Ekstensi LiveData dari map dan switchMap kini mencerminkan perilaku distinctUntilChanged - jika LiveData memiliki kumpulan value, fungsi map/switchMap akan langsung dipanggil untuk mengisi value dari LiveData yang ditampilkan. Tindakan ini memastikan bahwa nilai awal akan ditetapkan sebagai bagian dari komposisi pertama (saat digunakan dengan observeAsState()), tetapi tidak mengubah perilaku pengamatan - nilai pembaruan dari LiveData sumber hanya akan berlaku setelah Anda mulai mengamati LiveData.
  • Rilis ini memperbaiki masalah saat SavedStateHandle tidak akan memulihkan class Parcelable 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 di get, getLiveData, dan getStateFlow 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 mengamati Flow dari Lifecycle.Event melalui metode ekstensi Lifecycle.asFlow().
  • Pengguna Jetpack Compose kini dapat menggunakan LifecycleEventEffect untuk menjalankan efek samping Compose berdasarkan Lifecycle.Event.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Pengguna Jetpack Compose dapat menggunakan LifecycleStartEffect dan LifecycleResumeEffect untuk menangani pasangan peristiwa - dimulai hingga dihentikan dan dilanjutkan hingga dijeda. API ini mencerminkan API yang ditemukan di DisposableEffect 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 properti Lifecycle.currentStateFlow, yang menampilkan StateFlow dengan value adalah Lifecycle.State saat ini.
  • Pengguna Jetpack Compose dapat menggunakan ekstensi Lifecycle.currentStateAsState() untuk mengekspos Lifecycle.State secara langsung sebagai Compose State. Ini setara (dan merupakan alternatif yang lebih singkat) dengan lifecycle.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 class Parcelable 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 di get, getLiveData, dan getStateFlow 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 dan LifecycleResumeEffect kini membuang dan membuat ulang blok efek dengan benar jika LifecycleOwner 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 penetapan Lifecycle.State TestLifecycleOwner menggunakan kolom currentState saat berada di dalam coroutine. Pemeriksaan Lint kini menyarankan penangguhan setCurrentState yang memungkinkan penetapan Lifecycle.State tanpa pemblokiran. (Icf728, b/297880630)

Perbaikan Bug

  • Memperbaiki masalah pada LiveData.switchMap saat menampilkan instance LiveData yang sama pada panggilan awal dan panggilan berikutnya akan mencegah instance LiveData 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 penangguhan setCurrentState() untuk memberi pengguna opsi menggunakan TestLifecycleOwner dari dalam coroutine seperti yang disediakan oleh runTest. (I329de, b/259344129)

Perubahan API

  • Semua file dari modul lifecycle-livedata-ktx telah dipindahkan ke modul lifecycle-livedata utama. (I10c6f, b/274800183)

Perubahan Perilaku

  • Ekstensi LiveData.map() dan LiveData.switchMap() kini menetapkan value dari LiveData yang ditampilkan jika LiveData 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 menutup Closeable jika ViewModel telah menerima panggilan ke onCleared(). (I4712e, b/280294730)

Perbaikan Bug

  • Dari Lifecycle 2.6.2: Memperbaiki masalah saat SavedStateHandle tidak akan dipulihkan dengan benar setelah penghentian proses jika status dipulihkan, save() dipanggil tanpa benar-benar menyimpan status di SavedStateRegistry induk, lalu status dipulihkan lagi. Tindakan ini memperbaiki interaksi antara rememberSaveable dan NavHost 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 melalui Lifecycle.currentStateFlow, yang menampilkan StateFlow dengan value adalah Lifecycle.State saat ini. (Ib212d, b/209684871)
  • Lifecycle.Event kini dapat diamati sebagai Flow dengan Lifecycle.asFlow(). (If2c0f, b/176311030)
  • LifecycleResumeEffect API telah ditambahkan untuk menjalankan SideEffect Compose berdasarkan callback peristiwa Lifecycle.Event.ON_RESUME dan Lifecycle.Event.ON_PAUSE. (I60386, b/235529345)
  • LifecycleStartEffect API telah ditambahkan untuk menjalankan SideEffect Compose berdasarkan callback peristiwa Lifecycle.Event.ON_START dan Lifecycle.Event.ON_STOP. (I5a8d1, b/235529345)
  • LifecycleEventEffect API telah ditambahkan untuk menjalankan SideEffect Compose berdasarkan Lifecycle.Event. (Ic9794, b/235529345)
  • Ekstensi Lifecycle.collectAsState() telah ditambahkan untuk mengekspos Lifecycle.State secara langsung sebagai Compose State. Ini setara (dan merupakan alternatif yang lebih singkat) dengan lifecycle.currentStateFlow.collectAsState(). (I11015, b/235529345)

Perbaikan Bug

  • Ekstensi LiveData.distinctUntilChanged() kini menetapkan value dari LiveData yang ditampilkan jika LiveData sebelumnya telah menetapkan nilai. Hal ini tidak mengubah perilaku pengamatan - nilai yang diperbarui dari LiveData sumber hanya akan tetap berlaku setelah Anda mulai mengamati LiveData yang ditampilkan dari distinctUntilChanged(). (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 di SavedStateRegistry induk, lalu status dipulihkan lagi. Tindakan ini memperbaiki interaksi antara rememberSaveable dan NavHost 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

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 properti isInitialized baru yang menunjukkan apakah nilai eksplisit pernah ditetapkan di LiveData, memungkinkan Anda membedakan antara liveData.value yang menampilkan null karena tidak ada nilai yang pernah ditetapkan atau nilai null eksplisit.
  • MediatorLiveData kini menyertakan konstruktor untuk menetapkan nilai awal.
  • Menambahkan ekstensi baru di StateFlow dan Flow dari collectAsStateWithLifecycle() yang dikumpulkan dari alur dan mewakili nilai terbarunya sebagai Status Compose dengan cara yang berbasis siklus proses.
  • Metode Lifecycle.launchWhenX dan metode Lifecycle.whenX tidak digunakan lagi karena penggunaan dispatcher jeda dapat menyebabkan resource yang sia-sia dalam beberapa kasus. Sebaiknya gunakan Lifecycle.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 dari Observer yang dibuat di Kotlin kini cocok dengan nullability jenis generik. Jika Anda ingin Observer.onChanged() menerima jenis nullable, Anda harus membuat instance Observer dengan jenis nullable.
  • Class ini juga dikonversi ke Kotlin, tetapi tetap kompatibel dengan sumber: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher, dan ProcessLifecycleOwner

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 menetapkan value dari LiveData yang ditampilkan jika LiveData sebelumnya telah menetapkan nilai. Hal ini tidak mengubah perilaku pengamatan - nilai yang diperbarui dari LiveData sumber hanya akan tetap berlaku setelah Anda mulai mengamati LiveData yang ditampilkan dari distinctUntilChanged(). (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 properti lifecycle, bukan mengimplementasikan fungsi getLifecycle() 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 properti viewModelStore, bukan mengimplementasikan fungsi getViewModelStore() sebelumnya. (I86409, b/240298691)
  • Ekstensi Kotlin di LifecycleOwner yang menyediakan kolom lifecycleScope telah dipindahkan ke artefak lifecycle-common dari lifecycle-runtime-ktx. (I41d78, b/240298691)
  • Ekstensi Kotlin di Lifecycle yang menyediakan kolom coroutineScope telah dipindahkan ke artefak lifecycle-common dari lifecycle-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 seperti Transformations.map - Kode Kotlin kini harusmenggunakan sintaksis metode ekstensi Kotlin yang sebelumnya hanya tersedia saat menggunakan lifecycle-livedata-ktx. Saat menggunakan bahasa pemrograman Java, versi metode ini yang menggunakan metode androidx.arch.core.util.Function tidak digunakan lagi dan diganti dengan versi yang menggunakan Function1 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 di View dari androidx.lifecycle.setViewTreeViewModelStoreOwner dan androidx.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 properti defaultViewModelProviderFactory dan defaultViewModelCreationExtras, bukan mengimplementasikan fungsi sebelumnya yang sesuai. (Iaed9c, b/240298691)
  • Observer kini ditulis dalam Kotlin. Metode onChanged() sekarang menggunakan nama value untuk parameternya. (Iffef2, I4995e, b/240298691)
  • AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher, dan ProcessLifecycleOwner 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 properti isInitialized baru yang menunjukkan apakah nilai eksplisit pernah ditetapkan di LiveData, memungkinkan Anda membedakan antara liveData.value yang menampilkan null karena tidak ada nilai yang pernah ditetapkan atau nilai null eksplisit. (Ibd018)

Perubahan API

  • collectAsStateWithLifecycle() API lifecycle-runtime-compose tidak lagi dalam status eksperimental. (I09d42, b/258835424)
  • Metode Lifecycle.launchWhenX dan metode Lifecycle.whenX tidak digunakan lagi karena penggunaan dispatcher jeda dapat menyebabkan resource yang sia-sia dalam beberapa kasus. Sebaiknya gunakan Lifecycle.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 di View dari androidx.lifecycle.setViewTreeLifecycleOwner dan androidx.lifecycle.findViewTreeLifecycleOwner untuk menetapkan dan menemukan pemilik yang ditetapkan sebelumnya. Ini menggantikan ekstensi Kotlin sebelumnya di lifecycle-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 di lifecycle-reactivestreams-ktx telah dipindahkan ke modul lifecycle-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, dan ViewModelStore kini ditulis dalam Kotlin (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)

Perbaikan Bug

  • SavedStateHandle tidak lagi error dengan ClassCastException saat memanggil get() 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 membuat callbackFlow, bukan menggunakan implementasi Channel-nya sendiri untuk memastikan keamanan thread dan penyimpanan konteks. (I4a8b2, b/200596935)
  • Fungsi asLiveData FlowLiveData kini akan mempertahankan nilai awal StateFlow saat membuat objek LiveData baru. (I3f530, b/157380488)
  • Dari Lifecycle 2.5.1: Implementasi kustom AndroidViewModelFactory sekarang memanggil fungsi create(modelClass) dengan benar saat menggunakan konstruktor stateful dengan Lifecycle 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 dan Flow dari collectAsStateWithLifecycle 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 dalam Lifecycle.State tertentu. Saat siklus proses berada dalam Lifecycle.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 fungsi create(modelClass) dengan benar saat menggunakan konstruktor AndroidViewModelFactory stateful dengan Lifecycle 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 menawarkan getStateFlow() API yang menampilkan StateFlow Kotlin untuk memantau perubahan nilai sebagai alternatif penggunaan LiveData.

  • ViewModel CreationExtras - saat menulis ViewModelProvider.Factory kustom, Anda tidak perlu lagi memperluas AndroidViewModelFactory atau AbstractSavedStateViewModelFactory untuk mendapatkan akses ke Application atau SavedStateHandle. Sebagai gantinya, kolom ini diberikan ke setiap subclass ViewModelProvider.Factory sebagai CreationExtras melalui overload baru create: create(Class<T>, CreationExtras). Tambahan ini disediakan secara otomatis oleh Aktivitas atau Fragmen saat menggunakan Activity 1.5.0 dan Fragment 1.5.0.

    class CustomFactory : ViewModelProvider.Factory {
        override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
            return when (modelClass) {
                HomeViewModel::class -> {
                    // Get the Application object from extras
                    val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                    // Pass it directly to HomeViewModel
                    HomeViewModel(application)
                }
                DetailViewModel::class -> {
                    // Create a SavedStateHandle for this ViewModel from extras
                    val savedStateHandle = extras.createSavedStateHandle()
                    DetailViewModel(savedStateHandle)
                }
                else -> throw IllegalArgumentException("Unknown class $modelClass")
            } as T
        }
    }
    
  • lifecycle-viewmodel sekarang menyediakan viewModelFactory DSL Kotlin yang memungkinkan Anda menentukan ViewModelProvider.Factory terkait dengan satu atau beberapa penginisialisasi lambda, satu untuk setiap class ViewModel tertentu yang didukung oleh factory kustom Anda, menggunakan CreationExtras 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 API viewModel() yang menggunakan factory lambda untuk membuat instance ViewModel tanpa memerlukan pembuatan ViewModelProvider.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 di SavedStateHandle.saveable yang memungkinkan perilaku seperti rememberSaveable didukung oleh SavedStateHandle `ViewModel.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Menambahkan addCloseable() API dan overload konstruktor baru yang memungkinkan Anda menambahkan satu atau beberapa objek Closeable ke ViewModel yang akan ditutup saat ViewModel dihapus tanpa perlu penanganan manual di onCleared().

    Misalnya, untuk membuat cakupan coroutine yang dapat Anda masukkan ke ViewModel, tetapi pengontrolan dilakukan melalui pengujian, Anda dapat membuat CoroutineScope yang menerapkan Closeable:

    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 seperti viewModelScope:

    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 dari INITIALIZED ke DESTROYED kini akan selalu menampilkan IllegalStateException, terlepas dari apakah Lifecycle memiliki observer terlampir atau tidak.
  • LifecycleRegistry kini akan menghapus observernya saat mencapai status DESTROYED.

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 menampilkan NullPointerException saat meneruskan sumber null, bukan menyebarkan sumber null 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 dalam SavedStateHandle (I8bb86, b/225014345)

Perbaikan Bug

  • Memperbaiki masalah ketika membuat satu tingkat NavHost dalam NavHost lainnya di tab navigasi bawah yang bukan utama akan menyebabkan IllegalStateException 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 ke SavedStateHandle.saveable untuk paritas dengan rememberSaveable (I38cfe, b/224565154)

Perubahan API

  • CreationExtras kini bersifat abstrak, bukan tertutup. (Ib8a7a)

Perbaikan Bug

  • Memperbaiki error IllegalStateException: Already attached to lifecycleOwner yang disebabkan oleh SavedStateHandleController. (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 menyediakan SavedStateHandleSaver, API eksperimental yang memastikan nilai dalam SavedStateHandle terintegrasi dengan benar dengan status instance tersimpan yang sama dengan yang digunakan rememberSaveable. (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 penggunaan CreationExtras meskipun diinisialisasi dengan SavedStateRegistryOwner. 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 menawarkan getStateFlow() API yang menampilkan StateFlow Kotlin untuk memantau perubahan nilai sebagai alternatif penggunaan LiveData. (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 objek Closeable ke ViewModel yang akan ditutup saat ViewModel dihapus tanpa memerlukan tugas manual di onCleared(). (I55ea0)
  • lifecycle-viewmodel kini memberikan InitializerViewModelFactory yang memungkinkan Anda menambahkan lambda untuk menangani class ViewModel tertentu, menggunakan CreationExtras sebagai sumber data utama. (If58fc, b/216687549)
  • lifecycle-viewmodel-compose kini menawarkan API viewModel() yang menggunakan factory lambda untuk membuat instance ViewModel tanpa memerlukan pembuatan ViewModelProvider.Factory kustom. (I97fbb, b/216688927)

Perubahan API

  • Anda kini dapat membuat ViewModel dengan CreationExtras melalui lifecycle-viewmodel-compose. (I08887, b/216688927)

Perubahan perilaku

  • Mencoba memindahkan Lifecycle.State dari INITIALIZED ke DESTROYED kini akan selalu menampilkan IllegalStateException, terlepas dari Lifecycle memiliki observer terlampir atau tidak. (I7c390, b/177924329)
  • LifecycleRegistry kini akan menghapus observernya saat mencapai status DESTROYED. (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 dan SavedStateViewModelFactory 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: Mengupdate lifecycle-process agar bergantung pada Startup 1.1.1 untuk memastikan bahwa perbaikan yang mencegah ProcessLifecycleInitializer menampilkan StartupException 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 membuat ViewModel. (I340f7, b/177667711)
  • Kini Anda dapat membuat model tampilan melalui CreationExtras menggunakan AndroidViewModelFactory 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 ke ViewModelProvider.get().
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY menyediakan akses ke class Application.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY menyediakan akses ke SavedStateRegistryOwner yang digunakan untuk membuat ViewModel ini.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY menyediakan akses ke ViewModelStoreOwner yang digunakan untuk membuat ViewModel ini.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY menyediakan akses ke Bundle argumen yang harus digunakan untuk membuat SavedStateHandle.

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 dari SavedStateHandle. 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 ke SavedStateHandle akan muncul kembali setelah penghentian dan pembuatan ulang proses, meskipun nilai tersebut secara khusus dihapus dari SavedStateHandle. 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 menggunakan ProcessLifecycleInitializer akan menyebabkan StartupException. (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 atau DefaultLifecycleObserver harus digunakan sebagai gantinya.
  • Library androidx.lifecycle:lifecycle-viewmodel-compose telah ditambahkan. Class ini menyediakan composable viewModel() dan LocalViewModelStoreOwner.
    • Perubahan yang dapat menyebabkan gangguan sumber: ViewModelProvider telah ditulis ulang di Kotlin. Metode ViewModelProvider.Factory.create tidak lagi mengizinkan nullable generik.
  • 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 dari lifecycle.lifecycle-common-java8 ke lifecycle.lifecycle-common. lifecycle.lifecycle-common-java8 tidak lagi menyediakan fungsi tambahan apa pun selain lifecycle.lifecycle-common, sehingga dependensi padanya dapat diganti dengan lifecycle.lifecycle-common.
  • API non-coroutine dari lifecycle-viewmodel-ktx telah dipindahkan ke modul lifecycle-viewmodel.
  • lifecycle-process sekarang menggunakan androidx.startup untuk melakukan inisialisasi ProcessLifecycleOwner.

    Sebelumnya, perilaku ini dilakukan oleh androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Jika sebelumnya Anda menggunakan tools:node="remove" yang digunakan ContentProvider 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 atau DefaultLifecycleObserver harus digunakan sebagai gantinya. (I5a8fa)
  • DefaultLifecycleObserver telah dipindahkan dari androidx.lifecycle.lifecycle-common-java8 ke androidx.lifecycle.lifecycle-common. androidx.lifecycle.lifecycle-common-java8 tidak lagi menyediakan fungsi tambahan apa pun selain androidx.lifecycle.lifecycle-common, sehingga dependensi padanya dapat diganti dengan androidx.lifecycle.lifecycle-common. (I021aa)
  • API non-coroutine dari lifecycle-viewmodel-ktx telah dipindahkan ke modul lifecycle-viewmodel. (I6d5b2)

Kontribusi Eksternal

  • Terima kasih dmitrilc karena telah memperbaiki kesalahan ketik dalam dokumentasi ViewModel. (#221)

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 ke lifecycle-runtime-ktx yang mendeteksi saat repeateOnLifecycle salah digunakan di onStart() atau onResume(). (706078, b/187887400)

Perubahan API

  • LifecycleOwner.addRepeatingJob API dihapus dan diganti dengan Lifecycle.repeatOnLifecycle yang mengikuti konkurensi terstruktur dan lebih mudah untuk dipahami. (I4a3a8)
  • Membuat ProcessLifecycleInitializer menjadi publik sehingga androidx.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

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 menggunakan androidx.startup untuk melakukan inisialisasi ProcessLifecycleOwner.

    Sebelumnya, perilaku ini dilakukan oleh androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Jika sebelumnya Anda menggunakan tools:node="remove" yang digunakan ContentProvider 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 menggunakan Lifecycle.repeatOnLifecycle API. Ini merupakan alternatif untuk LifecycleOwner.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 menggunakan ViewModelStoreOwner opsional, sehingga lebih mudah untuk bekerja dengan pemilik selain LocalViewModelStoreOwner. Misalnya, kini Anda dapat menggunakan viewModel(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 dan androidx.navigation:navigation-compose menyinkronkan dependensi pada androidx.compose.compiler:compiler:1.0.0-beta04 dan androidx.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 menampilkan ViewModelStoreOwner nullable untuk menentukan lebih baik apakah ViewModelStoreOwner tersedia di komposisi saat ini. API yang memerlukan ViewModelStoreOwner, seperti viewModel() dan NavHost, masih menampilkan pengecualian jika ViewModelStoreOwner 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 fungsi provides yang dapat digunakan dengan CompositionLocalProvider, menggantikan asProvidableCompositionLocal() 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() dan LocalViewModelStoreOwner dipindahkan dari androidx.compose.ui.viewinterop ke artefak ini dalam paket androidx.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 memanggil setSavedStateProvider() untuk kunci tertentu, sehingga menyediakan SavedStateProvider yang akan mendapatkan callback ke saveState() saat SavedStateHandle 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 objek LifecycleRegistry yang dimiliki oleh komponen Anda sendiri, Anda dapat secara eksplisit memilih tidak melakukan pemeriksaan dengan menggunakan LifecycleRegistry.createUnsafe(...), tetapi Anda harus memastikan bahwa sinkronisasi yang tepat diterapkan saat LifecycleRegistry ini diakses dari thread berbeda.
  • Status Siklus Proses dan Helper Peristiwa: Menambahkan metode helper statis downFrom(State), downTo(State), upFrom(State), upTo(State) ke Lifecycle.Event untuk menghasilkan Event dengan mempertimbangkan State dan arah transisi. Menambahkan metode getTargetState() yang memberikan State yang akan menjadi tujuan transisi Lifecycle langsung setelah Event.
  • withStateAtLeast: Menambahkan API Lifecycle.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 metode when* yang ada karena tidak mengizinkan dijalankannya kode penangguhan dan tidak menggunakan dispatcher khusus. (aosp/1326081)
  • ViewTree API: API ViewTreeLifecycleOwner.get(View) dan ViewTreeViewModelStoreOwner.get(View) baru memungkinkan Anda mengambil masing-masing LifecycleOwner dan ViewModelStoreOwner di dalamnya, dengan mempertimbangkan instance View. Anda harus mengupgrade ke Activity 1.2.0 dan Fragment 1.3.0, serta AppCompat 1.3.0-alpha01 atau yang lebih tinggi agar dapat mengisinya dengan benar. Ekstensi Kotlin findViewTreeLifecycleOwner dan findViewTreeViewModelStoreOwner masing-masing tersedia di lifecycle-runtime-ktx dan lifecycle-viewmodel-ktx.
  • Penghentian ekstensi Kotlin LiveData.observe(): Ekstensi Kotlin LiveData.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 dengan setSavedStateProvider() selain kunci yang digunakan dengan set() dan getLiveData(). (aosp/1517919, b/174713653)

Kontribusi Eksternal

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

Perubahan Dokumentasi

  • Builder liveData dan dokumen asLiveData() 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) ke Lifecycle.Event untuk menghasilkan Event dengan mempertimbangkan State dan arah transisi. Menambahkan metode getTargetState() yang memberikan State yang akan menjadi tujuan transisi Lifecycle langsung setelah Event. (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 metode when* 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 objek LifecycleRegistry yang dimiliki oleh komponen Anda sendiri, Anda dapat secara eksplisit memilih tidak melakukan pemeriksaan dengan menggunakan LifecycleRegistry.createUnsafe(...), tetapi Anda harus memastikan bahwa sinkronisasi yang tepat diterapkan saat LifecycleRegistry ini diakses dari thread berbeda (Ie7280, b/137392809)

Perbaikan Bug

  • Memperbaiki error di NullSafeMutableLiveData. (b/159987480)
  • Memperbaiki ObsoleteLintCustomCheck untuk pemeriksaan Lint yang digabungkan dengan lifecycle-livedata-core-ktx (dan khususnya NullSafeMutableLiveData). (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 ke onActive() atau onInactive(). (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 nilai null ditetapkan pada MutableLiveData 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 memanggil setSavedStateProvider() untuk kunci tertentu, menyediakan SavedStateProvider yang akan mendapatkan callback ke saveState() saat SavedStateHandle diminta untuk menyimpan statusnya. (b/155106862)
  • ViewTreeViewModelStoreOwner.get(View) API yang baru memungkinkan Anda mengambil instance View berisi ViewModelStoreOwner. Anda harus melakukan upgrade ke Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05, dan AppCompat 1.3.0-alpha01 untuk mengisi ini dengan benar. Ekstensi Kotlin findViewModelStoreOwner() telah ditambahkan ke lifecycle-viewmodel-ktx. (aosp/1295522)

Perbaikan Bug

  • Memperbaiki masalah yang menyebabkan pemeriksaan Lint MutableLiveData yang dirilis dalam Lifecycle 2.3.0-alpha01 tidak dipublikasikan bersama artefak lifecycle-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 meneruskan Application null ke konstruktornya untuk kasus dukungan yang lebih baik jika salah satu tidak tersedia dan dukungan untuk AndroidViewModel 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 instance View berisi LifecycleOwner. Anda harus melakukan upgrade ke Activity1.2.0-alpha01 dan Fragment 1.3.0-alpha01 untuk mengisi ini dengan benar. Ekstensi Kotlin findViewTreeLifecycleOwner tersedia di lifecycle-runtime-ktx. (aosp/1182361, aosp/1182956)
  • Menambahkan pemeriksaan Lint baru yang memberi Anda peringatan saat menetapkan nilai null pada MutableLiveData yang telah ditetapkan di Kotlin sebagai non-null. Opsi ini tersedia saat menggunakan artefak livedata-core-ktx atau livedata-ktx. (aosp/1154723, aosp/1159092)
  • Artefak lifecycle-runtime-testing baru tersedia, yang menyediakan TestLifecycleOwner yang menerapkan LifecycleOwner dan menyediakan Lifecycle 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 meneruskan Fragment atau FragmentActivity ke konstruktor ViewModelProvider(ViewModelStoreOwner) baru untuk mendapatkan fungsionalitas yang sama saat menggunakan Fragment 1.2.0.
  • Penghentian Artefak lifecycle-extensions: Dengan penghentian ViewModelProviders.of() di atas, rilis ini menandai penghentian API terakhir di lifecycle-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 menggunakan LifecycleService dan lifecycle-process jika menggunakan ProcessLifecycleOwner), bukan lifecycle-extensions, karena tidak akan ada rilis 2.3.0 selanjutnya untuk lifecycle-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 menggunakan LifecycleEventObserver.

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 di ViewModelStore, kemudian diminta dengan setelan pabrik default.
  • Memperbaiki penggunaan Dispatchers.Main.immediate dalam launchWhenCreated 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 atas Dispatchers.Main, bukan Dispatchers.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 dan LifecycleOwner aktivitas beralih ke dimulai dan dilanjutkan di perangkat Android 10. (aosp/1128132)
  • Memperbaiki regresi yang diperkenalkan pada Lifecycle 2.2.0-alpha05 yang menyebabkan NullPointerException ketika menggunakan lifecycle-process versi 2.0.0 atau 2.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 implementasi liveData yang mendasari kini menggunakan Dispatchers.Main.immediate, bukan Dispatchers.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

Perubahan API

  • ViewModelProviders.of() tidak digunakan lagi. Anda dapat meneruskan Fragment atau FragmentActivity ke konstruktor ViewModelProvider(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 dengan LiveDataScope.latestValue yang akan melacak nilai yang dikeluarkan saat ini dari blok liveData.
  • Menambahkan overload baru ke builder liveData yang menerima parameter timeout sebagai jenis Duration

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 class ViewModel, dan factory yang disediakan secara default oleh Fragment dan AppCompatActivity akan memasukkan SavedStateHandle secara otomatis.
  • AbstractSavedStateViewModelFactory telah ditambahkan. Dengan demikian, Anda sekarang dapat membuat factory kustom untuk ViewModel dan memberinya akses ke SavedStateHandle.

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 menghasilkan IllegalStateException. (b/139093676)
  • Memperbaiki IllegalStateException saat menggunakan AbstractSavedStateViewModelFactory. (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 memperluas AbstractSavedStateViewModelFactory dan SavedStateHandle 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

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 menjadi SavedStateViewModelFactory.
  • AbstractSavedStateVMFactory diganti namanya menjadi AbstractSavedStateViewModelFactory.

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 factory SavedStateVMFactory viewmodel yang baru saja diperkenalkan, dan ViewModel Anda harus memiliki konstruktor yang menerima objek SavedStateHandle 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 class GenericLifecycleObserver tersembunyi.
  • Menambahkan ekstensi ktx untuk metode LiveData.observe dan metode Transformations.*.
  • Menambahkan Transformations.distinctUntilChanged, yang membuat objek LiveData baru yang tidak mengeluarkan nilai hingga nilai LiveData 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, inisialisasi ViewModel 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() dan by activityViewModels() telah diubah untuk mendukung ViewModelStore secara langsung, bukan hanya ViewModelStoreOwner. (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 selain ViewModelProvider.Factory tidak ditulis dengan baik dengan fitur-fitur baru sebagai delegasi properti di Kotlin by viewmodels {}. (aosp/914133)

Versi 2.1.0-alpha02

30 Januari 2019

androidx.lifecycle 2.1.0-alpha02 dirilis.

Perubahan API

  • LifecycleRegistry kini menyertakan metode setCurrentState() untuk menggantikan metode setState() yang sekarang sudah tidak digunakan lagi. (aosp/880715)

Perbaikan bug

  • Memperbaiki masalah dengan instance ViewModel palsu yang mengalami error jika ViewModelStore 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 class GenericLifecycleObserver tersembunyi.
  • Menambahkan ekstensi ktx untuk metode LiveData.observe dan metode Transformations.*.
  • Metode Transformations.distinctUntilChanged telah ditambahkan. Penambahan ini membuat objek LiveData 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 menerima key dan Class dalam metode create.

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 dan LifecycleFragment yang sudah tidak digunakan lagi sekarang telah dihapus. Harap gunakan FragmentActivity, AppCompatActivity, atau dukung Fragment.
  • Anotasi @NonNull telah ditambahkan ke ViewModelProviders dan ViewModelStores
  • Konstruktor ViewModelProviders tidak digunakan lagi. Harap gunakan metode statisnya secara langsung
  • ViewModelProviders.DefaultFactory tidak digunakan lagi - harap gunakan ViewModelProvider.AndroidViewModelFactory
  • Metode ViewModelProvider.AndroidViewModelFactory.getInstance(Application) statis telah ditambahkan untuk mengambil Factory statis yang cocok untuk membuat instance ViewModel dan AndroidViewModel.