Savedstate

Menuliskan komponen pluggable yang menyimpan status UI saat proses berhenti, dan memulihkannya saat proses dimulai ulang.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
11 Desember 2024 1.2.1 - - 1.3.0-alpha06

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada SavedState, 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:

Groovy

dependencies {
    // Java language implementation
    implementation "androidx.savedstate:savedstate:1.2.1"

    // Kotlin
    implementation "androidx.savedstate:savedstate-ktx:1.2.1"
}

Kotlin

dependencies {
    // Java language implementation
    implementation("androidx.savedstate:savedstate:1.2.1")

    // Kotlin
    implementation("androidx.savedstate:savedstate-ktx:1.2.1")
}

Untuk 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 1.3

Versi 1.3.0-alpha06

11 Desember 2024

androidx.savedstate:savedstate-*:1.3.0-alpha06 dirilis. Versi 1.3.0-alpha06 berisi commit ini.

Fitur Baru

  • SavedState KMP kini mendukung: IBinder, Size, SizeF, Array<Parcelable>, SparseArray<Parcelable>, dan Serializable (Android). (I1ba94, b/334076622)
  • Tambahkan instance KSerializer yang dapat digunakan untuk mengenkode/mendekode jenis Java dan Android yang didukung oleh Bundle dengan menandai kolom yang relevan di class Anda dengan @Serializable(with = ParcelableSerializer::class). (I8c10f, I28caf, b/376026712)
  • Instance SavedStateRegistryOwner yang diambil melalui findViewTreeSavedStateRegistryOwner kini dapat di-resolve melalui induk tampilan yang tidak terhubung, seperti ViewOverlay. Lihat catatan rilis core atau dokumentasi di ViewTree.setViewTreeDisjointParent untuk informasi selengkapnya tentang induk tampilan yang tidak terhubung. (Iccb33)

Perubahan API

  • Membuat penamaan dan pengaturan paket lebih konsisten dengan SavedStateRegistryOwnerDelegate (I8c135, b/376026744)

Versi 1.3.0-alpha05

13 November 2024

androidx.savedstate:savedstate-*:1.3.0-alpha05 dirilis. Versi 1.3.0-alpha05 berisi commit ini.

Dukungan Serialisasi KotlinX

  • SavedState kini menyertakan dukungan KotlinX Serialization. Anda dapat mengonversi class yang dianotasi dengan @Serializable menjadi SavedState menggunakan metode encodeToSavedState dan decodeFromSavedState. SavedState yang ditampilkan adalah Bundle reguler di Android dan dapat digunakan oleh API apa pun yang menerima Bundle. (I6f59f, b/374102924)

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    fun main() {
        val person = Person("John", "Doe")
        val encoded: SavedState = encodeToSavedState(person)
        val decoded: Person = decodeFromSavedState(encoded)
    }
    
  • Kami juga telah menyertakan saved, delegasi properti lambat, untuk memudahkan penyimpanan class @Serializable di SavedStateRegistryOwner (misalnya, ComponentActivity, Fragment, dll.) dan membuat class tersebut otomatis dipulihkan di seluruh proses penghentian dan pembuatan ulang. Perhatikan bahwa delegasi saved lambat dan tidak akan memanggil lambda init atau menyimpan apa pun ke SavedStateRegistry hingga diakses. (I66739, b/376027806)

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyActivity : ComponentActivity() {
        var person by saved { Person("John", "Doe") }
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            this.person = Person("Jane", "Doe")
        }
    }
    
  • Ada delegasi properti saved serupa untuk SavedStateHandle yang ditambahkan di Siklus proses 2.9.0-alpha07.

Perubahan API

  • Menambahkan toMap ke SavedState, sehingga SavedState dapat dikonversi ke Map reguler (salinan dangkal). (I487b9, b/334076622)
  • SavedState KMP kini mendukung array. (Ic0552, b/334076622)

Versi 1.3.0-alpha04

30 Oktober 2024

androidx.savedstate:savedstate-*:1.3.0-alpha04 dirilis. Versi 1.3.0-alpha04 berisi commit ini.

Perubahan API

Versi 1.3.0-alpha03

16 Oktober 2024

androidx.savedstate:savedstate-*:1.3.0-alpha03 dirilis tanpa perubahan penting. Versi 1.3.0-alpha03 berisi commit ini.

Versi 1.3.0-alpha02

2 Oktober 2024

androidx.savedstate:savedstate-*:1.3.0-alpha02 dirilis. Versi 1.3.0-alpha02 berisi commit ini.

Multiplatform Kotlin

  • Modul SavedState kini kompatibel dengan KMP. Platform yang didukung kini mencakup lingkungan desktop Android, iOS, Linux, Mac, dan JVM. (I26305, b/334076622)

Fitur Baru

  • Memperkenalkan jenis buram SavedState sebagai abstraksi untuk memberikan cara yang konsisten untuk menyimpan dan memulihkan status aplikasi di KMP. Ini mencakup SavedStateReader dan SavedStateWriter untuk mengubah status yang akan disimpan. Di Android, SavedState adalah alias jenis untuk Bundle, yang memastikan kompatibilitas biner dan memfasilitasi migrasi API yang ada ke set sumber umum. Di platform lain, SavedState adalah instance Map<String, Any>. (I18575, b/334076622)
  // Create a new SavedState object using the savedState DSL:
  val savedState = savedState {
    putInt("currentPage", 1)
    putString("filter", "favorites")
  }

  // Read from a SavedState object
  val currentPage = savedState.read { getInt("currentPage") }

  // Edit an existing SavedState object
  savedState.write {
    remove("currentPage")
  }

Perubahan API

  • SavedStateRegistry dan SavedStateRegistryController kini kompatibel dengan KMP. (Id7bb8, b/334076622)
  • SavedState, SavedStateWriter, dan SavedStateReader kini kompatibel dengan KMP. (I26305, b/334076622)

Versi 1.3.0-alpha01

7 Agustus 2024

androidx.savedstate:savedstate:1.3.0-alpha01 dan androidx.savedstate:savedstate-ktx:1.3.0-alpha01 dirilis. Versi 1.3.0-alpha01 berisi commit ini.

Perubahan API

  • Ekstensi kotlin savedstate-ktx kini telah dipindahkan ke modul savedstate dasar. (I1cc18, b/274803094)

Catatan

  • Memperbarui compileSdk menjadi 35 (5dc41be)

Versi 1.2.1

Versi 1.2.1

22 Maret 2023

androidx.savedstate:savedstate:1.2.1 dan androidx.savedstate:savedstate-ktx:1.2.1 dirilis. Versi 1.2.1 berisi commit ini.

Update Dependensi

Versi 1.2.0

Versi 1.2.0

29 Juni 2022

androidx.savedstate:savedstate:1.2.0 dan androidx.savedstate:savedstate-ktx:1.2.0 dirilis. Versi 1.2.0 berisi commit ini.

Perubahan penting sejak 1.1.0

  • SavedStateRegistryController sekarang memungkinkan lampiran SavedStateRegistry awal melalui performAttach().
  • Anda kini dapat mengambil SavedStateProvider yang sebelumnya terdaftar dari SavedStateRegistry melalui getSavedStateProvider().
  • Library SavedState telah ditulis ulang di Kotlin.
    • Untuk SavedStateRegistryOwner, ini adalah perubahan sumber yang tidak kompatibel untuk class tersebut yang ditulis di Kotlin - Anda sekarang harus mengganti properti savedStateRegistry, bukan mengimplementasikan fungsi getSavedStateRegistry() sebelumnya.
    • Untuk ViewTreeSavedStateRegistryOwner, ini adalah perubahan yang tidak kompatibel dengan sumber untuk class tersebut yang ditulis di Kotlin - Anda sekarang harus secara langsung mengimpor dan menggunakan metode ekstensi Kotlin di View dari androidx.savedstate.setViewTreeSavedStateRegistryOwner dan androidx.savedstate.findViewTreeSavedStateRegistryOwner untuk menetapkan dan menemukan pemilik yang ditetapkan sebelumnya. Ini menggantikan API savedstate-ktx dari findViewTreeSavedStateRegistryOwner.

Perubahan Perilaku

  • SavedStateRegistry tidak lagi menyimpan Paket kosong jika tidak ada status yang akan disimpan.

Versi 1.2.0-rc01

11 Mei 2022

androidx.savedstate:savedstate:1.2.0-rc01 dan androidx.savedstate:savedstate-ktx:1.2.0-rc01 dirilis. Versi 1.2.0-rc01 berisi commit ini.

Perubahan Dokumentasi

  • Kdocs SavedStateRegistryOwner telah diupdate untuk memperjelas tanggung jawab dan kontrak yang dimiliki pemilik terkait cara menerapkan antarmuka atau kapan mereka harus memanggil metode di SavedStateRegistryController. (Iefc95, b/228887344)

Versi 1.2.0-beta01

20 April 2022

androidx.savedstate:savedstate:1.2.0-beta01 dan androidx.savedstate:savedstate-ktx:1.2.0-beta01 dirilis. Versi 1.2.0-beta01 berisi commit ini.

Perubahan API

  • Class SavedStateRegistry dan ViewTreeSavedStateRegistryOwner telah ditulis ulang dalam Kotlin. Untuk ViewTreeSavedStateRegistryOwner, ini adalah perubahan yang tidak kompatibel dengan sumber untuk class tersebut yang ditulis di Kotlin - Anda sekarang harus secara langsung mengimpor dan menggunakan metode ekstensi Kotlin di View dari androidx.savedstate.setViewTreeSavedStateRegistryOwner dan androidx.savedstate.findViewTreeSavedStateRegistryOwner untuk menetapkan dan menemukan pemilik yang ditetapkan sebelumnya. Ini menggantikan API savedstate-ktx dari findViewTreeSavedStateRegistryOwner. Ini kompatibel dengan biner dan tetap kompatibel dengan sumber untuk implementasi yang ditulis dalam bahasa pemrograman Java. (b/220191285)

Versi 1.2.0-alpha02

6 April 2022

androidx.savedstate:savedstate:1.2.0-alpha02 dan androidx.savedstate:savedstate-ktx:1.2.0-alpha02 dirilis. Versi 1.2.0-alpha02 berisi commit ini.

Fitur Baru

  • Anda kini dapat mengambil SavedStateProvider yang sebelumnya terdaftar dari SavedStateRegistry melalui getSavedStateProvider(). (I7ea47, b/215406268)

Perubahan API

  • Class SavedStateRegistryOwner, SavedStateRegistryController, dan Recreator telah ditulis ulang dalam Kotlin. Untuk SavedStateRegistryOwner, ini adalah perubahan sumber yang tidak kompatibel untuk class tersebut yang ditulis di Kotlin - Anda sekarang harus mengganti properti savedStateRegistry, bukan mengimplementasikan fungsi getSavedStateRegistry() sebelumnya. Ini kompatibel dengan biner dan kompatibel dengan sumber untuk implementasi yang ditulis dalam bahasa pemrograman Java. (b/220191285)

Versi 1.2.0-alpha01

26 Januari 2022

androidx.savedstate:savedstate:1.2.0-alpha01 dan androidx.savedstate:savedstate-ktx:1.2.0-alpha01 dirilis. Versi 1.2.0-alpha01 berisi commit ini.

Fitur Baru

  • SavedStateRegistryController sekarang memungkinkan lampiran SavedStateRegistry awal melalui performAttach(). (Ice4bf)

Perubahan Perilaku

  • SavedStateRegistry tidak lagi menyimpan Paket kosong jika tidak ada status yang akan disimpan. (aosp/1896865, b/203457956)

Versi 1.1.0

Versi 1.1.0

10 Februari 2021

androidx.savedstate:savedstate:1.1.0 dan androidx.savedstate:savedstate-ktx:1.1.0 dirilis. Versi 1.1.0 berisi commit ini.

Perubahan utama sejak versi 1.0.0

  • ViewTreeSavedStateRegistryOwner API: ViewTreeSavedStateRegistryOwner.get(View) API yang baru memungkinkan Anda mengambil instance View yang berisi SavedStateRegistry. Anda harus melakukan upgrade ke Activity 1.2.0, Fragment 1.3.0, dan AppCompat 1.3.0-alpha01 atau yang lebih tinggi untuk mengisi ini dengan benar.
  • Artefak savedstate-ktx: Artefak savedstate-ktx baru telah ditambahkan dengan ekstensi Kotlin findViewTreeSavedStateRegistryOwner() untuk digunakan dengan ViewTreeSavedStateRegistryOwner.

Versi 1.1.0-rc01

16 Desember 2020

androidx.savedstate:savedstate:1.1.0-rc01 dan androidx.savedstate:savedstate-ktx:1.1.0-rc01 dirilis tanpa perubahan sejak 1.1.0-beta01. Versi 1.1.0-rc01 berisi commit ini.

Versi 1.1.0-beta01

1 Oktober 2020

androidx.savedstate:savedstate:1.1.0-beta01 dan androidx.savedstate:savedstate-ktx:1.1.0-beta01 dirilis tanpa perubahan sejak 1.1.0-alpha01. Versi 1.1.0-beta01 berisi commit ini.

Versi 1.1.0-alpha01

20 Mei 2020

androidx.savedstate:savedstate:1.1.0-alpha01 dan androidx.savedstate:savedstate-ktx:1.1.0-alpha01 dirilis. Versi 1.1.0-alpha01 berisi commit ini.

Fitur Baru

  • ViewTreeSavedStateRegistryOwner.get(View) API yang baru memungkinkan Anda mengambil instance View berisi SavedStateRegistry. 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. (aosp/1298679)
  • Artefak savedstate-ktx baru telah ditambahkan dengan ekstensi Kotlin findViewTreeSavedStateRegistryOwner() untuk digunakan dengan ViewTreeSavedStateRegistryOwner. (aosp/1299434)

Versi 1.0.0

Versi 1.0.0

5 September 2019

androidx.savedstate:savedstate:1.0.0 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur utama SavedState 1.0.0

androidx.savedstate lulus ke rilis stabil. Ini adalah sekumpulan API yang memungkinkan developer memasukkan komponen ke proses restore/saveInstanceState. Titik masuk utama API ini adalah SavedStateRegistry, yang menyediakan cara untuk mengambil status yang telah disimpan sebelumnya menggunakan consumeRestoredStateForKey dan mendaftarkan callback ke registerSavedStateProvider untuk memberikan status tersimpan saat sistem memintanya.

Versi 1.0.0-rc01

2 Juli 2019

androidx.savedstate:savedstate:1.0.0-rc01 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perbaikan bug

  • Memperbaiki aturan proguard yang salah. (b/132655499)

Versi 1.0.0-beta01

7 Mei 2019

androidx.savedstate:savedstate:1.0.0-beta01 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Versi 1.0.0-alpha02

13 Maret 2019

androidx.savedstate:savedstate:1.0.0-alpha02 dirilis. androidx.savedstate:savedstate menggabungkan artefak androidx.savedstate:savedstate-bundle dan androidx.savedstate:savedstate-common menjadi satu artefak, karena perlunya menyederhanakan infrastruktur savedstate dan menghapus generik dari SavedStateRegistry. Dengan demikian, modul terpisah tidak diperlukan.

Daftar lengkap commit yang disertakan dalam versi ini dapat ditemukan di sini.

Fitur baru

  • SavedStateRegistry.runOnNextRecreaction(Class<? extends AutoRecreated> clazz ) ditambahkan. Instance class yang ditentukan akan dibuat dan metode AutoRecreated.onRecreated akan dijalankan saat komponen yang memilikinya dimulai ulang.

Perubahan API

  • Generik dihapus dari SavedStateRegistry<T>
  • AbstractSavedStateRegistry & BundlableSavedStateRegistry dihapus, sebagai gantinya, gunakan SavedStateRegistry sederhana
  • BundleSavedStateRegistryOwner diganti nama menjadi SavedStateRegistryOwner

Versi 1.0.0-alpha01

17 Desember 2018

Ini adalah rilis pertama SavedState.

Fitur baru

androidx.savedstate adalah sekumpulan API alfa baru yang memungkinkan developer memasukkan komponen ke proses restore/saveInstanceState. Titik masuk utama API ini adalah SavedStateRegistry<T>, yang menyediakan cara untuk mengambil savedstate sebelumnya menggunakan consumeRestoredStateForKey dan mendaftarkan callback ke registerSavedStateProvider untuk memberikan savedstate saat sistem memintanya.