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 Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
lifecycle-* 2.4.0 - - -
lifecycle-viewmodel-compose 2.4.0 - - -
Library ini terakhir diperbarui pada: 27 Oktober 2021

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.4.0"
        def arch_version = "2.1.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"

        // 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"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.4.0"
        val arch_version = "2.1.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")

        // 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")
    }
    

Java

Groovy

    dependencies {
        def lifecycle_version = "2.4.0"
        def arch_version = "2.1.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"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.4.0"
        val arch_version = "2.1.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")
    }
    

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.4

Versi 2.4.0

27 Oktober 2021

androidx.lifecycle:lifecycle-*:2.4.0 dirilis. Versi 2.4.0 berisi commit berikut.

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. ViewModelProvider.Factory.create method tidak lagi mengizinkan nullable generik.
  • Coroutine API baru ditambahkan ke androidx.lifecycle:lifecycle-runtime-ktx:
  • Lifecycle.repeatOnLifecycle, API yang mengeksekusi blok kode di coroutine jika Siklus Proses 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 Alur 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 berikut ini.

Versi 2.4.0-beta01

15 September 2021

androidx.lifecycle:lifecycle-*:2.4.0-beta01 dirilis. Versi 2.4.0-beta01 berisi commit berikut 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 berikut ini.

Perubahan API

  • Perubahan yang dapat menyebabkan gangguan sumber: ViewModelProvider telah ditulis ulang di Kotlin. Metode ViewModelProvider.Factory.create sekarang lebih lama 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 berikut.

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 berikut 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 Alur 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 berikut.

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 berikut.

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 berikut.

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 berikut 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 berikut 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 berikut 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 berikut ini.

Fitur Baru

  • viewModel() yang dapat dikomposisi 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 berikut 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 berikut.

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 pengamat dari thread non-utama berakibat pada error yang sulit ditemukan dalam waktu proses. 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 menjalankan 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 berikut.

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 berikut 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 berikut 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 berikut.

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 menjalankan 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 pengamat dari thread non-utama berakibat pada error yang sulit ditemukan dalam waktu proses. 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 berikut.

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 berikut.

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 berikut.

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 berikut.

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 start cold 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 berikut.

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 berikut.

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 berikut.

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 berikut.

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 berikut.

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 berikut.

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 berikut.

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 berikut.

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 berikut.

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 berikut.

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 berikut.

Perubahan dependensi

  • Kini bergantung pada siklus proses 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 berikut.

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 berikut.

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 berikut.

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.