Savedstate

เขียนคอมโพเนนต์แบบปลั๊กอินที่บันทึกสถานะ UI เมื่อกระบวนการสิ้นสุดลง และกู้คืนสถานะเมื่อกระบวนการเริ่มต้นใหม่
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า เวอร์ชันอัลฟ่า
13 พฤศจิกายน 2024 1.2.1 - - 1.3.0-alpha05

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มการพึ่งพา SavedState คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google

เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับแอปหรือโมดูล

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพิงบิวด์

ความคิดเห็น

ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว

สร้างปัญหาใหม่

ดูข้อมูลเพิ่มเติมในเอกสารประกอบของเครื่องมือติดตามปัญหา

เวอร์ชัน 1.3

เวอร์ชัน 1.3.0-alpha05

13 พฤศจิกายน 2024

androidx.savedstate:savedstate-*:1.3.0-alpha05 ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-alpha05 มีการคอมมิตเหล่านี้

การรองรับการแปลงข้อมูลเป็นอนุกรมของ KotlinX

  • ตอนนี้ SavedState รองรับการแปลงข้อมูล KotlinX แล้ว คุณสามารถแปลงคลาสที่มีคำอธิบายประกอบ @Serializable เป็น SavedState ได้โดยใช้เมธอด encodeToSavedState และ decodeFromSavedState SavedState ที่แสดงผลคือ Bundle ปกติใน Android และ API ใดก็ตามที่ยอมรับ 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)
    }
    
  • นอกจากนี้ เรายังมี saved ซึ่งเป็นตัวรับช่วงพร็อพเพอร์ตี้แบบ Lazy เพื่อช่วยให้คุณจัดเก็บคลาส @Serializable ใน SavedStateRegistryOwner ได้อย่างง่ายดาย (เช่น ComponentActivity, Fragment ฯลฯ) และระบบจะกู้คืนคลาสเหล่านั้นโดยอัตโนมัติเมื่อกระบวนการสิ้นสุดลงและสร้างใหม่ โปรดทราบว่า saved จะเป็น Delegate แบบ Lazy และไม่เรียกใช้ Lambda ของ init หรือบันทึกข้อมูลใดๆ ลงใน SavedStateRegistry จนกว่าจะมีการเข้าถึง (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")
        }
    }
    
  • มีการมอบสิทธิ์พร็อพเพอร์ตี้ saved ที่คล้ายกันสําหรับ SavedStateHandle ที่เพิ่มไว้ในวงจร 2.9.0-alpha07

การเปลี่ยนแปลง API

  • เพิ่ม toMap ลงใน SavedState ซึ่งจะอนุญาตให้แปลง SavedState ใดก็ได้เป็น Map ปกติ (การคัดลอกแบบไม่เจาะลึก) (I487b9, b/334076622)
  • SavedState KMP รองรับอาร์เรย์แล้ว (Ic0552, b/334076622)

เวอร์ชัน 1.3.0-alpha04

30 ตุลาคม 2024

androidx.savedstate:savedstate-*:1.3.0-alpha04 ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-alpha04 มีการคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ SavedState KMP รองรับ Char แล้ว (I9ac2f, b/334076622)
  • เพิ่ม putNull และ isNull ลงใน KMP ของ SavedState (Iea71d, b/334076622)
  • เพิ่มพารามิเตอร์savedStateเริ่มต้นเพิ่มเติมที่รองรับMap<String, Any>เริ่มต้น (I9b37d, b/334076622)
  • ตอนนี้ KMP ของ SavedState รองรับการเปรียบเทียบ contentDeepEquals แล้ว (Ia515c, b/334076622)
  • ตอนนี้ SavedState KMP รองรับ Long แล้ว (I4c180, b/334076622)

เวอร์ชัน 1.3.0-alpha03

16 ตุลาคม 2024

androidx.savedstate:savedstate-*:1.3.0-alpha03 เผยแพร่โดยไม่มีการเปลี่ยนแปลงที่สำคัญ เวอร์ชัน 1.3.0-alpha03 มีการคอมมิตเหล่านี้

เวอร์ชัน 1.3.0-alpha02

2 ตุลาคม 2024

androidx.savedstate:savedstate-*:1.3.0-alpha02 ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-alpha02 มีการคอมมิตเหล่านี้

Kotlin Multiplatform

  • ตอนนี้โมดูล SavedState ใช้ได้กับ KMP แล้ว แพลตฟอร์มที่รองรับตอนนี้มีสภาพแวดล้อมเดสก์ท็อปของ Android, iOS, Linux, Mac และ JVM (I26305, b/334076622)

ฟีเจอร์ใหม่

  • แนะนำSavedState ประเภทแบบทึบเป็นนามธรรมเพื่อให้มีวิธีบันทึกและกู้คืนสถานะแอปพลิเคชันใน KMP ที่สอดคล้องกัน ซึ่งประกอบด้วย SavedStateReader และ SavedStateWriter สําหรับการแก้ไขสถานะที่จะบันทึก ใน Android SavedState เป็นนามแฝงประเภทของ Bundle ซึ่งช่วยให้มั่นใจว่าไบนารีจะเข้ากันได้และอำนวยความสะดวกในการย้ายข้อมูล API ที่มีอยู่ไปยังชุดแหล่งที่มาทั่วไป ในแพลตฟอร์มอื่นๆ SavedState คืออินสแตนซ์ 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")
  }

การเปลี่ยนแปลง API

  • ตอนนี้ SavedStateRegistry และ SavedStateRegistryController ใช้งานร่วมกับ KMP ได้แล้ว (Id7bb8, b/334076622)
  • ตอนนี้ SavedState, SavedStateWriter และ SavedStateReader ใช้งานร่วมกับ KMP ได้แล้ว (I26305, b/334076622)

เวอร์ชัน 1.3.0-alpha01

7 สิงหาคม 2024

androidx.savedstate:savedstate:1.3.0-alpha01 และ androidx.savedstate:savedstate-ktx:1.3.0-alpha01 เผยแพร่แล้ว เวอร์ชัน 1.3.0-alpha01 มีการคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้เราได้ย้ายส่วนขยาย savedstate-ktx ของ Kotlin ไปยังโมดูล SavedState พื้นฐานแล้ว (I1cc18, b/274803094)

หมายเหตุ

  • อัปเดต compileSdk เป็น 35 (5dc41be)

เวอร์ชัน 1.2.1

เวอร์ชัน 1.2.1

22 มีนาคม 2023

androidx.savedstate:savedstate:1.2.1 และ androidx.savedstate:savedstate-ktx:1.2.1 เผยแพร่แล้ว เวอร์ชัน 1.2.1 มีคอมมิตเหล่านี้

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 1.2.0

เวอร์ชัน 1.2.0

29 มิถุนายน 2022

androidx.savedstate:savedstate:1.2.0 และ androidx.savedstate:savedstate-ktx:1.2.0 เผยแพร่แล้ว เวอร์ชัน 1.2.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สําคัญตั้งแต่ 1.1.0

  • ตอนนี้ SavedStateRegistryController อนุญาตให้แนบ SavedStateRegistry ล่วงหน้าผ่าน performAttach() ได้แล้ว
  • ตอนนี้คุณสามารถเรียกข้อมูล SavedStateProvider ที่จดทะเบียนไว้ก่อนหน้านี้จาก SavedStateRegistry ผ่าน getSavedStateProvider() ได้แล้ว
  • ไลบรารี SavedState ได้รับการเขียนขึ้นใหม่ด้วย Kotlin
    • สำหรับ SavedStateRegistryOwner นี่เป็นการเปลี่ยนแปลงที่เข้ากันไม่ได้กับแหล่งที่มาสำหรับคลาสเหล่านั้นที่เขียนด้วย Kotlin ตอนนี้คุณต้องลบล้างพร็อพเพอร์ตี้ savedStateRegistry แทนที่จะใช้ฟังก์ชัน getSavedStateRegistry() ก่อนหน้า
    • สำหรับ ViewTreeSavedStateRegistryOwner นี่เป็นการเปลี่ยนแปลงที่เข้ากันไม่ได้กับแหล่งที่มาสำหรับคลาสเหล่านั้นที่เขียนด้วย Kotlin ตอนนี้คุณต้องนำเข้าและใช้เมธอดส่วนขยาย Kotlin ใน View ของ androidx.savedstate.setViewTreeSavedStateRegistryOwner และ androidx.savedstate.findViewTreeSavedStateRegistryOwner โดยตรงเพื่อตั้งค่าและค้นหาเจ้าของที่ตั้งไว้ก่อนหน้านี้ ซึ่งมาแทนที่ savedstate-ktx API ของ findViewTreeSavedStateRegistryOwner

การเปลี่ยนแปลงลักษณะการทำงาน

  • SavedStateRegistry จะไม่บันทึก Bundle ว่างเปล่าอีกต่อไปหากไม่มีสถานะที่จะบันทึก

เวอร์ชัน 1.2.0-rc01

11 พฤษภาคม 2022

androidx.savedstate:savedstate:1.2.0-rc01 และ androidx.savedstate:savedstate-ktx:1.2.0-rc01 เผยแพร่แล้ว เวอร์ชัน 1.2.0-rc01 มีการคอมมิตเหล่านี้

การเปลี่ยนแปลงเอกสารประกอบ

  • เราได้อัปเดต Kdocs ของ SavedStateRegistryOwner เพื่อชี้แจงความรับผิดชอบและสัญญาที่เจ้าของมีเกี่ยวกับวิธีใช้อินเทอร์เฟซหรือกรณีที่ควรเรียกใช้เมธอดใน SavedStateRegistryController (Iefc95, b/228887344)

เวอร์ชัน 1.2.0-beta01

20 เมษายน 2022

androidx.savedstate:savedstate:1.2.0-beta01 และ androidx.savedstate:savedstate-ktx:1.2.0-beta01 เผยแพร่แล้ว เวอร์ชัน 1.2.0-beta01 มีการคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • คลาส SavedStateRegistry และ ViewTreeSavedStateRegistryOwner ได้รับการเขียนขึ้นใหม่ใน Kotlin สำหรับ ViewTreeSavedStateRegistryOwner นี่เป็นการเปลี่ยนแปลงที่เข้ากันไม่ได้กับแหล่งที่มาสำหรับคลาสเหล่านั้นที่เขียนด้วย Kotlin ตอนนี้คุณต้องนำเข้าและใช้เมธอดส่วนขยาย Kotlin ใน View ของ androidx.savedstate.setViewTreeSavedStateRegistryOwner และ androidx.savedstate.findViewTreeSavedStateRegistryOwner โดยตรงเพื่อตั้งค่าและค้นหาเจ้าของที่ตั้งไว้ก่อนหน้านี้ ซึ่งมาแทนที่ savedstate-ktx API ของ findViewTreeSavedStateRegistryOwner เวอร์ชันนี้เข้ากันได้กับไบนารีและยังคงเข้ากันได้กับซอร์สโค้ดสําหรับการใช้งานที่เขียนขึ้นในภาษาโปรแกรม Java (b/220191285)

เวอร์ชัน 1.2.0-alpha02

6 เมษายน 2022

androidx.savedstate:savedstate:1.2.0-alpha02 และ androidx.savedstate:savedstate-ktx:1.2.0-alpha02 เผยแพร่แล้ว เวอร์ชัน 1.2.0-alpha02 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้คุณสามารถเรียกข้อมูล SavedStateProvider ที่จดทะเบียนไว้ก่อนหน้านี้จาก SavedStateRegistry ผ่าน getSavedStateProvider() ได้แล้ว (I7ea47, b/215406268)

การเปลี่ยนแปลง API

  • คลาส SavedStateRegistryOwner, SavedStateRegistryController และ Recreator ได้รับการเขียนขึ้นใหม่ใน Kotlin สำหรับ SavedStateRegistryOwner นี่เป็นการเปลี่ยนแปลงที่เข้ากันไม่ได้กับแหล่งที่มาสำหรับคลาสเหล่านั้นที่เขียนด้วย Kotlin ตอนนี้คุณต้องลบล้างพร็อพเพอร์ตี้ savedStateRegistry แทนที่จะใช้ฟังก์ชัน getSavedStateRegistry() ก่อนหน้า ไฟล์นี้เข้ากันได้กับไบนารีและซอร์สโค้ดสําหรับการใช้งานที่เขียนขึ้นในภาษาโปรแกรม Java (b/220191285)

เวอร์ชัน 1.2.0-alpha01

26 มกราคม 2022

androidx.savedstate:savedstate:1.2.0-alpha01 และ androidx.savedstate:savedstate-ktx:1.2.0-alpha01 เผยแพร่แล้ว เวอร์ชัน 1.2.0-alpha01 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ SavedStateRegistryController อนุญาตให้แนบ SavedStateRegistry ล่วงหน้าผ่าน performAttach() แล้ว (Ice4bf)

การเปลี่ยนแปลงลักษณะการทำงาน

  • SavedStateRegistry จะไม่บันทึก Bundle ว่างเปล่าอีกต่อไปหากไม่มีสถานะที่จะบันทึก (aosp/1896865, b/203457956)

เวอร์ชัน 1.1.0

เวอร์ชัน 1.1.0

10 กุมภาพันธ์ 2021

androidx.savedstate:savedstate:1.1.0 และ androidx.savedstate:savedstate-ktx:1.1.0 เผยแพร่แล้ว เวอร์ชัน 1.1.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.0.0

  • ViewTreeSavedStateRegistryOwner API: ViewTreeSavedStateRegistryOwner.get(View) API ใหม่ช่วยให้คุณดึงข้อมูล SavedStateRegistry ที่มีได้โดยระบุอินสแตนซ์ View คุณต้องอัปเกรดเป็น Activity 1.2.0, Fragment 1.3.0 และ AppCompat 1.3.0-alpha01 ขึ้นไปเพื่อป้อนข้อมูลนี้อย่างถูกต้อง
  • รายการต่างๆ ของ savedstate-ktx: เพิ่มรายการต่างๆ ของ savedstate-ktx รายการใหม่พร้อมส่วนขยาย findViewTreeSavedStateRegistryOwner() Kotlin สำหรับใช้งานกับ ViewTreeSavedStateRegistryOwner

เวอร์ชัน 1.1.0-rc01

16 ธันวาคม 2020

androidx.savedstate:savedstate:1.1.0-rc01 และ androidx.savedstate:savedstate-ktx:1.1.0-rc01 เผยแพร่โดยไม่มีการเปลี่ยนแปลงตั้งแต่ 1.1.0-beta01 เวอร์ชัน 1.1.0-rc01 มีการคอมมิตเหล่านี้

เวอร์ชัน 1.1.0-beta01

1 ตุลาคม 2020

androidx.savedstate:savedstate:1.1.0-beta01 และ androidx.savedstate:savedstate-ktx:1.1.0-beta01 เผยแพร่โดยไม่มีการเปลี่ยนแปลงตั้งแต่ 1.1.0-alpha01 เวอร์ชัน 1.1.0-beta01 มีการคอมมิตเหล่านี้

เวอร์ชัน 1.1.0-alpha01

20 พฤษภาคม 2020

androidx.savedstate:savedstate:1.1.0-alpha01 และ androidx.savedstate:savedstate-ktx:1.1.0-alpha01 เผยแพร่แล้ว เวอร์ชัน 1.1.0-alpha01 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ViewTreeSavedStateRegistryOwner.get(View) API ใหม่ช่วยให้คุณดึงข้อมูล SavedStateRegistry ที่มีได้โดยระบุอินสแตนซ์ View คุณต้องอัปเกรดเป็น Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 และ AppCompat 1.3.0-alpha01 เพื่อป้อนข้อมูลนี้อย่างถูกต้อง (aosp/1298679)
  • เพิ่มอาร์ติแฟกต์ savedstate-ktx ใหม่ที่มีส่วนขยาย Kotlin findViewTreeSavedStateRegistryOwner() สำหรับการทำงานกับ ViewTreeSavedStateRegistryOwner (aosp/1299434)

เวอร์ชัน 1.0.0

เวอร์ชัน 1.0.0

5 กันยายน 2019

androidx.savedstate:savedstate:1.0.0 ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์หลักของ SavedState 1.0.0

androidx.savedstate เลื่อนขั้นเป็นเวอร์ชันเสถียร ชุด API นี้ช่วยให้นักพัฒนาแอปสามารถเสียบคอมโพเนนต์ลงในกระบวนการกู้คืน / saveInstanceState ได้ จุดแรกเข้าหลักของ API คือ SavedStateRegistry ซึ่งให้วิธีเรียกข้อมูลสถานะที่บันทึกไว้ก่อนหน้านี้โดยใช้ consumeRestoredStateForKey และลงทะเบียนการเรียกกลับไปยัง registerSavedStateProvider เพื่อระบุสถานะที่บันทึกไว้เมื่อระบบขอ

เวอร์ชัน 1.0.0-rc01

2 กรกฎาคม 2019

androidx.savedstate:savedstate:1.0.0-rc01 ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

แก้ไขข้อบกพร่อง

  • แก้ไขกฎ Proguard ที่ไม่ถูกต้อง (b/132655499)

เวอร์ชัน 1.0.0-beta01

7 พฤษภาคม 2019

androidx.savedstate:savedstate:1.0.0-beta01 ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

เวอร์ชัน 1.0.0-alpha02

13 มีนาคม 2019

androidx.savedstate:savedstate:1.0.0-alpha02 ได้รับการปล่อยแล้ว androidx.savedstate:savedstate รวมอาร์ติแฟกต์ androidx.savedstate:savedstate-bundle และ androidx.savedstate:savedstate-common เข้าด้วยกันเป็นอาร์ติแฟกต์เดียว เนื่องจากเราตัดสินใจที่จะลดความซับซ้อนของโครงสร้างพื้นฐานของ SavedState และนำอาร์ติแฟกต์ทั่วไปออกจาก SavedStateRegistry จึงไม่จำเป็นต้องมีโมดูลแยกต่างหาก

ดูรายการคอมมิตทั้งหมดที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • เพิ่ม SavedStateRegistry.runOnNextRecreaction(Class<? extends AutoRecreated> clazz ) แล้ว ระบบจะสร้างอินสแตนซ์ของคลาสที่ระบุและเรียกใช้เมธอด AutoRecreated.onRecreated เมื่อคอมโพเนนต์ที่เป็นเจ้าของรีสตาร์ท

การเปลี่ยนแปลง API

  • นำยาสามัญออกจาก SavedStateRegistry<T> แล้ว
  • AbstractSavedStateRegistry และ BundlableSavedStateRegistry ถูกนําออกแล้ว ให้ใช้ SavedStateRegistry แบบธรรมดาแทน
  • เปลี่ยนชื่อ BundleSavedStateRegistryOwner เป็น SavedStateRegistryOwner

เวอร์ชัน 1.0.0-alpha01

17 ธันวาคม 2018

นี่เป็นรุ่นแรกของ SavedState

ฟีเจอร์ใหม่

androidx.savedstate เป็น API เวอร์ชันอัลฟ่าชุดใหม่ที่ช่วยให้นักพัฒนาซอฟต์แวร์สามารถเสียบคอมโพเนนต์ลงในกระบวนการกู้คืน / saveInstanceState ได้ จุดแรกเข้าหลักของ API คือ SavedStateRegistry<T> ซึ่งให้วิธีเรียกข้อมูลสถานะที่บันทึกไว้ก่อนหน้านี้ผ่าน consumeRestoredStateForKey และลงทะเบียนการเรียกกลับไปยัง registerSavedStateProvider เพื่อระบุสถานะที่บันทึกไว้เมื่อระบบขอ