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.5.1 - - 2.6.0-alpha01
lifecycle-viewmodel-compose 2.5.1 - - 2.6.0-alpha01
Library ini terakhir diperbarui pada: 27 Juli 2022

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.6.0-alpha01"
        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"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.6.0-alpha01"
        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")

        // optional - Test helpers for Lifecycle runtime
        testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

Java

Groovy

    dependencies {
        def lifecycle_version = "2.6.0-alpha01"
        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"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.6.0-alpha01"
        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")

        // 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.6

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: CoroutineScope = 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 API getStateFlow() yang menampilkan Kotlin StateFlow 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.