Savedstate
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
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
สําหรับการแก้ไขสถานะที่จะบันทึก ใน AndroidSavedState
เป็นนามแฝงประเภทของ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
- ตอนนี้
SavedState
ขึ้นอยู่กับวงจร2.6.1
(c1f621)
เวอร์ชัน 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
คุณต้องอัปเกรดเป็น Activity1.2.0
, Fragment1.3.0
และ AppCompat1.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
คุณต้องอัปเกรดเป็น Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
และ AppCompat1.3.0-alpha01
เพื่อป้อนข้อมูลนี้อย่างถูกต้อง (aosp/1298679)- เพิ่มอาร์ติแฟกต์
savedstate-ktx
ใหม่ที่มีส่วนขยาย KotlinfindViewTreeSavedStateRegistryOwner()
สำหรับการทำงานกับ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
เพื่อระบุสถานะที่บันทึกไว้เมื่อระบบขอ