วงจร
ตารางนี้จะแสดงรายการอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.lifecycle
อาร์ติแฟกต์ | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
lifecycle-* | 2.9.0 | - | - | - |
lifecycle-viewmodel-compose | 2.9.0 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ของ Lifecycle คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูล
Kotlin
Groovy
dependencies { def lifecycle_version = "2.9.0" def arch_version = "2.2.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" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$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.9.0" val arch_version = "2.2.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") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$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.9.0" def arch_version = "2.2.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.9.0" val arch_version = "2.2.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") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 2.9
เวอร์ชัน 2.9.0
7 พฤษภาคม 2025
androidx.lifecycle:lifecycle-*:2.9.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.8.0
- เรามี
androidx.lifecycle:lifecycle-viewmodel-testing
อาร์ติแฟกต์ KMP ใหม่ซึ่งมีคลาสViewModelScenario
สำหรับการทดสอบViewModels
แบบแยกต่างหาก ซึ่งรองรับonCleared
และSavedStateHandle
รวมถึงการทดสอบการหยุดทำงานของกระบวนการและการสร้างใหม่ผ่านrecreate()
- เพิ่ม
getMutableStateFlow
ลงในSavedStateHandle
เพื่อแสดงผลMutableStateFlow
ฟังก์ชันใหม่นี้ใช้กับคีย์เท่านั้น และใช้กับgetLiveData
ไม่ได้ ระบบจะแสดงข้อยกเว้นหากคุณพยายามใช้ทั้ง 2 รายการเพื่อเข้าถึงสถานะเดียวกัน - ตอนนี้
CreationExtras
มีการโอเวอร์โหลดโอเปอเรเตอร์ที่คล้ายกับแผนที่เพื่อเปิดใช้การจัดการเนื้อหาตามแบบแผนใน Kotlin ซึ่งอนุญาตให้ใช้in
,+=
และ+
กับCreationExtras
การรองรับการแปลงข้อมูลเป็นอนุกรมของ KotlinX
เราได้เปิดตัว
saved
ซึ่งเป็นตัวรับช่วงพร็อพเพอร์ตี้แบบเลื่อนเวลาไว้เพื่อรองรับการแปลงข้อมูล KotlinX ที่เพิ่มเข้ามาใน SavedState1.3.0
ซึ่งช่วยให้จัดเก็บคลาส@Serializable
ในSavedStateHandle
ได้ง่าย และระบบจะกู้คืนคลาสเหล่านั้นโดยอัตโนมัติเมื่อกระบวนการสิ้นสุดลงและสร้างใหม่ โปรดทราบว่าsaved
จะเป็น Delegate แบบ Lazy และไม่เรียกใช้ Lambda ของinit
หรือบันทึกข้อมูลใดๆ ลงในSavedStateHandle
จนกว่าจะมีการเข้าถึง@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
Kotlin Multiplatform
- ตอนนี้โมดูล
lifecycle-testing
ใช้งานร่วมกับ KMP ได้ รวมถึง API อย่างเช่นTestLifecycleOwner
- ตอนนี้โมดูล
lifecycle-viewmodel-savedstate
ใช้งานร่วมกับ KMP ได้ รวมถึง API อย่างเช่นSavedStateHandle
androidx.compose.ui.platform.LocalLifecycleOwner
พร้อมใช้งานในชุดแหล่งที่มาทั่วไปแล้วNewInstanceFactory
พร้อมใช้งานบนเป้าหมาย JVM Desktop และ Android แล้ว
การเปลี่ยนแปลงลักษณะการทำงาน
- สถานะ
Lifecycle.DESTROYED
เป็นสถานะสุดท้าย และตอนนี้การพยายามย้ายLifecycle
จากสถานะดังกล่าวไปยังสถานะอื่นจะส่งผลให้เกิดIllegalStateException
SavedStateHandle
จะไม่รวมSavedStateProvider.saveState()
ใดๆ อีกต่อไปเมื่อBundle
ที่แสดงผลว่างเปล่า
เวอร์ชัน 2.9.0-rc01
23 เมษายน 2025
androidx.lifecycle:lifecycle-*:2.9.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-rc01 มีการคอมมิตเหล่านี้
เวอร์ชัน 2.9.0-beta01
9 เมษายน 2025
androidx.lifecycle:lifecycle-*:2.9.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
Lifecycle ViewModel Compose
ใช้การตั้งค่า Kotlin Multiplatform เดียวกันกับ Compose Runtime 1.7.1 ขึ้นไป ระบบจะนำอาร์ติแฟกต์-desktop
ออกและเพิ่มอาร์ติแฟกต์-jvmStubs
และ-linuxx64Stubs
เป้าหมายเหล่านี้ไม่ได้มีไว้เพื่อใช้งาน แต่เป็นตัวยึดตําแหน่งเพื่อช่วยในการใช้งาน Jetbrains Compose (I5cb14, b/406592090)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ไลบรารีนี้กำหนดเป้าหมายเป็นภาษา Kotlin ระดับ 2.0 และใช้ KGP 2.0.0 ขึ้นไป (Idb6b5)
- ตอนนี้
Lifecycle ViewModel Compose
ต้องใช้ Compose 1.7.8 (I5cb14, b/406592090)
เวอร์ชัน 2.9.0-alpha13
26 มีนาคม 2025
androidx.lifecycle:lifecycle-*:2.9.0-alpha13
เผยแพร่โดยไม่มีการเปลี่ยนแปลงที่โดดเด่นในเวอร์ชันสาธารณะ เวอร์ชัน 2.9.0-alpha13 มีการคอมมิตเหล่านี้
เวอร์ชัน 2.9.0-alpha12
12 มีนาคม 2025
androidx.lifecycle:lifecycle-*:2.9.0-alpha12
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha12 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มคำอธิบายประกอบ
@MainThread
ลงในViewModelProvider.get
ในแพลตฟอร์ม KMP ที่รองรับทั้งหมด (I7e8dd, b/397736115) - เปลี่ยนชื่อ
SavedState*Delegates
เป็นSavedState*Delegate
(I8589b, b/399629301)
เวอร์ชัน 2.9.0-alpha11
26 กุมภาพันธ์ 2025
androidx.lifecycle:lifecycle-*:2.9.0-alpha11
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha11 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มพารามิเตอร์
SavedStateConfig
ลงในผู้รับมอบสิทธิ์saved()
(I39b3a)
เวอร์ชัน 2.9.0-alpha10
12 กุมภาพันธ์ 2025
androidx.lifecycle:lifecycle-*:2.9.0-alpha10
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha10 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ย้าย
MutableStateSerializer
จากlifecycle-viewmodel-compose
ไปsavedstate-compose
(I4f690, b/378895074)
การมีส่วนร่วมจากภายนอก
- เพิ่มปัญหา Lint ใหม่สำหรับการเรียกใช้
Lifecycle::currentState
ในคอมโพสิชันแทนที่จะแนะนำให้ใช้currentStateAsalue().value
เพื่อให้แน่ใจว่าการเปลี่ยนแปลงสถานะวงจรจะทําให้เกิดการจัดองค์ประกอบใหม่อย่างถูกต้อง ขอขอบคุณ Steven Schoen (Iad484)
เวอร์ชัน 2.9.0-alpha09
29 มกราคม 2025
androidx.lifecycle:lifecycle-*:2.9.0-alpha09
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha09 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม
MutableStateSerializer
สำหรับการทำให้เป็นอนุกรมของandroidx.compose.runtime.MutableState
(Idfc48, b/378895074)
การเปลี่ยนแปลง API
- แทนที่ฟังก์ชัน
SavedStateHandle.saved()
ที่รับมอบสิทธิ์ซึ่งโอเวอร์โหลดด้วยพารามิเตอร์เริ่มต้น (Icd1c1) AbstractSavedStateViewModelFactory
เลิกใช้งานแล้วเนื่องจากจะสร้างSavedStateHandle
สําหรับViewModel
ทุกรายการ ซึ่งทำให้เกิดค่าใช้จ่ายเพิ่มเติมที่ไม่จําเป็น ใช้ViewModelProvider.Factory
กับCreationExtras.createSavedStateHandle
แทนเพื่อให้การสร้างViewModel
มีประสิทธิภาพมากขึ้น (Ia920b, b/388590327)
เวอร์ชัน 2.9.0-alpha08
11 ธันวาคม 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha08
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha08 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม
ViewModelScenario.recreate
เพื่อจำลองการหยุดทำงานของกระบวนการของระบบ ซึ่งจะสร้างViewModel
ภายใต้การทดสอบและคอมโพเนนต์ที่เกี่ยวข้องทั้งหมดขึ้นมาใหม่ (Id6a69, b/381063087) - ตอนนี้อินสแตนซ์
LifecycleOwner
และViewModelStoreOwner
ที่ดึงข้อมูลผ่านfindViewTree
API ที่เกี่ยวข้องจะแก้ไขผ่านรายการหลักที่ไม่เกี่ยวข้องของมุมมองได้ เช่นViewOverlay
ดูข้อมูลเพิ่มเติมเกี่ยวกับรายการหลักที่แยกกันหรือเอกสารประกอบในViewTree.setViewTreeDisjointParent
(I800f4)
การเปลี่ยนแปลง API
- ตั้งชื่อและจัดระเบียบแพ็กเกจให้สอดคล้องกับ
SavedStateRegistryOwnerDelegate
มากขึ้น (I8c135, b/376026744)
การแก้ไขข้อบกพร่อง
- ตอนนี้ไลบรารีนี้ใช้แอตทริบิวต์ JSpecify nullness ซึ่งเป็นการใช้ประเภท นักพัฒนาซอฟต์แวร์ Kotlin ควรใช้อาร์กิวเมนต์คอมไพเลอร์ต่อไปนี้เพื่อบังคับใช้การใช้งานที่ถูกต้อง
-Xjspecify-annotations=strict
(นี่เป็นค่าเริ่มต้นที่เริ่มตั้งแต่คอมไพเลอร์ Kotlin เวอร์ชัน 2.1.0) (Ie4340, b/326456246) - ลำดับการล้างข้อมูล
ViewModel.onCleared
ของเอกสาร (I586c7, b/363984116)
เวอร์ชัน 2.9.0-alpha07
13 พฤศจิกายน 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha07 มีการคอมมิตเหล่านี้
ความเข้ากันได้แบบหลายแพลตฟอร์มของ Kotlin
- ตอนนี้ Lifecycle
ViewModel SavedState
ใช้งานร่วมกับ KMP ได้แล้ว ซึ่งจะช่วยให้คุณใช้SavedStateHandle
ในโค้ดทั่วไปได้ (Ib6394, b/334076622)
การรองรับการแปลงข้อมูลเป็นอนุกรมของ KotlinX
เราได้เปิดตัว
saved
ซึ่งเป็นตัวรับช่วงพร็อพเพอร์ตี้แบบเลื่อนเวลาไว้เพื่อรองรับการแปลงข้อมูล KotlinX ที่เพิ่มเข้ามาใน SavedState1.3.0-alpha05
ซึ่งช่วยให้จัดเก็บคลาส@Serializable
ในSavedStateHandle
ได้ง่าย และระบบจะกู้คืนคลาสเหล่านั้นโดยอัตโนมัติเมื่อกระบวนการสิ้นสุดลงและสร้างใหม่ โปรดทราบว่าsaved
จะเป็น Delegate แบบ Lazy และไม่เรียกใช้ Lambda ของinit
หรือบันทึกข้อมูลใดๆ ลงในSavedStateHandle
จนกว่าจะมีการเข้าถึง (I47a88, b/376026744)@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
การเปลี่ยนแปลง API
- เพิ่ม
getMutableStateFlow
ลงในSavedStateHandle
เพื่อแสดงผลMutableStateFlow
ฟังก์ชันใหม่นี้ใช้กับคีย์เท่านั้น และใช้กับgetLiveData
ไม่ได้ ระบบจะแสดงข้อยกเว้นหากคุณพยายามใช้ทั้ง 2 รายการเพื่อเข้าถึงสถานะเดียวกัน (I04a4f, b/375408415)
เวอร์ชัน 2.9.0-alpha06
30 ตุลาคม 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
- สถานะ
Lifecycle.DESTROYED
เป็นสถานะสุดท้าย และตอนนี้การพยายามย้ายLifecycle
จากสถานะดังกล่าวไปยังสถานะอื่นจะส่งผลให้เกิดIllegalStateException
(I116c4, b/370577987) SavedStateHandle
จะไม่รวมSavedStateProvider.saveState()
ใดๆ อีกต่อไปเมื่อBundle
ที่แสดงผลว่างเปล่า (I910b5, b/370577987)
การแก้ไขข้อบกพร่อง
Lifecycle.eventFlow
เสร็จสมบูรณ์อย่างถูกต้องแล้วเมื่อLifecycle
เป็นDESTROYED
(I293b2, b/374043130)
เวอร์ชัน 2.9.0-alpha05
16 ตุลาคม 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha05
เผยแพร่โดยไม่มีการเปลี่ยนแปลงที่สำคัญ เวอร์ชัน 2.9.0-alpha05 มีการคอมมิตเหล่านี้
เวอร์ชัน 2.9.0-alpha04
2 ตุลาคม 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha04 มีการคอมมิตเหล่านี้
Kotlin Multiplatform
- ตอนนี้เราได้กําหนดค่าโมดูล
lifecycle-viewmodel-savedstate
ให้ใช้งานร่วมกับ KMP ได้เพื่อเตรียมพร้อมให้ API เช่นSavedStateHandle
พร้อมใช้งานในชุดแหล่งที่มาทั่วไปในรุ่นที่จะออกในอนาคต (I503ed, I48764, b/334076622)
เวอร์ชัน 2.9.0-alpha03
18 กันยายน 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha03 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- จากวงจร
2.8.6
: ข้อผิดพลาดNullSafeMutableLiveData
Lint ได้รับการปรับปรุงให้รองรับแคสต์อัจฉริยะมากขึ้น เพื่อหลีกเลี่ยงผลบวกลวง (85fed6, b/181042665)
การอัปเดตทรัพยากร Dependency
- จากวงจร
2.8.6
: ตอนนี้ Lifecycle Runtime Compose ขึ้นอยู่กับ Compose Runtime1.7.1
- ตอนนี้รันไทม์ของวงจรขึ้นอยู่กับ ProfileInstaller
1.4.0
เวอร์ชัน 2.9.0-alpha02
4 กันยายน 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- จากวงจร
2.8.5
: อัปเดตกฎ ProGuard ของandroidx.lifecycle.ReportFragment
เพื่ออนุญาตการสร้างความสับสน (ff898e1)
การมีส่วนร่วมจากภายนอก
- ย้าย
androidx.compose.ui.platform.LocalLifecycleOwner
ไปยังชุดแหล่งที่มาทั่วไป (KMP) ขอขอบคุณ Ivan Matkov จาก JetBrains สำหรับการมีส่วนร่วม (8cd5d03) - จากวงจร
2.8.5
: ตอนนี้ตัวรับช่วงการขยาย SavedStateHandle.saveable` รองรับค่าที่อนุญาตเป็น Null แล้ว ขอขอบคุณ Roman Kalukiewicz สำหรับการมีส่วนร่วม (0d78ea6)
เวอร์ชัน 2.9.0-alpha01
7 สิงหาคม 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha01 มีการคอมมิตเหล่านี้
Kotlin Multiplatform
lifecycle-testing
ใช้งานร่วมกับ KMP ได้แล้ว (Iea41e)- เพิ่มการรองรับ
linuxArm64
เป้าหมายแบบหลายแพลตฟอร์มของ Kotlin (I139d3, b/338268719)
ฟีเจอร์ใหม่
- เรามี
androidx.lifecycle:lifecycle-viewmodel-testing
อาร์ติแฟกต์ KMP ใหม่ที่มีคลาสViewModelScenario
สำหรับการทดสอบ ViewModel แบบแยกต่างหาก ซึ่งรองรับonCleared
(ทุกแพลตฟอร์ม) และSavedStateHandle
(Android เท่านั้น) (337f68d, c9b3409, 9799a95c, b/264602919) - ตอนนี้การสร้าง
ViewModel
ด้วยViewModelProvider
เป็นแบบปลอดภัยสำหรับเธรดแล้ว ระบบได้นำคำอธิบายประกอบ@MainThread
ออกแล้ว (Ifd978, b/237006831)
การเปลี่ยนแปลง API
- เพิ่ม
CreationExtras.Key()
ฟังก์ชันการสร้างเพื่อลดความซับซ้อนในการสร้างออบเจ็กต์CreationExtras.Key
ที่ไม่ระบุชื่อ (I970ee) - ตอนนี้
CreationExtras
มีการโอเวอร์โหลดโอเปอเรเตอร์ที่คล้ายกับแผนที่เพื่อเปิดใช้การจัดการเนื้อหาตามแบบแผนใน Kotlin ซึ่งอนุญาตให้ใช้in
,+=
และ+
กับCreationExtras
(Ib4353) - ตอนนี้
CreationExtras
ใช้วิธีการequals
,hashCode
และtoString
(Ib4353) NewInstanceFactory
พร้อมใช้งานบนเป้าหมาย JVM Desktop และ Android แล้ว (d3d0892)- พร็อพเพอร์ตี้ส่วนขยายในบรรทัดเพื่อแสดงแอปพลิเคชันที่อยู่เบื้องหลังอย่างปลอดภัยในภาษา Kotlin เวอร์ชัน 2.0 (I39df2)
การแก้ไขข้อบกพร่อง
- นำการระบุการเข้าถึง API ของแพลตฟอร์มใหม่ด้วยตนเองออกแล้ว เนื่องจากการดำเนินการนี้จะทําโดยอัตโนมัติผ่านโมเดล API เมื่อใช้ R8 กับ AGP 7.3 ขึ้นไป (เช่น R8 เวอร์ชัน 3.3) และสำหรับบิลด์ทั้งหมดเมื่อใช้ AGP 8.1 ขึ้นไป (เช่น D8 เวอร์ชัน 8.1) เราขอแนะนำให้ลูกค้าที่ไม่ได้ใช้ AGP อัปเดตเป็น D8 เวอร์ชัน 8.1 ขึ้นไป ดูบทความนี้สำหรับรายละเอียดเพิ่มเติม (If6b4c, b/345472586)
เวอร์ชัน 2.8
เวอร์ชัน 2.8.7
30 ตุลาคม 2024
androidx.lifecycle:lifecycle-*:2.8.7
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.7 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
androidx.compose.ui.platform.LocalLifecycleOwner
พร้อมให้ใช้งานแล้วในชุดแหล่งที่มาทั่วไป (KMP) (6a3f5b3)lifecycle-runtime-compose
: นําอาร์ติแฟกต์desktop
ออกและเพิ่มอาร์ติแฟกต์-jvmStubs
และ-linuxx64Stubs
เป้าหมายเหล่านี้ไม่ได้มีไว้เพื่อใช้งาน แต่เป็นตัวยึดตําแหน่งเพื่อช่วยในการใช้งาน Jetbrains Compose (6a3f5b3)
เวอร์ชัน 2.8.6
18 กันยายน 2024
androidx.lifecycle:lifecycle-*:2.8.6
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.6 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ข้อผิดพลาด
NullSafeMutableLiveData
Lint ได้รับการปรับปรุงให้รองรับแคสต์อัจฉริยะมากขึ้น เพื่อหลีกเลี่ยงผลบวกลวง (85fed6, b/181042665)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ Lifecycle Runtime Compose ขึ้นอยู่กับ Compose Runtime
1.7.1
เวอร์ชัน 2.8.5
4 กันยายน 2024
androidx.lifecycle:lifecycle-*:2.8.5
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.5 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- อัปเดตกฎ
androidx.lifecycle.ReportFragment
ProGuard เพื่ออนุญาตการสร้างความสับสน (ff898e1)
การมีส่วนร่วมจากภายนอก
- ตอนนี้ผู้รับมอบสิทธิ์ส่วนขยาย
SavedStateHandle.saveable
รองรับค่าที่อนุญาตเป็น Null แล้ว ขอขอบคุณ Roman Kalukiewicz สำหรับการมีส่วนร่วม (0d78ea6)
เวอร์ชัน 2.8.4
24 กรกฎาคม 2024
androidx.lifecycle:lifecycle-*:2.8.4
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.4 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
LiveData.asFlow()
จัดการกรณีที่โฟลว์ที่แสดงผลเสร็จสมบูรณ์ทันทีหลังจากได้รับค่าที่ตั้งไว้ในLiveData
(เช่น เมื่อใช้take(1)
) อย่างถูกต้องแล้ว (I9c566) - ตอนนี้การเรียกใช้
Lifecycle*Effect
เสร็จสมบูรณ์แล้ว (กล่าวคือ หากมีการเรียกใช้onStopOrDispose
เนื่องจากมีการหยุด Lifecycle ไว้ ระบบจะไม่เรียกใช้onStopOrDispose
ครั้งที่สองเมื่อมีการทิ้ง เว้นแต่ Lifecycle จะกลับไปเป็นSTARTED
อีกครั้ง) (I5f607, b/352364595)
เวอร์ชัน 2.8.3
1 กรกฎาคม 2024
androidx.lifecycle:lifecycle-*:2.8.3
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.3 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาความเข้ากันได้แบบย้อนหลังของ Lifecycle 2.8 กับ Compose 1.6.0 และต่ำกว่าเมื่อใช้การลดขนาดโค้ด (aosp/3133056, b/346808608)
เวอร์ชัน 2.8.2
12 มิถุนายน 2024
androidx.lifecycle:lifecycle-*:2.8.2
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.2 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาด
CompositionLocal LocalLifecycleOwner not present
เมื่อใช้ Lifecycle 2.8.X กับ Compose 1.6.X หรือเวอร์ชันก่อนหน้า ตอนนี้คุณใช้ Lifecycle 2.8.2 กับ Compose เวอร์ชันใดก็ได้โดยไม่ต้องใช้วิธีแก้ปัญหาใดๆ (aosp/3105647, b/336842920) ViewModelProvider
จะไม่ขัดข้องอีกต่อไปเมื่อใช้ไลบรารีcompileOnly
Lifecycle เวอร์ชันเก่าร่วมกับเวอร์ชัน 2.8 ขึ้นไป ซึ่งจะแก้ไขปัญหาเกี่ยวกับไลบรารี เช่น LeakCanary (I80383, b/341792251)
เวอร์ชัน 2.8.1
29 พฤษภาคม 2024
androidx.lifecycle:lifecycle-*:2.8.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.1 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
lifecycle-viewmodel-compose
มีการขึ้นต่อกันทั่วไปกับcompose-runtime
เท่านั้น โดยนำการขึ้นต่อกันทั่วไปกับcompose-ui
ออกแล้ว อาร์ติแฟกต์ Android จะยังคงมีcompose-ui
เพื่อความเข้ากันได้ (aosp/3079334, b/339562627) - ตอนนี้การผสานรวม
saveable
ของViewModel
โดยใช้ตัวรับช่วงพร็อพเพอร์ตี้จะใช้ชื่อคลาสเป็นส่วนหนึ่งของคีย์ที่สร้างขึ้นโดยอัตโนมัติ เพื่อหลีกเลี่ยงความขัดแย้งหากมีคลาสหลายคลาสใช้SavedStateHandle
เดียวกัน (aosp/3063463)
เวอร์ชัน 2.8.0
14 พฤษภาคม 2024
androidx.lifecycle:lifecycle-*:2.8.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 2.7.0
LocalLifecycleOwner
ได้ย้ายจาก UI ของ Compose ไปยังlifecycle-runtime-compose
เพื่อให้ใช้ API ตัวช่วยที่อิงตาม Compose นอก UI ของ Compose ได้- ตอนนี้อาร์ติแฟกต์
lifecycle-runtime-compose
มี APIdropUnlessResumed
และdropUnlessStarted
ซึ่งช่วยให้คุณวางการคลิกหรือเหตุการณ์อื่นๆ ที่เกิดขึ้นได้แม้ว่าLifecycleOwner
จะลดลงต่ำกว่าLifecycle.State
ที่ระบุไว้ ตัวอย่างเช่นonClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
สามารถใช้กับ Navigation Compose เพื่อหลีกเลี่ยงการจัดการเหตุการณ์การคลิกหลังจากที่การเปลี่ยนไปหน้าจออื่นได้เริ่มต้นแล้ว ตอนนี้
ViewModel.viewModelScope
กลายเป็นพารามิเตอร์เครื่องมือสร้างแบบลบล้างได้ ซึ่งช่วยให้คุณแทรกตัวจัดเส้นทางและSupervisorJob()
ของคุณเอง หรือลบล้างค่าเริ่มต้นได้โดยใช้backgroundScope
ที่มีอยู่ในrunTest
(I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
ViewModel
ได้รับการเขียนใหม่เป็น Kotlin และตอนนี้ใช้AutoClosable
แทนCloseable
ตอนนี้ระบบรองรับการเพิ่มออบเจ็กต์AutoCloseable
ที่มีkey
ซึ่งช่วยให้ดึงข้อมูลผ่านgetCloseable()
ได้การเรียก
LifecycleStartEffect
และLifecycleResumeEffect
โดยไม่มีคีย์จะทำให้เกิดข้อผิดพลาดตามแบบแผนเดียวกับDisposableEffect
API ที่ API เหล่านี้มิเรอร์เลิกใช้งาน
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
แล้วใช้LiveData.toPublisher(lifecycleOwner)
แทนตอนนี้เราได้ย้ายส่วนขยาย
lifecycle-livedata-core-ktx
kotlin ไปยังโมดูลlifecycle-livedata-core
แล้วเราได้ปรับโครงสร้าง
NullSafeMutableLiveData
เพื่อหลีกเลี่ยงผลบวกเท็จจำนวนมาก
ความเข้ากันได้ของ Kotlin แบบหลายแพลตฟอร์มตลอดอายุการใช้งาน
ตอนนี้ Lifecycle API หลักใน Lifecycle
, LifecycleOwner
, LifecycleObserver
, Lifecycle.State
, Lifecycle.Event
และ LifecycleRegistry
มาพร้อมกับอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform แล้ว
อาร์ติแฟกต์ที่ได้รับผลกระทบ
lifecycle-common
ย้าย API ส่วนใหญ่ไปยังcommon
และรองรับ jvm และ iOS นอกเหนือจาก Androidlifecycle-runtime
ย้าย API ส่วนใหญ่ไปยังcommon
และรองรับ jvm และ iOS นอกเหนือจาก Android- ตอนนี้
lifecycle-runtime-ktx
ว่างเปล่าแล้ว เนื่องจากมีการย้าย API ทั้งหมดไปยังlifecycle-runtime
lifecycle-runtime-compose
ย้าย API ทั้งหมดไปยังcommon
และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของandroidx.compose
ความเข้ากันได้แบบหลายแพลตฟอร์มของ ViewModel ใน Kotlin
ตอนนี้อาร์ติแฟกต์ lifecycle-viewmodel
และ API เช่น ViewModel
, ViewModelStore
, ViewModelStoreOwner
และ ViewModelProvider
จะมาพร้อมกับอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform
เพื่อให้รองรับการเปลี่ยนแปลงนี้ ตอนนี้เมธอดต่างๆ เช่น เมธอดใน ViewModelProvider
ที่ใช้ java.lang.Class<T>
ก็มีเมธอดที่เทียบเท่าซึ่งใช้ kotlin.reflect.KClass<T>
ความเข้ากันได้ของไบนารีใน Android ยังคงเหมือนเดิม แต่มีการเปลี่ยนแปลงที่ควรทราบเมื่อเปรียบเทียบแพลตฟอร์ม API ของ Android กับแพลตฟอร์ม API ทั่วไป ดังนี้
- ตอนนี้การสร้างอินสแตนซ์
ViewModelProvider
ทำได้ผ่านเมธอดViewModelProvider.create()
แทนการเรียกเครื่องมือสร้างโดยตรง ViewModelProvider.NewInstanceFactory
และViewModelProvider.AndroidViewModelFactory
จะมีเฉพาะใน Android เท่านั้น- ขอแนะนําให้สร้าง Factory ที่กําหนดเองโดยขยายจาก
ViewModelProvider.Factory
และใช้เมธอดcreate
ที่ใช้CreationExtras
หรือใช้viewModelFactory
Kotlin DSL
- ขอแนะนําให้สร้าง Factory ที่กําหนดเองโดยขยายจาก
- การใช้
ViewModelProvider
ที่ไม่มีโรงงานที่กำหนดเองบนแพลตฟอร์มที่ไม่ใช่ JVM จะทำให้เกิดUnsupportedOperationException
ในแพลตฟอร์ม JVM ระบบจะรักษาความเข้ากันได้โดยใช้ตัวสร้าง ViewModel ที่ไม่มีอาร์กิวเมนต์หากไม่ได้ระบุ Factory ที่กําหนดเอง viewModelScope
จะเปลี่ยนเป็นEmptyCoroutineContext
ในแพลตฟอร์มที่ไม่มีDispatchers.Main
(เช่น Linux)
อาร์ติแฟกต์ที่ได้รับผลกระทบ
lifecycle-viewmodel
ย้าย API ส่วนใหญ่ไปยังcommon
และรองรับ jvm และ iOS นอกเหนือจาก Android- ตอนนี้
lifecycle-viewmodel-ktx
ว่างเปล่าแล้ว เนื่องจากมีการย้าย API ทั้งหมดไปยังlifecycle-viewmodel
lifecycle-viewmodel-compose
ย้าย API ทั้งหมดไปยังcommon
และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของandroidx.compose
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
InitializerViewModelFactory
(รวมถึงฟังก์ชันบิลเดอร์viewModelFactory
) จะแสดงข้อผิดพลาดIllegalArgumentException
หากมีการเพิ่มinitializer
ที่มีclazz: KClass<VM : ViewModel>
เดียวกันแล้ว (Ic3a36)
ปัญหาที่ทราบ
lifecycle-*:2.8.0
ต้องใช้ Compose เวอร์ชันขั้นต่ำ 1.7.0-alpha05 (b/336842920)
เวอร์ชัน 2.8.0-rc01
1 พฤษภาคม 2024
androidx.lifecycle:lifecycle-*:2.8.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่แพ็กเกจโปรไฟล์พื้นฐานสำหรับชั้นเรียน
lifecycle-common
ไม่ถูกบรรจุอย่างถูกต้อง ตอนนี้ไฟล์เหล่านี้จะอยู่ในlifecycle-runtime
AAR (aosp/3038274, b/322382422) - แก้ไขการเปลี่ยนแปลงลําดับที่ไม่ตั้งใจในวิธีล้างอินสแตนซ์
AutoCloseable
ที่แนบอยู่กับ ViewModel โดยระบบได้คืนค่าลําดับก่อนหน้าของaddCloseable(String, AutoCloseable)
ตามด้วยaddClosable(AutoCloseable)
แล้วตามด้วยonCleared()
(aosp/3041632) - ปรับปรุงลักษณะการทำงานเริ่มต้นของการสร้าง
viewModelScope
สำหรับสภาพแวดล้อมเดสก์ท็อปแบบเนทีฟและ JVM (aosp/3039221)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Victor Kropp ที่ช่วยปรับปรุงการตรวจสอบชุดข้อความหลักใน JVM Desktop (aosp/3037116)
เวอร์ชัน 2.8.0-beta01
17 เมษายน 2024
androidx.lifecycle:lifecycle-*:2.8.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.0-beta01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้อาร์ติแฟกต์
lifecycle-runtime-compose
เข้ากันได้กับ Kotlin Multiplatform แล้ว โดยระบบจะย้ายโค้ดของอาร์ติแฟกต์ไปยังcommon
และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการสนับสนุนหลายแพลตฟอร์มสำหรับandroidx.compose
(If7a71, I4f4a0, b/331769623)
เวอร์ชัน 2.8.0-alpha04
3 เมษายน 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้อาร์ติแฟกต์
lifecycle-viewmodel-compose
เข้ากันได้กับ Kotlin Multiplatform แล้ว โดยระบบจะย้ายโค้ดของอาร์ติแฟกต์ไปยังcommon
และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของandroidx.compose
วิธีการviewModel
แบบคอมโพสได้ยอมรับKClass
นอกเหนือจากjava.lang.Class
แล้ว เพื่อรองรับการเปลี่ยนแปลงนี้ (b/330323282)
การแก้ไขข้อบกพร่อง
- เราได้ปรับโครงสร้าง
NullSafeMutableLiveData
เพื่อหลีกเลี่ยงผลบวกเท็จจำนวนมาก (I2d8c1, Iafb18, I03463, I7ecef)
การอัปเดตทรัพยากรที่เกี่ยวข้อง
- ตอนนี้อาร์ติแฟกต์
lifecycle-viewmodel-compose
ขึ้นอยู่กับ Compose 1.6.0 - ตอนนี้วงจรขึ้นอยู่กับ Profile Installer 1.3.1
เวอร์ชัน 2.8.0-alpha03
20 มีนาคม 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
ตอนนี้
ViewModel.viewModelScope
กลายเป็นพารามิเตอร์เครื่องมือสร้างแบบลบล้างได้ ซึ่งช่วยให้คุณแทรกตัวจัดเส้นทางและSupervisorJob()
ของคุณเอง หรือลบล้างค่าเริ่มต้นได้โดยใช้backgroundScope
ที่มีอยู่ในrunTest
(I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
ความเข้ากันได้แบบหลายแพลตฟอร์มของ Kotlin
ตอนนี้อาร์ติแฟกต์ lifecycle-viewmodel
และ API เช่น ViewModel
, ViewModelStore
, ViewModelStoreOwner
และ ViewModelProvider
จะมาพร้อมกับอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform (b/214568825)
เพื่อให้รองรับการเปลี่ยนแปลงนี้ ตอนนี้เมธอดต่างๆ เช่น เมธอดใน ViewModelProvider
ที่ใช้ java.lang.Class<T>
ก็มีเมธอดที่เทียบเท่าซึ่งใช้ kotlin.reflect.KClass<T>
ความเข้ากันได้ของไบนารีใน Android ยังคงเหมือนเดิม แต่มีการเปลี่ยนแปลงที่ควรทราบเมื่อเปรียบเทียบแพลตฟอร์ม API ของ Android กับแพลตฟอร์ม API ทั่วไป ดังนี้
- ตอนนี้การสร้างอินสแตนซ์
ViewModelProvider
ทำได้ผ่านเมธอดViewModelProvider.create()
แทนการเรียกเครื่องมือสร้างโดยตรง ViewModelProvider.NewInstanceFactory
และViewModelProvider.AndroidViewModelFactory
จะมีเฉพาะใน Android เท่านั้น- ขอแนะนําให้สร้าง Factory ที่กําหนดเองโดยขยายจาก
ViewModelProvider.Factory
และใช้เมธอดcreate
ที่ใช้CreationExtras
หรือใช้viewModelFactory
Kotlin DSL
- ขอแนะนําให้สร้าง Factory ที่กําหนดเองโดยขยายจาก
- การใช้
ViewModelProvider
ที่ไม่มีโรงงานที่กำหนดเองบนแพลตฟอร์มที่ไม่ใช่ JVM จะทำให้เกิดUnsupportedOperationException
ในแพลตฟอร์ม JVM ระบบจะรักษาความเข้ากันได้โดยใช้ตัวสร้าง ViewModel ที่ไม่มีอาร์กิวเมนต์หากไม่ได้ระบุ Factory ที่กําหนดเอง viewModelScope
จะเปลี่ยนเป็นEmptyCoroutineContext
ในแพลตฟอร์มที่ไม่มีDispatchers.Main
(เช่น Linux)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
InitializerViewModelFactory
(รวมถึงฟังก์ชันบิลเดอร์viewModelFactory
) จะแสดงข้อผิดพลาดIllegalArgumentException
หากมีการเพิ่มinitializer
ที่มีclazz: KClass<VM : ViewModel>
เดียวกันแล้ว (Ic3a36)
การแก้ไขข้อบกพร่อง
- ตอนนี้
ViewModel.getCloseable
จัดการคีย์ที่ซ้ำกันได้แล้ว หากkey
มีการเชื่อมโยงกับทรัพยากรAutoCloseable
อยู่แล้ว ระบบจะแทนที่ทรัพยากรเก่าและปิดทันที (Ibeb67) - การเข้าถึง
viewModelScope
ของViewModel
ปลอดภัยสำหรับเธรดแล้ว (If4766, b/322407038)
การมีส่วนร่วมจากภายนอก
LocalLifecycleOwner
ย้ายจาก UI ของ Compose ไปยัง lifecycle-runtime-compose เพื่อให้ใช้ API ตัวช่วยที่อิงตาม Compose นอก UI ของ Compose ได้ ขอขอบคุณ Jake Wharton สำหรับการมีส่วนร่วม (I6c41b, b/328263448)
เวอร์ชัน 2.8.0-alpha02
21 กุมภาพันธ์ 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เราได้เพิ่ม
dropUnlessResumed
และdropUnlessStarted
API ซึ่งช่วยให้คุณหยุดการคลิกหรือเหตุการณ์อื่นๆ ที่เกิดขึ้นได้แม้ว่าLifecycleOwner
จะลดลงต่ำกว่าLifecycle.State
ที่กำหนดไว้ เช่น สามารถใช้กับ Navigation Compose เพื่อหลีกเลี่ยงการจัดการเหตุการณ์คลิกหลังจากที่การเปลี่ยนไปที่หน้าจออื่นได้เริ่มต้นแล้วonClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
(Icba83, b/317230685)
Conversion ของ Kotlin
- ตอนนี้
ViewModel
เขียนด้วย Kotlin แล้ว (I16f26, b/214568825) - ตอนนี้เราได้ย้ายส่วนขยาย
lifecycle-viewmodel-ktx
kotlin ไปยังโมดูลวงจรชีวิตของฐานแล้ว (Id787b, b/274800183) - ตอนนี้เราได้ย้ายส่วนขยาย
lifecycle-runtime-ktx
kotlin ไปยังโมดูลวงจรชีวิตของฐานแล้ว (Ic3686, b/274800183) - ตอนนี้เราได้ย้ายส่วนขยาย
lifecycle-livedata-core-ktx
kotlin ไปยังโมดูลวงจรชีวิตของฐานแล้ว (I54a3d, b/274800183)
ความเข้ากันได้แบบหลายแพลตฟอร์มของ Kotlin
- ตอนนี้ Lifecycle API หลักใน
Lifecycle
,LifecycleOwner
,LifecycleObserver
,Lifecycle.State
,Lifecycle.Event
และLifecycleRegistry
มาพร้อมกับอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform แล้ว (b/317249252)
การเปลี่ยนแปลง API
- การเรียก
LifecycleStartEffect
และLifecycleResumeEffect
โดยไม่มีคีย์จะทำให้เกิดข้อผิดพลาดตามแบบแผนเดียวกับDisposableEffect
API ที่ API เหล่านี้มิเรอร์ (Ib0e0c, b/323518079) ViewModel
ใช้AutoCloseable
แทนCloseable
แล้ว การเปลี่ยนแปลงนี้เข้ากันได้แบบย้อนหลัง (I27f8e, b/214568825)- เลิกใช้งาน
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
แล้วใช้LiveData.toPublisher(lifecycleOwner)
แทน (Iabe29, b/262623005)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Ivan Matkov จาก Jetbrains ที่ช่วยย้าย Lifecycle ไปยัง Kotlin Multiplatform (aosp/2926690, I0c5ac, If445d)
เวอร์ชัน 2.8.0-alpha01
24 มกราคม 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
ViewModel
รองรับการเพิ่มออบเจ็กต์Closeable
ที่มีkey
ซึ่งช่วยให้ดึงข้อมูลผ่านgetCloseable()
ได้ (I3cf63)
เวอร์ชัน 2.7
เวอร์ชัน 2.7.0
10 มกราคม 2024
androidx.lifecycle:lifecycle-*:2.7.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.6.0
- ตอนนี้
TestLifecycleOwner
มีฟังก์ชันการระงับsetCurrentState()
ซึ่งช่วยให้มั่นใจได้ว่าการเปลี่ยนแปลงสถานะและการเรียกคืนLifecycleObserver
ทั้งหมดจะเสร็จสมบูรณ์ก่อนที่จะแสดงผล โปรดทราบว่าการดำเนินการนี้จะไม่ใช้runBlocking
ซึ่งแตกต่างจากการตั้งค่าพร็อพเพอร์ตี้currentState
โดยตรง จึงใช้ภายใน coroutine ได้ เช่น coroutine ที่runTest
ให้มา - ตอนนี้ส่วนขยาย
LiveData
ของmap
และswitchMap
จะแสดงผลตามลักษณะการทํางานของdistinctUntilChanged
- หากLiveData
มีการตั้งค่าvalue
ระบบจะเรียกใช้ฟังก์ชันmap
/switchMap
ทันทีเพื่อป้อนข้อมูลvalue
ของLiveData
ที่แสดงผล วิธีนี้ช่วยให้มั่นใจได้ว่าระบบจะตั้งค่าเริ่มต้นเป็นส่วนหนึ่งของการคอมโพสิชันแรก (เมื่อใช้กับobserveAsState()
) แต่จะไม่เปลี่ยนลักษณะการสังเกต ค่าที่อัปเดตจากแหล่งที่มาLiveData
จะยังคงมีผลเมื่อคุณเริ่มสังเกตLiveData
เท่านั้น - รุ่นนี้แก้ไขปัญหาที่
SavedStateHandle
ไม่กู้คืนคลาสParcelable
ที่กําหนดเองอย่างถูกต้องหลังจากกระบวนการสิ้นสุดและสร้างใหม่ เนื่องจากเฟรมเวิร์ก Android จะสูญเสียข้อมูลประเภท อาร์เรย์ของ Parcelable ที่กําหนดเองจึงต้องทํางานเพิ่มเติม (สร้างอาร์เรย์ที่มีประเภทถูกต้องด้วยตนเอง) และตอนนี้เอกสารประกอบเกี่ยวกับget
,getLiveData
และgetStateFlow
จะระบุข้อจํากัดนี้โดยเฉพาะ - นํากฎ proguard keep ที่เชื่อมโยงกับ
LifecycleObserver
ออกแล้ว ซึ่งหมายความว่าโค้ดที่ได้รับการป้องกันซึ่งต้องการใช้ API ผ่านการสะท้อน (เช่น การใช้แอตทริบิวต์@OnLifecycleEvent
ที่เลิกใช้งานไปนานแล้ว) จะต้องระบุกฎการเก็บรักษาของตนเองสำหรับ Use Case ที่เฉพาะเจาะจง
ความสามารถในการสังเกตเหตุการณ์ในวงจร
- ตอนนี้คุณสังเกต
Flow
ของLifecycle.Event
ผ่านเมธอดส่วนขยายLifecycle.asFlow()
ได้แล้ว แทนที่จะใช้LifecycleEventObserver
- ตอนนี้ผู้ใช้ Jetpack Compose สามารถใช้
LifecycleEventEffect
เพื่อเรียกใช้ผลข้างเคียงของ Compose ตามLifecycle.Event
ได้แล้ว
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- ผู้ใช้ Jetpack Compose สามารถใช้
LifecycleStartEffect
และLifecycleResumeEffect
เพื่อจัดการคู่เหตุการณ์ได้ ซึ่งได้แก่ เริ่มต้นเป็นหยุดและเล่นต่อเป็นหยุดชั่วคราวตามลำดับ API นี้จะแสดงผลแบบเดียวกับที่พบในDisposableEffect
และเหมาะสำหรับกรณีที่การเปลี่ยนแปลงที่เกิดขึ้นเมื่อสถานะเพิ่มขึ้นต้องกลับรายการเมื่อสถานะลดลง
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
ดูข้อมูลเพิ่มเติมที่เรียกใช้โค้ดในเหตุการณ์วงจร
ความสามารถในการสังเกตสถานะวงจร
- ตอนนี้คุณดู
Lifecycle.State
ปัจจุบันผ่านพร็อพเพอร์ตี้Lifecycle.currentStateFlow
ได้แล้ว ซึ่งจะแสดงผลStateFlow
โดยที่value
คือLifecycle.State
ปัจจุบัน - ผู้ใช้ Jetpack Compose สามารถใช้ส่วนขยาย
Lifecycle.currentStateAsState()
เพื่อแสดงLifecycle.State
เป็น ComposeState
ได้โดยตรง ซึ่งเทียบเท่ากับlifecycle.currentStateFlow.collectAsState()
(และเป็นทางเลือกที่สั้นกว่า)
ดูข้อมูลเพิ่มเติมที่รวบรวมสถานะวงจรของลูกค้าด้วย FLow
เวอร์ชัน 2.7.0-rc02
13 ธันวาคม 2023
androidx.lifecycle:lifecycle-*:2.7.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-rc02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
SavedStateHandle
ไม่คืนค่าคลาสParcelable
ที่กําหนดเองอย่างถูกต้องหลังจากกระบวนการสิ้นสุดและสร้างใหม่ เนื่องจากเฟรมเวิร์ก Android จะสูญเสียข้อมูลประเภท อาร์เรย์ของ Parcelable ที่กําหนดเองจึงต้องทํางานเพิ่มเติม (สร้างอาร์เรย์ที่มีประเภทถูกต้องด้วยตนเอง) และตอนนี้เอกสารประกอบเกี่ยวกับget
,getLiveData
และgetStateFlow
จะระบุข้อจํากัดนี้โดยเฉพาะ (I0b55a)
เวอร์ชัน 2.7.0-rc01
15 พฤศจิกายน 2023
androidx.lifecycle:lifecycle-*:2.7.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
LifecycleStartEffect
และLifecycleResumeEffect
จะทิ้งและสร้างบล็อกเอฟเฟกต์อีกครั้งอย่างถูกต้องหากมีการเปลี่ยนแปลงLifecycleOwner
(Ia25c6)
เวอร์ชัน 2.7.0-beta01
1 พฤศจิกายน 2023
androidx.lifecycle:lifecycle-*:2.7.0-beta01
เผยแพร่โดยไม่มีการเปลี่ยนแปลง เวอร์ชัน 2.7.0-beta01 มีการคอมมิตเหล่านี้
- การอัปเกรดจากเวอร์ชันเบต้า ไม่มีการเปลี่ยนแปลงที่สำคัญในเวอร์ชันที่เผยแพร่นี้
เวอร์ชัน 2.7.0-alpha03
18 ตุลาคม 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
lifecycle-runtime-testing
มีการตรวจสอบ Lint ใหม่เพื่อหลีกเลี่ยงการตั้งค่าLifecycle.State
ของTestLifecycleOwner
โดยใช้ฟิลด์currentState
เมื่ออยู่ภายใน coroutine ตอนนี้การตรวจสอบ Lint จะแนะนำให้ระงับsetCurrentState
ซึ่งจะอนุญาตให้ตั้งค่าLifecycle.State
โดยไม่บล็อก (Icf728, b/297880630)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ
LiveData.switchMap
ที่การคืนค่าอินสแตนซ์LiveData
เดียวกันทั้งในการเรียกครั้งแรกและการเรียกครั้งต่อๆ ไปจะป้องกันไม่ให้ระบบเพิ่มอินสแตนซ์LiveData
เป็นแหล่งที่มา (Ibedcba7)
เวอร์ชัน 2.7.0-alpha02
6 กันยายน 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
TestLifecycleOwner
มีฟังก์ชันการระงับsetCurrentState()
เพื่อให้ผู้ใช้มีตัวเลือกในการใช้TestLifecycleOwner
จากภายในโคโริวทีน เช่น โคโริวทีนที่runTest
ให้มา (I329de, b/259344129)
การเปลี่ยนแปลง API
- ย้ายไฟล์ทั้งหมดจากข้อบังคับ
lifecycle-livedata-ktx
ไปยังข้อบังคับlifecycle-livedata
หลักแล้ว (I10c6f, b/274800183)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ส่วนขยาย
LiveData.map()
และLiveData.switchMap()
จะตั้งค่าvalue
ของLiveData
ที่แสดงผล หากLiveData
ก่อนหน้ามีการตั้งค่าไว้ เพื่อให้แน่ใจว่าการใช้ LiveData ที่เป็นผลลัพธ์ใน Jetpack Compose มีสถานะที่ถูกต้องในการคอมโพสิชันเริ่มต้น (I91d2b, b/269479952) - ตอนนี้
addCloseable()
ของViewModel
จะปิดCloseable
ทันทีหากViewModel
ได้รับการโทรไปที่onCleared()
อยู่แล้ว (I4712e, b/280294730)
การแก้ไขข้อบกพร่อง
- จากวงจร
2.6.2
: แก้ไขปัญหาที่SavedStateHandle
จะไม่ได้รับการกู้คืนอย่างถูกต้องหลังจากกระบวนการสิ้นสุดลง หากมีการกู้คืนสถานะ มีการเรียกsave()
โดยไม่บันทึกสถานะในSavedStateRegistry
หลัก แล้วมีการกู้คืนสถานะอีกครั้ง การแก้ไขนี้จะช่วยแก้ไขการโต้ตอบระหว่างrememberSaveable
กับNavHost
ของ Navigation Compose (aosp/2729289)
เวอร์ชัน 2.7.0-alpha01
26 กรกฎาคม 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
Lifecycle.State
สังเกตได้จาก Compose ผ่านLifecycle.currentStateFlow
ซึ่งจะแสดงผลStateFlow
โดยที่value
คือLifecycle.State
ปัจจุบัน (Ib212d, b/209684871) - ตอนนี้
Lifecycle.Event
สามารถสังเกตการณ์เป็นFlow
กับLifecycle.asFlow().
ได้แล้ว (If2c0f, b/176311030) - เพิ่ม
LifecycleResumeEffect
API เพื่อเรียกใช้ ComposeSideEffect
โดยอิงตามทั้ง Callback เหตุการณ์Lifecycle.Event.ON_RESUME
และLifecycle.Event.ON_PAUSE
(I60386, b/235529345) - เพิ่ม
LifecycleStartEffect
API เพื่อเรียกใช้ ComposeSideEffect
โดยอิงตาม Callback เหตุการณ์Lifecycle.Event.ON_START
และLifecycle.Event.ON_STOP
(I5a8d1, b/235529345) - เพิ่ม
LifecycleEventEffect
API เพื่อเรียกใช้ ComposeSideEffect
ตามLifecycle.Event
แล้ว (Ic9794, b/235529345) - เพิ่มส่วนขยาย
Lifecycle.collectAsState()
เพื่อแสดงLifecycle.State
เป็นเขียนState
โดยตรง ซึ่งเทียบเท่ากับlifecycle.currentStateFlow.collectAsState()
(และเป็นทางเลือกที่สั้นกว่า) (I11015, b/235529345)
การแก้ไขข้อบกพร่อง
- ตอนนี้ส่วนขยาย
LiveData.distinctUntilChanged()
จะตั้งค่าvalue
ของLiveData
ที่แสดงผล หากLiveData
ก่อนหน้ามีการตั้งค่าไว้ การดำเนินการนี้จะไม่เปลี่ยนลักษณะการสังเกต ค่าที่อัปเดตจากแหล่งที่มาLiveData
จะยังคงมีผลต่อเมื่อคุณเริ่มสังเกตLiveData
ที่แสดงผลจากdistinctUntilChanged()
เท่านั้น (Ib482f) - นํากฎ proguard keep ที่เชื่อมโยงกับ
LifecycleObserver
ออกแล้ว ซึ่งหมายความว่าโค้ดที่ได้รับการป้องกันซึ่งต้องการใช้ API ผ่านการสะท้อนกลับจะต้องระบุกฎการเก็บรักษาของตนเองสำหรับ Use Case ที่เฉพาะเจาะจง (Ia12fd)
เวอร์ชัน 2.6
เวอร์ชัน 2.6.2
6 กันยายน 2023
androidx.lifecycle:lifecycle-*:2.6.2
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
SavedStateHandle
จะไม่ได้รับการกู้คืนอย่างถูกต้องหลังจากกระบวนการสิ้นสุดลง หากมีการกู้คืนสถานะ มีการเรียกsave()
โดยไม่บันทึกสถานะในSavedStateRegistry
หลัก แล้วมีการกู้คืนสถานะอีกครั้ง การแก้ไขนี้จะช่วยแก้ไขการโต้ตอบระหว่างrememberSaveable
กับNavHost
ของ Navigation Compose (aosp/2729289)
เวอร์ชัน 2.6.1
22 มีนาคม 2023
androidx.lifecycle:lifecycle-*:2.6.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.1 มีคอมมิตเหล่านี้
การอัปเดตทรัพยากร Dependency
- ตอนนี้
lifecycle-viewmodel-savedstate
ขึ้นอยู่กับ SavedState1.2.1
(cd7251) - ตอนนี้วงจรขึ้นอยู่กับ ProfileInstaller
1.3.0
(f9d30b)
เวอร์ชัน 2.6.0
8 มีนาคม 2023
androidx.lifecycle:lifecycle-*:2.6.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 2.5.0
- ตอนนี้
LiveData
มีพร็อพเพอร์ตี้isInitialized
ใหม่ซึ่งระบุว่ามีการตั้งค่าค่าที่ชัดเจนในLiveData
หรือไม่ ซึ่งจะช่วยให้คุณแยกความแตกต่างระหว่างliveData.value
ที่แสดงผลnull
เนื่องจากไม่มีการตั้งค่าค่าใดๆ เลย หรือค่าnull
ที่ชัดเจน - ตอนนี้
MediatorLiveData
มีคอนสตรัคเตอร์เพื่อตั้งค่าเริ่มต้นแล้ว - เพิ่มส่วนขยายใหม่ใน
StateFlow
และFlow
ของcollectAsStateWithLifecycle()
ที่รวบรวมจากโฟลว์และแสดงค่าล่าสุดเป็นสถานะการคอมโพสิทในลักษณะที่คำนึงถึงวงจรของลูกค้า - เราได้เลิกใช้งานเมธอด
Lifecycle.launchWhenX
และเมธอดLifecycle.whenX
เนื่องจากการใช้ตัวจัดเตรียมการหยุดชั่วคราวอาจทําให้สิ้นเปลืองทรัพยากรในบางกรณี ขอแนะนำให้ใช้Lifecycle.repeatOnLifecycle
ดูข้อมูลเพิ่มเติมเกี่ยวกับการระงับงานแบบครั้งเดียวได้ที่คำอธิบายนี้ว่าเหตุใดจึงถือว่าไม่ปลอดภัย - การแปลงเป็น Kotlin - คลาส Lifecycle จํานวนมากได้รับการแปลงเป็น Kotlin แล้ว ชั้นเรียนที่แปลงแล้วทั้งหมดจะยังคงเข้ากันได้กับไบนารีของเวอร์ชันก่อนหน้า คลาสต่อไปนี้มีการเปลี่ยนแปลงที่เข้ากันไม่ได้กับแหล่งที่มาสำหรับคลาสที่เขียนด้วย Kotlin ได้แก่
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
ตารางด้านล่างแสดง Conversion แหล่งที่มาของวงจรของลูกค้าเวอร์ชันใหม่
Lifecycle 2.5 | วงจร 2.5 (KTX) | วงจร 2.6 |
---|---|---|
Transformations.switchMap(liveData) {...} |
liveData.switchMap {...} |
liveData.switchMap {...} |
Transformations.map(liveData) {...} |
liveData.map {...} |
liveData.map {...} |
Transformations.distinctUntilChanged(liveData) {...} |
liveData.distinctUntilChanged{...} |
liveData.distinctUntilChanged{...} |
LiveDataReactiveStreams.fromPublisher(publisher) |
publisher.toLiveData() |
publisher.toLiveData() |
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) |
liveData.toPublisher(lifecycleOwner) |
liveData.toPublisher(lifecycleOwner) |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override val defaultViewModelProviderFactory = factory |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override val defaultViewModelProviderCreationExtras = extras |
ViewTreeLifecycleOwner.set(view, owner) |
ViewTreeLifecycleOwner.set(view, owner) |
view.setViewTreeLifecycleOwner(owner) |
ViewTreeLifecycleOwner.get(view) |
view.findViewTreeLifecycleOwner() |
view.findViewTreeLifecycleOwner() |
override fun getViewModelStore(): ViewModelStore = store |
override fun getViewModelStore(): ViewModelStore = store |
override val viewModelStore: ViewModelStore = store |
override fun getLifecycle(): Lifecycle = registry |
override fun getLifecycle(): Lifecycle = registry |
override val lifecycle: Lifecycle get() = registry |
- ตอนนี้ nullability ของเมธอด
onChanged
ของObserver
ที่สร้างขึ้นใน Kotlin จะตรงกับ nullability ของประเภททั่วไป หากต้องการให้Observer.onChanged()
ยอมรับประเภทที่อนุญาตค่า Null คุณต้องสร้างอินสแตนซ์Observer
ด้วยประเภทที่อนุญาตค่า Null - คลาสเหล่านี้ยังได้รับการแปลงเป็น Kotlin ด้วย แต่ยังคงเข้ากันได้กับซอร์สโค้ด
DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
,ViewModelStore
,AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
และProcessLifecycleOwner
เวอร์ชัน 2.6.0-rc01
22 กุมภาพันธ์ 2023
androidx.lifecycle:lifecycle-*:2.6.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ส่วนขยาย
LiveData.distinctUntilChanged()
จะตั้งค่าvalue
ของLiveData
ที่แสดงผล หากLiveData
ก่อนหน้ามีการตั้งค่าไว้ การดำเนินการนี้จะไม่เปลี่ยนลักษณะการสังเกต ค่าที่อัปเดตจากแหล่งที่มาLiveData
จะยังคงมีผลต่อเมื่อคุณเริ่มสังเกตLiveData
ที่แสดงผลจากdistinctUntilChanged()
เท่านั้น (Ib482f)
เวอร์ชัน 2.6.0-beta01
8 กุมภาพันธ์ 2023
androidx.lifecycle:lifecycle-*:2.6.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-beta01 มีการคอมมิตเหล่านี้
Conversion ของ Kotlin
LifecycleOwner
เขียนด้วย Kotlin แล้ว นี่เป็นการเปลี่ยนแปลงที่เข้ากันไม่ได้กับซอร์สโค้ดสำหรับคลาสที่เขียนด้วย Kotlin ซึ่งตอนนี้ต้องลบล้างพร็อพเพอร์ตี้lifecycle
แทนการใช้ฟังก์ชันgetLifecycle()
ก่อนหน้านี้ (I75b4b, b/240298691)ViewModelStoreOwner
เปลี่ยนเป็น Kotlin แล้ว นี่เป็นการเปลี่ยนแปลงที่เข้ากันไม่ได้กับซอร์สโค้ดสำหรับคลาสที่เขียนด้วย Kotlin ซึ่งตอนนี้ต้องลบล้างพร็อพเพอร์ตี้viewModelStore
แทนการใช้ฟังก์ชันgetViewModelStore()
ก่อนหน้านี้ (I86409, b/240298691)- ชิ้นงาน Kotlin ใน
LifecycleOwner
ที่ระบุช่องlifecycleScope
ได้ย้ายไปยังชิ้นงานlifecycle-common
จากlifecycle-runtime-ktx
แล้ว (I41d78, b/240298691) - ชิ้นงาน Kotlin ใน
Lifecycle
ที่ระบุช่องcoroutineScope
ได้ย้ายไปยังชิ้นงานlifecycle-common
จากlifecycle-runtime-ktx
แล้ว (Iabb91, b/240298691)
เวอร์ชัน 2.6.0-alpha05
25 มกราคม 2023
androidx.lifecycle:lifecycle-*:2.6.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha05 มีการคอมมิตเหล่านี้
Conversion ของ Kotlin
Transformations
เขียนด้วย Kotlin แล้ว นี่เป็นการเปลี่ยนแปลงที่ไม่เข้ากันได้กับซอร์สโค้ดสำหรับคลาสที่เขียนด้วย Kotlin โดยใช้ไวยากรณ์โดยตรง เช่นTransformations.map
- ตอนนี้โค้ด Kotlin ต้องใช้ไวยากรณ์เมธอดส่วนขยาย Kotlin ซึ่งก่อนหน้านี้ใช้ได้เฉพาะเมื่อใช้lifecycle-livedata-ktx
เมื่อใช้ภาษาโปรแกรม Java ระบบจะเลิกใช้งานเมธอดเหล่านี้เวอร์ชันที่ใช้เมธอดandroidx.arch.core.util.Function
และแทนที่ด้วยเวอร์ชันที่ใช้Function1
ของ Kotlin การเปลี่ยนแปลงนี้ยังคงความเข้ากันได้ของไบนารี (I8e14f)ViewTreeViewModelStoreOwner
เขียนด้วย Kotlin แล้ว นี่เป็นการเปลี่ยนแปลงที่เข้ากันไม่ได้กับซอร์สโค้ดสำหรับคลาสเหล่านั้นที่เขียนด้วย Kotlin ตอนนี้คุณต้องนำเข้าและใช้เมธอดส่วนขยาย Kotlin ในView
ของandroidx.lifecycle.setViewTreeViewModelStoreOwner
และandroidx.lifecycle.findViewTreeViewModelStoreOwner
โดยตรงเพื่อตั้งค่าและค้นหาเจ้าของที่ตั้งไว้ก่อนหน้านี้ เวอร์ชันนี้เข้ากันได้กับไบนารีและยังคงเข้ากันได้กับซอร์สโค้ดสําหรับการใช้งานที่เขียนขึ้นในภาษาโปรแกรม Java (Ia06d8, Ib22d8, b/240298691)- ตอนนี้อินเทอร์เฟซ
HasDefaultViewModelProviderFactory
เขียนด้วย Kotlin แล้ว นี่เป็นการเปลี่ยนแปลงที่ไม่เข้ากันได้กับแหล่งที่มาสำหรับคลาสที่เขียนด้วย Kotlin ซึ่งตอนนี้ต้องลบล้างพร็อพเพอร์ตี้defaultViewModelProviderFactory
และdefaultViewModelCreationExtras
แทนการใช้ฟังก์ชันที่เกี่ยวข้องก่อนหน้านี้ (Iaed9c, b/240298691) Observer
เขียนด้วย Kotlin แล้ว ตอนนี้เมธอดonChanged()
ใช้ชื่อvalue
สำหรับพารามิเตอร์แล้ว (Iffef2, I4995e, b/240298691)- ตอนนี้
AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
และProcessLifecycleOwner
เขียนด้วย Kotlin แล้ว (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)
เวอร์ชัน 2.6.0-alpha04
11 มกราคม 2023
androidx.lifecycle:lifecycle-*:2.6.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
LiveData
มีพร็อพเพอร์ตี้isInitialized
ใหม่ซึ่งระบุว่ามีการตั้งค่าค่าที่ชัดเจนในLiveData
หรือไม่ ซึ่งจะช่วยให้คุณแยกความแตกต่างระหว่างliveData.value
ที่แสดงผลnull
เนื่องจากไม่มีการตั้งค่าค่าใดๆ เลย หรือค่าnull
ที่ชัดเจน (Ibd018)
การเปลี่ยนแปลง API
- API
collectAsStateWithLifecycle()
ของlifecycle-runtime-compose
ไม่ได้อยู่ในสถานะทดลองอีกต่อไป (I09d42, b/258835424) - เราได้เลิกใช้งานเมธอด
Lifecycle.launchWhenX
และเมธอดLifecycle.whenX
เนื่องจากการใช้ตัวจัดเตรียมการหยุดชั่วคราวอาจทําให้สิ้นเปลืองทรัพยากรในบางกรณี ขอแนะนำให้ใช้Lifecycle.repeatOnLifecycle
(Iafc54, b/248302832)
Conversion ของ Kotlin
ViewTreeLifecycleOwner
เขียนด้วย Kotlin แล้ว นี่เป็นการเปลี่ยนแปลงที่เข้ากันไม่ได้กับซอร์สโค้ดสำหรับคลาสเหล่านั้นที่เขียนด้วย Kotlin ตอนนี้คุณต้องนำเข้าและใช้เมธอดส่วนขยาย Kotlin ในView
ของandroidx.lifecycle.setViewTreeLifecycleOwner
และandroidx.lifecycle.findViewTreeLifecycleOwner
โดยตรงเพื่อตั้งค่าและค้นหาเจ้าของที่ตั้งไว้ก่อนหน้านี้ ซึ่งจะแทนที่ส่วนขยาย Kotlin ก่อนหน้านี้ในlifecycle-runtime-ktx
เวอร์ชันนี้เข้ากันได้กับไบนารีและยังคงเข้ากันได้กับซอร์สโค้ดสําหรับการใช้งานที่เขียนขึ้นในภาษาโปรแกรม Java (I8a77a, I5234e, b/240298691)LiveDataReactiveStreams
เขียนด้วย Kotlin แล้ว ส่วนขยาย Kotlin ที่เคยอยู่ในlifecycle-reactivestreams-ktx
ได้ย้ายไปอยู่ในโมดูลlifecycle-reactivestreams
แล้ว และกลายเป็นแพลตฟอร์มหลักสำหรับโค้ดที่เขียนด้วย Kotlin นี่เป็นการเปลี่ยนแปลงที่ไม่เข้ากันได้กับซอร์สโค้ดสําหรับโค้ดที่เขียนด้วย Kotlin หากคุณยังไม่ได้ใช้ API ของเมธอดส่วนขยาย Kotlin (I2b1b9, I95d22, b/240298691)- ตอนนี้
DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
และViewModelStore
เขียนด้วย Kotlin แล้ว (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)
การแก้ไขข้อบกพร่อง
SavedStateHandle
ไม่ขัดข้องด้วยClassCastException
อีกต่อไปเมื่อเรียกget()
ด้วยประเภทคลาสที่ไม่ถูกต้อง (I6ae7c)
เวอร์ชัน 2.6.0-alpha03
24 ตุลาคม 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha03 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาข้อจำกัดระหว่างโมดูลวงจรของลูกค้าแต่ละโมดูลไม่ทำงานตามที่ตั้งใจไว้ (I18d0d, b/249686765)
- ตอนนี้ข้อผิดพลาดที่
LifecycleRegistry.moveToState()
แสดงจะมีข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์มากขึ้นซึ่งแจ้งให้นักพัฒนาซอฟต์แวร์ทราบเกี่ยวกับคอมโพเนนต์ที่ทำให้เกิดข้อผิดพลาด (Idf4b2, b/244910446)
เวอร์ชัน 2.6.0-alpha02
7 กันยายน 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
MediatorLiveData
มีคอนสตรัคเตอร์เพื่อตั้งค่าเริ่มต้นแล้ว (Ib6cc5, b/151244085)
การแก้ไขข้อบกพร่อง
- ตอนนี้อาร์ติแฟกต์
Lifecycle
มีข้อจำกัดที่ช่วยให้มั่นใจว่าอาร์ติแฟกต์วงจรที่เกี่ยวข้องทั้งหมดใช้เวอร์ชันเดียวกัน โดยจะอัปเกรดข้อกำหนดอื่นๆ โดยอัตโนมัติเมื่อมีการอัปเกรดข้อกำหนดหนึ่ง b/242871265 - ตอนนี้
FlowLiveData.asFlow()
จะสร้างcallbackFlow
แทนการใช้การติดตั้งใช้งานChannel
ของตนเองเพื่อให้แน่ใจว่ามีความปลอดภัยในแง่ของชุดข้อความและรักษาบริบท (I4a8b2, b/200596935) - ตอนนี้ฟังก์ชัน
asLiveData
ของFlowLiveData
จะเก็บค่าเริ่มต้นของStateFlow
ไว้เมื่อสร้างออบเจ็กต์LiveData
ใหม่ (I3f530, b/157380488) - จากวงจร
2.5.1
: ตอนนี้การใช้งานAndroidViewModelFactory
ที่กําหนดเองจะเรียกใช้ฟังก์ชันcreate(modelClass)
อย่างถูกต้องเมื่อใช้คอนสตรคเตอร์ที่มีสถานะกับLifecycle
2.4 ขึ้นไป (I5b315, b/238011621)
เวอร์ชัน 2.6.0-alpha01
29 มิถุนายน 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มส่วนขยายใหม่ใน
StateFlow
และFlow
ของcollectAsStateWithLifecycle
ที่รวบรวมจากโฟลว์และแสดงค่าล่าสุดเป็นสถานะการคอมโพสิทในลักษณะที่คำนึงถึงวงจรของลูกค้า ระบบจะรวบรวมโฟลว์และตั้งค่าการปล่อยมลพิษใหม่เป็นค่าของสถานะเมื่อวงจรอยู่ในช่วงLifecycle.State
อย่างน้อย เมื่อวงจรของลูกค้าต่ำกว่าLifecycle.State
นั้น ระบบจะหยุดรวบรวมข้อมูลการเรียกใช้และจะไม่อัปเดตค่าสถานะ (I1856e, b/230557927)
เวอร์ชัน 2.5
เวอร์ชัน 2.5.1
27 กรกฎาคม 2022
androidx.lifecycle:lifecycle-*:2.5.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การใช้งาน
AndroidViewModelFactory
ที่กําหนดเองจะเรียกใช้ฟังก์ชันcreate(modelClass)
อย่างถูกต้องเมื่อใช้คอนสตรคเตอร์AndroidViewModelFactory
ที่มีสถานะกับLifecycle
2.4 ขึ้นไป (I5b315, b/238011621)
เวอร์ชัน 2.5.0
29 มิถุนายน 2022
androidx.lifecycle:lifecycle-*:2.5.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.4.0
ตอนนี้
SavedStateHandle
มีgetStateFlow()
API ที่แสดงผล KotlinStateFlow
สำหรับการตรวจสอบการเปลี่ยนแปลงค่าแทนการใช้LiveData
ViewModel CreationExtras - เมื่อเขียน
ViewModelProvider.Factory
ที่กําหนดเอง คุณไม่จําเป็นต้องขยายAndroidViewModelFactory
หรือAbstractSavedStateViewModelFactory
เพื่อเข้าถึงApplication
หรือSavedStateHandle
ตามลําดับอีกต่อไป แต่ระบบจะส่งฟิลด์เหล่านี้ไปยังคลาสย่อยViewModelProvider.Factory
ทุกคลาสเป็นCreationExtras
ผ่านcreate
แบบโอเวอร์โหลดใหม่:create(Class<T>, CreationExtras)
ข้อมูลเพิ่มเติมเหล่านี้จะมาจากกิจกรรมหรือข้อมูลโค้ดโดยอัตโนมัติเมื่อใช้ Activity1.5.0
และ Fragment1.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
มีviewModelFactory
Kotlin DSL ที่ช่วยให้คุณกำหนดViewModelProvider.Factory
ในแง่ของเงื่อนไขเริ่มต้นของ Lambda อย่างน้อย 1 รายการ โดย 1 รายการสำหรับคลาสViewModel
แต่ละคลาสที่โรงงานที่กำหนดเองรองรับ โดยใช้CreationExtras
เป็นแหล่งข้อมูลหลัก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
มีviewModel()
API ที่ใช้ Lambda Factory เพื่อสร้างอินสแตนซ์ViewModel
โดยไม่ต้องสร้างViewModelProvider.Factory
ที่กำหนดเอง// 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) }
การผสานรวมเครื่องมือของ Compose Saver กับ SavedStateHandle - ตอนนี้อาร์ติแฟกต์
lifecycle-viewmodel-compose
มี API เวอร์ชันทดลองใหม่ในSavedStateHandle.saveable
ซึ่งช่วยให้มีการทำงานแบบrememberSaveable
ที่รองรับโดยSavedStateHandle
ของ ViewModelclass ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
เพิ่ม
addCloseable()
API และตัวสร้างโอเวอร์โหลดใหม่ที่ช่วยให้คุณเพิ่มออบเจ็กต์Closeable
อย่างน้อย 1 รายการลงในViewModel
ซึ่งจะปิดเมื่อล้างViewModel
โดยไม่ต้องดำเนินการใดๆ ด้วยตนเองในonCleared()
เช่น หากต้องการสร้างขอบเขต coroutine ที่คุณสามารถแทรกลงใน ViewModel แต่ควบคุมผ่านการทดสอบได้ ให้สร้าง
CoroutineScope
ที่ใช้Closeable
ดังนี้class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
ซึ่งจะใช้ใน
ViewModel
คอนสตรัคเตอร์ได้ขณะที่ยังคงอายุการใช้งานเดียวกับviewModelScope
class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้การพยายามย้าย
Lifecycle.State
จากINITIALIZED
ไปยังDESTROYED
จะแสดงIllegalStateException
เสมอ ไม่ว่าLifecycle
จะมีผู้สังเกตการณ์ที่แนบอยู่หรือไม่ก็ตาม - ตอนนี้
LifecycleRegistry
จะล้างผู้สังเกตการณ์เมื่อถึงสถานะDESTROYED
เวอร์ชัน 2.5.0-rc02
15 มิถุนายน 2022
androidx.lifecycle:lifecycle-*:2.5.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-rc02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
ViewModelProvider
จะไม่ขัดข้องอีกต่อไปเมื่อใช้ไลฟ์ไซเคิล compileOnly เวอร์ชันเก่าร่วมกับเวอร์ชัน 2.5 ขึ้นไป (I81a66, b/230454566)
เวอร์ชัน 2.5.0-rc01
11 พฤษภาคม 2022
androidx.lifecycle:lifecycle-*:2.5.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
MediatorLiveData.addSource()
จะแสดงข้อยกเว้นNullPointerException
เมื่อส่งผ่านแหล่งที่มาnull
แทนที่จะส่งต่อแหล่งที่มาnull
ไปยังผู้สังเกตการณ์ (Ibd0fb, b/123085232)
เวอร์ชัน 2.5.0-beta01
20 เมษายน 2022
androidx.lifecycle:lifecycle-*:2.5.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มผู้รับมอบสิทธิ์พร็อพเพอร์ตี้
SavedStateHandle.saveable
เพื่อใช้ชื่อพร็อพเพอร์ตี้เป็นคีย์สำหรับเก็บสถานะไว้ในSavedStateHandle
(I8bb86, b/225014345)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การฝัง
NavHost
รายการหนึ่งภายในNavHost
อีกรายการหนึ่งในแท็บการนำทางด้านล่างที่ไม่ใช่แท็บหลักจะทำให้IllegalStateException
แสดงขึ้นเมื่อใช้กองซ้อนกลับหลายรายการ (I11bd5, b/228865698)
เวอร์ชัน 2.5.0-alpha06
6 เมษายน 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha06 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการโอเวอร์โหลด
MutableState
เวอร์ชันทดลองลงในSavedStateHandle.saveable
เพื่อให้ทัดเทียมกับrememberSaveable
(I38cfe, b/224565154)
การเปลี่ยนแปลง API
CreationExtras
เป็นนามธรรมแทนที่จะเป็นแบบปิด (Ib8a7a)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาด
IllegalStateException: Already attached to lifecycleOwner
ที่เกิดจากSavedStateHandleController
(I7ea47, b/215406268)
เวอร์ชัน 2.5.0-alpha05
23 มีนาคม 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha05 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้โมดูล
lifecycle-viewmodel-compose
มีSavedStateHandleSaver
ซึ่งเป็น API เวอร์ชันทดลองที่ช่วยให้มั่นใจได้ว่าค่าในSavedStateHandle
จะผสานรวมกับสถานะอินสแตนซ์ที่บันทึกไว้เดียวกันกับที่rememberSaveable
ใช้อย่างถูกต้อง (Ia88b7, b/195689777)
การเปลี่ยนแปลง API
- แก้ไขปัญหาความเข้ากันได้กับ Lifecycle 2.3 และ Lifecycle เวอร์ชันที่ใหม่กว่าใน Java (I52c8a, b/219545060)
การแก้ไขข้อบกพร่อง
- ตอนนี้
SavedStateViewFactory
รองรับการใช้CreationExtras
แม้ว่าจะเริ่มต้นด้วยSavedStateRegistryOwner
ก็ตาม หากระบุข้อมูลเพิ่มเติม ระบบจะไม่สนใจอาร์กิวเมนต์ที่เริ่มต้น (I6c43b, b/224844583)
เวอร์ชัน 2.5.0-alpha04
9 มีนาคม 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha04 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
SavedStateHandle
มีgetStateFlow()
API ที่แสดงผล KotlinStateFlow
สำหรับการตรวจสอบการเปลี่ยนแปลงค่าแทนการใช้LiveData
(Iad3ab, b/178037961)
เวอร์ชัน 2.5.0-alpha03
23 กุมภาพันธ์ 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม
addCloseable()
API และตัวสร้างใหม่แบบโอเวอร์โหลดที่ช่วยให้คุณเพิ่มออบเจ็กต์Closeable
อย่างน้อย 1 รายการลงในViewModel
ซึ่งจะปิดเมื่อล้างViewModel
โดยไม่ต้องดำเนินการใดๆ ด้วยตนเองในonCleared()
(I55ea0) - ตอนนี้
lifecycle-viewmodel
มีInitializerViewModelFactory
ที่ช่วยให้คุณเพิ่ม Lambda เพื่อจัดการกับคลาสViewModel
บางคลาสได้โดยใช้CreationExtras
เป็นแหล่งข้อมูลหลัก (If58fc, b/216687549) - ตอนนี้
lifecycle-viewmodel-compose
มีviewModel()
API ที่ใช้ Lambda Factory เพื่อสร้างอินสแตนซ์ViewModel
โดยไม่ต้องสร้างViewModelProvider.Factory
ที่กำหนดเอง (I97fbb, b/216688927)
การเปลี่ยนแปลง API
- ตอนนี้คุณสร้าง
ViewModel
กับCreationExtras
ผ่านlifecycle-viewmodel-compose
ได้แล้ว (I08887, b/216688927)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้การพยายามย้าย
Lifecycle.State
จากINITIALIZED
ไปDESTROYED
จะแสดงIllegalStateException
เสมอ ไม่ว่าLifecycle
จะมีผู้สังเกตการณ์ที่แนบอยู่หรือไม่ก็ตาม (I7c390, b/177924329) - ตอนนี้
LifecycleRegistry
จะล้างผู้สังเกตการณ์เมื่อถึงสถานะDESTROYED
(I4f8dd, b/142925860)
เวอร์ชัน 2.5.0-alpha02
9 กุมภาพันธ์ 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
SavedStateHandle
และSavedStateViewModelFactory
ได้รับการแปลงเป็น Kotlin แล้ว ซึ่งช่วยปรับปรุงความสามารถในการเป็น Null ของแบบทั่วไปในทั้ง 2 คลาส (Ib6ce2, b/216168263, I9647a, b/177667711)- ตอนนี้พารามิเตอร์ฟังก์ชัน
LiveData
switchMap
อาจมีเอาต์พุตที่อนุญาตค่า Null (I40396, b/132923666) - ตอนนี้ส่วนขยาย
LiveData
-ktx ได้รับการกำกับเนื้อหาด้วย@CheckResult
เพื่อบังคับให้ระบบใช้ผลลัพธ์เมื่อเรียกใช้ฟังก์ชันเหล่านี้ (Ia0f05, b/207325134)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
SavedStateHandle
จะจัดเก็บ defaultValue อย่างถูกต้องเมื่อไม่มีค่าสําหรับคีย์ที่ระบุ (I1c6ce, b/178510877)
การแก้ไขข้อบกพร่อง
- จากวงจร
2.4.1
: อัปเดตlifecycle-process
ให้ใช้ Startup 1.1.1 เพื่อให้การแก้ไขที่ป้องกันไม่ให้ProcessLifecycleInitializer
แสดงStartupException
พร้อมใช้งานโดยค่าเริ่มต้น (Ib01df, b/216490724) - ตอนนี้ข้อความแสดงข้อผิดพลาดได้รับการปรับปรุงแล้วเมื่อคลาส
AndroidViewModel
ที่กําหนดเองมีพารามิเตอร์ในลําดับที่ไม่ถูกต้องและพยายามสร้างViewModel
(I340f7, b/177667711) - ตอนนี้คุณสร้างโมเดลมุมมองผ่าน
CreationExtras
โดยใช้AndroidViewModelFactory
ได้แล้วโดยไม่ต้องตั้งค่าแอปพลิเคชัน (I6ebef, b/217271656)
เวอร์ชัน 2.5.0-alpha01
26 มกราคม 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha01 มีการคอมมิตเหล่านี้
ViewModel CreationExtras
การเปิดตัวครั้งนี้เป็นการวางรากฐานสําหรับการปรับโครงสร้างวิธีสร้าง ViewModel
แทนที่จะเป็นชุดคลาสย่อยของ ViewModelProvider.Factory
ที่เข้มงวดซึ่งแต่ละคลาสเพิ่มฟังก์ชันการทำงานเพิ่มเติม (อนุญาตให้ใช้พารามิเตอร์คอนสตรัคเตอร์ Application
ผ่าน AndroidViewModelFactory
, อนุญาตให้ใช้พารามิเตอร์คอนสตรัคเตอร์ SavedStateHandle
ผ่าน SavedStateViewModelFactory
และ AbstractSavedStateViewModelFactory
เป็นต้น) เรากําลังเข้าสู่โลกของโรงงานแบบไม่มีสถานะที่อาศัยแนวคิดใหม่อย่าง CreationExtras
(Ia7343, b/188691010, b/188541057)
การเปลี่ยนแปลงนี้ทำให้ ViewModelProvider
ไม่เรียกใช้เมธอด create(Class<T>)
ก่อนหน้าของ ViewModelProvider.Factory
โดยตรงอีกต่อไป แต่ระบบจะเรียกใช้ create
: create(Class<T>, CreationExtras)
ซึ่งเป็นการโอเวอร์โหลดใหม่แทน ซึ่งหมายความว่าตอนนี้การติดตั้งใช้งาน ViewModelProvider.Factory
โดยตรงจะมีสิทธิ์เข้าถึง CreationExtras
ใหม่แต่ละรายการต่อไปนี้
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
:String
นี้ให้สิทธิ์เข้าถึงคีย์ที่กำหนดเองที่คุณส่งไปยังViewModelProvider.get()
ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
ให้สิทธิ์เข้าถึงชั้นเรียนApplication
SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
ให้สิทธิ์เข้าถึงSavedStateRegistryOwner
ที่ใช้ในการสร้าง ViewModel นี้SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
ให้สิทธิ์เข้าถึงViewModelStoreOwner
ที่ใช้ในการสร้าง ViewModel นี้SavedStateHandleSupport.DEFAULT_ARGS_KEY
ให้สิทธิ์เข้าถึงBundle
ของอาร์กิวเมนต์ที่ควรใช้ในการสร้างSavedStateHandle
ระบบจะระบุข้อมูลเพิ่มเติมเหล่านี้โดยค่าเริ่มต้นเมื่อใช้ Activity 1.5.0-alpha01
, Fragment 1.5.0-alpha01
และ Navigation 2.5.0-alpha01
หากคุณใช้ไลบรารีเหล่านั้นเวอร์ชันเก่า CreationExtras
จะว่างเปล่า คลาสย่อยที่มีอยู่ทั้งหมดของ ViewModelProvider.Factory
ได้รับการเขียนใหม่เพื่อรองรับทั้งเส้นทางการสร้างเดิมที่ใช้โดยไลบรารีเหล่านั้นเวอร์ชันเก่าและเส้นทาง CreationExtras
ที่จะนำมาใช้ในอนาคต
CreationExtras
เหล่านี้ช่วยให้คุณสร้าง ViewModelProvider.Factory
ที่ส่งเฉพาะข้อมูลที่ต้องการไปยัง ViewModel
แต่ละรายการได้โดยไม่ต้องอาศัยลําดับชั้นที่เข้มงวดของคลาสย่อย Factory
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
}
}
เราใช้ฟังก์ชันส่วนขยาย createSavedStateHandle()
Kotlin ใน CreationExtras
จาก SavedStateHandleSupport
เพื่อสร้าง SavedStateHandle
สำหรับ ViewModel รายการเดียวที่ต้องการเท่านั้น (Ia6654, b/188541057)
คุณสามารถระบุ CreationExtras
ที่กำหนดเองได้โดยลบล้าง getDefaultViewModelCreationExtras()
ใน ComponentActivity
หรือ Fragment
ซึ่งจะทำให้ ViewModelProvider.Factory
ที่กําหนดเองพร้อมใช้งานในรูปแบบการฉีดข้อมูลแบบช่วยที่ติดตั้งมาในตัว ฟีเจอร์เพิ่มเติมเหล่านี้จะพร้อมใช้งานใน Factory ที่กำหนดเองโดยอัตโนมัติเมื่อใช้กับ ViewModelProvider
โดยตรง หรือเมื่อใช้ส่วนขยายพร็อพเพอร์ตี้ by viewModels()
และ by activityViewModels()
ของ Kotlin (I79f2b, b/207012584, b/207012585, b/207012490)
การแก้ไขข้อบกพร่อง
- แก้ปัญหาที่ค่าเริ่มต้นที่ระบุให้กับ
SavedStateHandle
จะปรากฏขึ้นอีกครั้งหลังจากกระบวนการสิ้นสุดและสร้างใหม่ แม้ว่าจะมีการนำค่าดังกล่าวออกจากSavedStateHandle
โดยเฉพาะแล้วก็ตาม ด้วยเหตุนี้SavedStateHandle
จะไม่ผสานค่าเริ่มต้นและค่าที่กู้คืนไว้เข้าด้วยกันอีกต่อไป แต่จะใช้เป็นข้อมูลอ้างอิงเพียงแหล่งเดียว (I53a4b)
เวอร์ชัน 2.4
เวอร์ชัน 2.4.1
9 กุมภาพันธ์ 2022
androidx.lifecycle:lifecycle-*:2.4.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ย้ายข้อมูลจาก Lifecycle
2.5.0-alpha01
: แก้ไขปัญหาที่ค่าเริ่มต้นที่ให้ไว้กับSavedStateHandle
จะปรากฏขึ้นอีกครั้งหลังจากกระบวนการสิ้นสุดและสร้างใหม่ แม้ว่าจะมีการนำค่าดังกล่าวออกจากSavedStateHandle
โดยเฉพาะแล้วก็ตาม ด้วยเหตุนี้SavedStateHandle
จะไม่ผสานค่าเริ่มต้นและค่าที่กู้คืนไว้เข้าด้วยกันอีกต่อไป แต่จะใช้เป็นข้อมูลอ้างอิงเพียงแหล่งเดียว (I53a4b) - ตอนนี้
lifecycle-process
ขึ้นอยู่กับ Androidx Startup 1.1.1 ซึ่งแก้ไขการถดถอยในการใช้ProcessLifecycleInitializer
ที่ทำให้เกิดStartupException
(b/216490724)
เวอร์ชัน 2.4.0
27 ตุลาคม 2021
androidx.lifecycle:lifecycle-*:2.4.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.3.0
@OnLifecycleEvent
เลิกใช้งานแล้ว ควรใช้LifecycleEventObserver
หรือDefaultLifecycleObserver
แทน- เพิ่มคลัง
androidx.lifecycle:lifecycle-viewmodel-compose
แล้ว โดยจะมีviewModel()
แบบคอมโพสิเบิลและLocalViewModelStoreOwner
- การเปลี่ยนแปลงที่ทําให้แหล่งที่มาใช้งานไม่ได้:
ViewModelProvider
เขียนใหม่เป็น Kotlin แล้ว เมธอดViewModelProvider.Factory.create
ไม่อนุญาตให้ใช้แบบทั่วไปที่อนุญาตค่า Null อีกต่อไป
- การเปลี่ยนแปลงที่ทําให้แหล่งที่มาใช้งานไม่ได้:
- เพิ่ม API โคโรไทม์ใหม่ลงใน
androidx.lifecycle:lifecycle-runtime-ktx
Lifecycle.repeatOnLifecycle
ซึ่งเป็น API ที่เรียกใช้บล็อกโค้ดในโคโริวทีนเมื่อวงจรอยู่ในช่วงสถานะหนึ่งๆ เป็นอย่างน้อย บล็อกจะยกเลิกและเปิดใช้งานอีกครั้งเมื่อวงจรของลูกค้าย้ายเข้าและออกจากสถานะเป้าหมายFlow.flowWithLifecycle
, API ที่ส่งค่าจากโฟลว์ต้นทางเมื่อวงจรอยู่ในสถานะหนึ่งๆ เป็นอย่างน้อย- ย้าย
DefaultLifecycleObserver
จากlifecycle.lifecycle-common-java8
ไปที่lifecycle.lifecycle-common
แล้วlifecycle.lifecycle-common-java8
ไม่มีฟังก์ชันการทำงานเพิ่มเติมนอกเหนือจากlifecycle.lifecycle-common
แล้ว ดังนั้นจึงใช้lifecycle.lifecycle-common
แทนได้ - ย้าย API ที่ไม่ใช่ Coroutine จาก
lifecycle-viewmodel-ktx
ไปยังโมดูลlifecycle-viewmodel
แล้ว ตอนนี้
lifecycle-process
ใช้androidx.startup
เพื่อเริ่มต้นค่าProcessLifecycleOwner
ก่อนหน้านี้
androidx.lifecycle.ProcessLifecycleOwnerInitializer
เป็นผู้ดำเนินการหากคุณใช้
tools:node="remove"
ContentProvider
ที่ใช้เพื่อเริ่มต้นวงจรกระบวนการในอดีต คุณต้องทำดังนี้แทน<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>
(หรือ)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
เวอร์ชัน 2.4.0-rc01
29 กันยายน 2021
androidx.lifecycle:lifecycle-*:2.4.0-rc01
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจากวงจร 2.4.0-beta01 เวอร์ชัน 2.4.0-rc01 มีการคอมมิตเหล่านี้
เวอร์ชัน 2.4.0-beta01
15 กันยายน 2021
androidx.lifecycle:lifecycle-*:2.4.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
@OnLifecycleEvent
เลิกใช้งานแล้ว ควรใช้LifecycleEventObserver
หรือDefaultLifecycleObserver
แทน (I5a8fa)- ย้าย DefaultLifecycleObserver จาก
androidx.lifecycle.lifecycle-common-java8
ไปไว้ที่androidx.lifecycle.lifecycle-common
แล้วandroidx.lifecycle.lifecycle-common-java8
ไม่มีฟังก์ชันการทำงานเพิ่มเติมนอกเหนือจากandroidx.lifecycle.lifecycle-common
แล้ว คุณจึงใช้androidx.lifecycle.lifecycle-common
แทนได้ (I021aa) - ย้าย API ที่ไม่ใช่ Coroutine จาก
lifecycle-viewmodel-ktx
ไปยังข้อบังคับของlifecycle-viewmodel
แล้ว (I6d5b2)
การมีส่วนร่วมจากภายนอก
เวอร์ชัน 2.4.0-alpha03
4 สิงหาคม 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- การเปลี่ยนแปลงที่ทําให้โค้ดเวอร์ชันเก่าใช้งานไม่ได้: ViewModelProvider ได้รับการเขียนใหม่เป็น Kotlin
เมธอด
ViewModelProvider.Factory.create
ไม่อนุญาตให้ใช้แบบทั่วไปที่อนุญาตค่า Null อีกต่อไป (I9b9f6)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ระบบจะเรียกใช้
Lifecycle.repeatOnLifecycle
:block
เป็นอนุกรมเสมอเมื่อมีการเรียกใช้ซ้ำ (Ibab33)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ chao2zhang สำหรับการแก้ไขข้อมูลโค้ดในเอกสารประกอบ
repeatOnLifecycle
#205
เวอร์ชัน 2.4.0-alpha02
16 มิถุนายน 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม
RepeatOnLifecycleWrongUsage
การตรวจสอบโปรแกรมแก้ไขข้อบกพร่องใหม่ลงในlifecycle-runtime-ktx
ซึ่งจะตรวจจับเมื่อใช้repeateOnLifecycle
ในonStart()
หรือonResume()
อย่างไม่ถูกต้อง (706078, b/187887400)
การเปลี่ยนแปลง API
- ระบบนํา
LifecycleOwner.addRepeatingJob
API ออกแล้วเพื่อใช้Lifecycle.repeatOnLifecycle
ที่รองรับการทำงานพร้อมกันแบบมีโครงสร้างและทําความเข้าใจได้ง่ายขึ้น (I4a3a8) - ทำให้
ProcessLifecycleInitializer
เป็นสาธารณะเพื่อให้androidx.startup.Initializer
อื่นๆ ใช้ProcessLifecycleInitializer
เหล่านี้เป็น Dependency ได้ (I94c31)
การแก้ไขข้อบกพร่อง
- แก้ปัญหาเกี่ยวกับ
NullSafeMutableLiveData
การตรวจสอบโปรแกรมแก้ไขข้อบกพร่องเมื่อช่องมีตัวแก้ไข (#147, b/183696616) - แก้ไขปัญหาอีกอย่างหนึ่งเกี่ยวกับ
NullSafeMutableLiveData
การตรวจสอบโปรแกรมแก้ไขข้อบกพร่องเมื่อใช้ทั่วไป (#161, b/184830263)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ maxsav ที่ปรับปรุง
NullSafeMutableLiveData
การตรวจสอบโปรแกรมแก้ไขข้อบกพร่อง (#147, b/183696616) - ขอขอบคุณ kozaxinan ที่ปรับปรุง
NullSafeMutableLiveData
การตรวจสอบ Lint (#161, b/184830263)
เวอร์ชัน 2.4.0-alpha01
24 มีนาคม 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
ตอนนี้
lifecycle-process
ใช้androidx.startup
เพื่อเริ่มต้นค่าProcessLifecycleOwner
ก่อนหน้านี้
androidx.lifecycle.ProcessLifecycleOwnerInitializer
เป็นผู้ดำเนินการหากคุณใช้
tools:node="remove"
ContentProvider
ที่ใช้เพื่อเริ่มต้นวงจรกระบวนการในอดีต คุณต้องทำดังนี้แทน<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>
(หรือ)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
การเปลี่ยนแปลง API
- เพิ่ม
Flow.flowWithLifecycle
API ที่ส่งค่าจากโฟลว์ต้นทางเมื่อวงจรอยู่ในสถานะหนึ่งๆ อย่างน้อยโดยใช้Lifecycle.repeatOnLifecycle
API ซึ่งเป็นอีกทางเลือกหนึ่งนอกเหนือจากLifecycleOwner.addRepeatinJob
API ใหม่ (I0f4cd)
การแก้ไขข้อบกพร่อง
- จาก Lifecycle 2.3.1: ตอนนี้กฎ
NonNullableMutableLiveData
lint สามารถแยกความแตกต่างระหว่างตัวแปรฟิลด์ที่มีค่า Null ได้ (b/169249668)
Lifecycle Viewmodel Compose เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0-alpha07
16 มิถุนายน 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha07 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API ที่ทำให้เกิดข้อขัดข้อง
- ตอนนี้
viewModel()
ใช้ViewModelStoreOwner
ที่ไม่บังคับแล้ว ซึ่งทำให้ทำงานร่วมกับเจ้าของที่ไม่ใช่LocalViewModelStoreOwner
ได้ง่ายขึ้น ตัวอย่างเช่น ตอนนี้คุณใช้viewModel(navBackStackEntry)
เพื่อดึงข้อมูล ViewModel ที่เชื่อมโยงกับกราฟการนำทางที่เฉพาะเจาะจงได้แล้ว (I2628d, b/188693123)
เวอร์ชัน 1.0.0-alpha06
2 มิถุนายน 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha06 มีการคอมมิตเหล่านี้
อัปเดตให้ใช้งานร่วมกับ Compose เวอร์ชัน 1.0.0-beta08
ได้
เวอร์ชัน 1.0.0-alpha05
18 พฤษภาคม 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha05 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- อัปเดตให้ใช้งานร่วมกับ Compose เวอร์ชัน
1.0.0-beta07
ได้
การแก้ไขข้อบกพร่อง
- ตอนนี้ไฟล์ AndroidManifest จาก ui-test-manifest และ ui-tooling-data ใช้ได้กับ Android 12 แล้ว (I6f9de, b/184718994)
เวอร์ชัน 1.0.0-alpha04
7 เมษายน 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha04 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงทรัพยากร Dependency
- เวอร์ชันนี้ช่วยให้
androidx.hilt:hilt-navigation-compose
และandroidx.navigation:navigation-compose
ซิงค์ทรัพยากร Dependency ในandroidx.compose.compiler:compiler:1.0.0-beta04
และandroidx.compose.runtime:runtime:1.0.0-beta04
ได้ สำหรับ 1.0.0 คอมไพเลอร์และรันไทม์ต้องตรงกัน
เวอร์ชัน 1.0.0-alpha03
10 มีนาคม 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
LocalViewModelStoreOwner.current
จะแสดงผลViewModelStoreOwner
แบบนํา Null ได้ เพื่อพิจารณาว่าViewModelStoreOwner
พร้อมใช้งานในองค์ประกอบปัจจุบันหรือไม่ API ที่ต้องระบุViewModelStoreOwner
เช่นviewModel()
และNavHost
จะยังคงแสดงข้อยกเว้นหากไม่ได้ตั้งค่าViewModelStoreOwner
(Idf39a)
Lifecycle-Viewmodel-Compose เวอร์ชัน 1.0.0-alpha02
24 กุมภาพันธ์ 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
LocalViewModelStoreOwner
มีฟังก์ชันprovides
ที่ใช้กับCompositionLocalProvider
ได้ ซึ่งมาแทนที่asProvidableCompositionLocal()
API (I45d24)
Lifecycle-Viewmodel-Compose เวอร์ชัน 1.0.0-alpha01
10 กุมภาพันธ์ 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ย้าย
viewModel()
composable และLocalViewModelStoreOwner
จากandroidx.compose.ui.viewinterop
ไปยังอาร์ติแฟกต์นี้ในแพ็กเกจandroidx.lifecycle.viewmodel.compose
แล้ว (I7a374)
เวอร์ชัน 2.3.1
เวอร์ชันวงจรของลูกค้า 2.3.1
24 มีนาคม 2021
androidx.lifecycle:lifecycle-*:2.3.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้กฎ
NonNullableMutableLiveData
lint สามารถแยกความแตกต่างระหว่างตัวแปรฟิลด์ที่มีค่า Null ได้ (b/169249668)
เวอร์ชัน 2.3.0
เวอร์ชัน 2.3.0
10 กุมภาพันธ์ 2021
androidx.lifecycle:lifecycle-*:2.3.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.2.0
- การรองรับ
SavedStateHandle
สำหรับคลาสที่แยกไม่ได้: ตอนนี้SavedStateHandle
รองรับการแปลงเป็นอนุกรมแบบเลื่อนเวลาโดยให้คุณเรียกใช้setSavedStateProvider()
สำหรับคีย์หนึ่งๆ ซึ่งจะระบุSavedStateProvider
ที่จะได้รับการเรียกกลับไปยังsaveState()
เมื่อระบบขอให้SavedStateHandle
บันทึกสถานะ โปรดดูการบันทึกชั้นเรียนที่แบ่งไม่ได้ - การบังคับใช้ลักษณะการทํางานของวงจร
- ตอนนี้ LifecycleRegistry บังคับใช้
DESTROYED
เป็นสถานะสิ้นสุดแล้ว - ตอนนี้
LifecycleRegistry
จะยืนยันว่ามีการเรียกใช้เมธอดในเธรดหลัก Lifecycle ของกิจกรรม ฟragment ฯลฯ จำเป็นต้องใช้เสมอ การเพิ่มผู้สังเกตการณ์จากเธรดที่ไม่หลักทำให้ตรวจหาข้อขัดข้องในรันไทม์ได้ยาก สําหรับออบเจ็กต์LifecycleRegistry
ที่เป็นของคอมโพเนนต์ของคุณเอง คุณสามารถเลือกไม่ใช้การตรวจสอบได้อย่างชัดเจนโดยใช้LifecycleRegistry.createUnsafe(...)
แต่คุณต้องตรวจสอบว่าการซิงค์เป็นไปอย่างถูกต้องเมื่อมีการเข้าถึงLifecycleRegistry
นี้จากเธรดอื่น
- ตอนนี้ LifecycleRegistry บังคับใช้
- ตัวช่วยสถานะวงจรและเหตุการณ์: เพิ่มเมธอดตัวช่วยแบบคงที่ของ
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
ไปยังLifecycle.Event
เพื่อสร้างEvent
จากState
และทิศทางการเปลี่ยน เพิ่มเมธอดgetTargetState()
ที่ให้State
ที่วงจรจะเปลี่ยนเป็นหลังจากEvent
โดยตรง withStateAtLeast
: เพิ่มLifecycle.withStateAtLeast
API ที่รอสถานะวงจรและเรียกใช้บล็อกโค้ดแบบไม่หยุดชะงักแบบซิงค์ ณ จุดที่มีการเปลี่ยนแปลงสถานะ จากนั้นดำเนินการต่อด้วยผลลัพธ์ API เหล่านี้แตกต่างจากเมธอดwhen*
ที่มีอยู่เนื่องจากไม่อนุญาตให้เรียกใช้โค้ดที่ระงับและไม่ใช้ตัวจัดเตรียมที่กำหนดเอง (aosp/1326081)ViewTree
API:ViewTreeLifecycleOwner.get(View)
และViewTreeViewModelStoreOwner.get(View)
API ใหม่ช่วยให้คุณดึงข้อมูลLifecycleOwner
และViewModelStoreOwner
ที่มีได้ ตามลำดับจากอินสแตนซ์View
คุณต้องอัปเกรดเป็น Activity1.2.0
และ Fragment1.3.0
รวมถึง AppCompat 1.3.0-alpha01 ขึ้นไปเพื่อป้อนข้อมูลนี้อย่างถูกต้อง ส่วนขยาย KotlinfindViewTreeLifecycleOwner
และfindViewTreeViewModelStoreOwner
พร้อมใช้งานในlifecycle-runtime-ktx
และlifecycle-viewmodel-ktx
ตามลำดับ- การเลิกใช้งานส่วนขยาย
LiveData.observe()
Kotlin: ตอนนี้เราเลิกใช้งานส่วนขยายLiveData.observe()
Kotlin ที่จําเป็นสําหรับการใช้ไวยากรณ์ Lambda แล้ว เนื่องจากไม่จําเป็นเมื่อใช้ Kotlin 1.4
เวอร์ชัน 2.3.0-rc01
16 ธันวาคม 2020
androidx.lifecycle:lifecycle-*:2.3.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้เมธอด
keys()
ของSavedStateHandle
จะใช้ได้ก่อนและหลังบันทึกสถานะแล้ว โดยจะมีคีย์ที่ใช้กับsetSavedStateProvider()
ก่อนหน้านี้นอกเหนือจากคีย์ที่ใช้กับset()
และgetLiveData()
(aosp/1517919, b/174713653)
การมีส่วนร่วมจากภายนอก
- ตอนนี้ API สำหรับระงับ coroutine ที่รับรู้วงจรสามารถจัดการการเรียก
yield()
ได้ดียิ่งขึ้น ขอขอบคุณ Nicklas Ansman Giertz (aosp/1430830, b/168777346)
เวอร์ชัน 2.3.0-beta01
1 ตุลาคม 2020
androidx.lifecycle:lifecycle-*:2.3.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เราได้เลิกใช้งาน
LiveData.observe()
ส่วนขยาย Kotlin ที่ต้องใช้เพื่อใช้ไวยากรณ์ Lambda แล้ว เนื่องจากไม่จำเป็นเมื่อใช้ Kotlin 1.4 (I40d3f)
การแก้ไขข้อบกพร่อง
- อัปเกรด androidx เพื่อใช้ Kotlin 1.4 (Id6471, b/165307851, b/165300826)
การเปลี่ยนแปลงเอกสารประกอบ
- เราได้อัปเดตเอกสารเกี่ยวกับ
liveData
เครื่องมือสร้างและasLiveData()
เพื่อใส่รายละเอียดเกี่ยวกับการเปลี่ยนค่าการหมดเวลาที่กำหนด (aosp/1122324)
เวอร์ชัน 2.3.0-alpha07
19 สิงหาคม 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha07 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาข้อขัดข้องใน
NullSafeMutableLiveData
การตรวจสอบ Lint (aosp/1395367)
เวอร์ชัน 2.3.0-alpha06
22 กรกฎาคม 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha06 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มเมธอดตัวช่วยแบบคงที่ของ
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
ไปยังLifecycle.Event
เพื่อสร้างEvent
จากState
และทิศทางการเปลี่ยน เพิ่มเมธอดgetTargetState()
ที่ให้State
ที่วงจรจะเปลี่ยนเป็นหลังจากEvent
โดยตรง (I00887) - เพิ่ม
Lifecycle.withStateAtLeast
API ที่รอสถานะวงจรและเรียกใช้บล็อกโค้ดแบบไม่หยุดชะงักแบบซิงค์ ณ จุดที่มีการเปลี่ยนแปลงสถานะ จากนั้นดำเนินการต่อพร้อมผลลัพธ์ API เหล่านี้แตกต่างจากเมธอดwhen*
ที่มีอยู่เนื่องจากไม่อนุญาตให้เรียกใช้โค้ดที่ระงับและไม่ใช้ตัวจัดเตรียมที่กำหนดเอง (aosp/1326081)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ LifecycleRegistry บังคับใช้
DESTROYED
เป็นสถานะสิ้นสุดแล้ว (I00887) - ตอนนี้
LifecycleRegistry
จะยืนยันว่ามีการเรียกใช้เมธอดในเธรดหลัก Lifecycle ของกิจกรรม ฟragment ฯลฯ จำเป็นต้องใช้เสมอ การเพิ่มผู้สังเกตการณ์จากเธรดที่ไม่หลักทำให้ตรวจหาข้อขัดข้องในรันไทม์ได้ยาก สําหรับออบเจ็กต์LifecycleRegistry
ที่คอมโพเนนต์ของคุณเป็นเจ้าของ คุณสามารถเลือกไม่ใช้การตรวจสอบได้อย่างชัดเจนโดยใช้LifecycleRegistry.createUnsafe(...)
แต่คุณต้องตรวจสอบว่ามีการซิงค์ที่เหมาะสมเมื่อมีการเข้าถึงLifecycleRegistry
นี้จากเธรดอื่น (Ie7280, b/137392809)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องใน
NullSafeMutableLiveData
(b/159987480) - แก้ไข
ObsoleteLintCustomCheck
สำหรับการตรวจสอบ Lint ที่รวมอยู่กับlifecycle-livedata-core-ktx
(และโดยเฉพาะNullSafeMutableLiveData
) (b/158699265)
เวอร์ชัน 2.3.0-alpha05
24 มิถุนายน 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha05 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
LiveData
จัดการเคสที่เข้ามาซ้ำได้ดีขึ้น หลีกเลี่ยงการเรียกonActive()
หรือonInactive()
ซ้ำ (b/157840298) - แก้ไขปัญหาที่การตรวจสอบ Lint ไม่ทำงานเมื่อใช้ Android Studio 4.1 Canary 6 ขึ้นไป (aosp/1331903)
เวอร์ชัน 2.3.0-alpha04
10 มิถุนายน 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha04 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องในการตรวจสอบ Lint ของ
NonNullableMutableLiveData
(b/157294666) - ตอนนี้
NonNullableMutableLiveData
การตรวจสอบ Lint ครอบคลุมกรณีต่างๆ มากขึ้นอย่างเห็นได้ชัดในกรณีที่มีการตั้งค่าnull
ในMutableLiveData
ด้วยพารามิเตอร์ประเภทที่ไม่ใช่ Null (b/156002218)
เวอร์ชัน 2.3.0-alpha03
20 พฤษภาคม 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
SavedStateHandle
รองรับการแปลงเป็นอนุกรมแบบเลื่อนเวลาโดยให้คุณเรียกใช้setSavedStateProvider()
สำหรับคีย์หนึ่งๆ โดยระบุSavedStateProvider
ที่จะได้รับการเรียกกลับไปยังsaveState()
เมื่อระบบขอให้SavedStateHandle
บันทึกสถานะ (b/155106862) ViewTreeViewModelStoreOwner.get(View)
API ใหม่ช่วยให้คุณดึงข้อมูลViewModelStoreOwner
ที่มีได้โดยระบุอินสแตนซ์View
คุณต้องอัปเกรดเป็น Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
และ AppCompat1.3.0-alpha01
เพื่อป้อนข้อมูลนี้อย่างถูกต้อง เพิ่มส่วนขยายfindViewModelStoreOwner()
Kotlin ลงในlifecycle-viewmodel-ktx
แล้ว (aosp/1295522)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้การเผยแพร่
MutableLiveData
การตรวจสอบ Lint ที่เผยแพร่ในวงจร2.3.0-alpha01
ควบคู่ไปกับอาร์ติแฟกต์lifecycle-livedata-core-ktx
ไม่ได้ (b/155323109)
เวอร์ชัน 2.3.0-alpha02
29 เมษายน 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
SavedStateViewModelFactory
อนุญาตให้คุณส่งApplication
ที่เป็นค่าว่างไปยังคอนสตรคเตอร์เพื่อรองรับกรณีที่ไม่มีApplication
พร้อมใช้งานและไม่จำเป็นต้องรองรับAndroidViewModel
ได้ดียิ่งขึ้น (aosp/1285740)
การแก้ไขข้อบกพร่อง
- ปรับปรุงประสิทธิภาพการเริ่มต้นระบบแบบ Cold Start โดยการหลีกเลี่ยงการยืนยันคลาสที่ไม่สําเร็จในอุปกรณ์ API 28 และต่ำกว่า (aosp/1282118)
เวอร์ชัน 2.3.0-alpha01
4 มีนาคม 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
ViewTreeLifecycleOwner.get(View)
API ใหม่ช่วยให้คุณดึงข้อมูลLifecycleOwner
ที่มีได้โดยระบุอินสแตนซ์View
คุณต้องอัปเกรดเป็น Activity1.2.0-alpha01
และ Fragment1.3.0-alpha01
เพื่อป้อนข้อมูลนี้อย่างถูกต้องfindViewTreeLifecycleOwner
ส่วนขยาย Kotlin พร้อมให้ใช้งานในlifecycle-runtime-ktx
(aosp/1182361, aosp/1182956)- เพิ่มการตรวจสอบ Lint ใหม่ที่จะเตือนคุณเมื่อตั้งค่า
null
ในMutableLiveData
ที่กําหนดใน Kotlin ว่าไม่ใช่ค่า Null ซึ่งจะใช้ได้เมื่อใช้อาร์ติแฟกต์livedata-core-ktx
หรือlivedata-ktx
(aosp/1154723, aosp/1159092) - อาร์ติแฟกต์
lifecycle-runtime-testing
ใหม่พร้อมใช้งานแล้ว ซึ่งให้TestLifecycleOwner
ที่ใช้งานLifecycleOwner
และมีLifecycle
ที่เปลี่ยนแปลงได้แบบปลอดภัยสำหรับเธรด (aosp/1242438)
แก้ไขข้อบกพร่อง
- ตอนนี้อาร์ติแฟกต์
lifecycle-runtime
มีชื่อแพ็กเกจที่ไม่ซ้ำกัน (aosp/1187196)
เวอร์ชัน 2.2.0
ViewModel-Savedstate เวอร์ชัน 2.2.0
5 กุมภาพันธ์ 2020
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.0 มีการคอมมิตเหล่านี้
ตอนนี้ SavedState ของ Lifecycle ViewModel จะแชร์เวอร์ชันเดียวกับอาร์ติแฟกต์ Lifecycle อื่นๆ ลักษณะการทํางานของ 2.2.0
เหมือนกับลักษณะการทํางานของ 1.0.0
เวอร์ชัน 2.2.0
22 มกราคม 2020
androidx.lifecycle:lifecycle-*:2.2.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.1.0
- การผสานรวม Lifecycle Coroutine: อาร์ติแฟกต์
lifecycle-runtime-ktx
ใหม่จะเพิ่มการผสานรวมระหว่าง Lifecycle กับ Coroutine ของ Kotlin นอกจากนี้lifecycle-livedata-ktx
ยังมีการเพิ่มฟีเจอร์เพื่อใช้ประโยชน์จากโคโริวทีนด้วย ดูรายละเอียดเพิ่มเติมได้ที่ใช้โคโริวทีนของ Kotlin กับคอมโพเนนต์สถาปัตยกรรม - การเลิกใช้งาน
ViewModelProviders.of()
:ViewModelProviders.of()
เลิกใช้งานแล้ว คุณสามารถส่งFragment
หรือFragmentActivity
ไปยังตัวสร้างViewModelProvider(ViewModelStoreOwner)
ใหม่เพื่อให้ได้ฟังก์ชันการทำงานแบบเดียวกันเมื่อใช้ Fragment1.2.0
- การเลิกใช้งานอาร์ติแฟกต์
lifecycle-extensions
: การเลิกใช้งานViewModelProviders.of()
ข้างต้นทำให้รุ่นนี้เป็นการเลิกใช้งาน API รายการสุดท้ายในlifecycle-extensions
และตอนนี้อาร์ติแฟกต์นี้ควรถือว่าเลิกใช้งานโดยสมบูรณ์แล้ว เราขอแนะนําอย่างยิ่งให้ใช้รายการต่างๆ ของวงจรที่เฉพาะเจาะจงซึ่งคุณต้องการ (เช่นlifecycle-service
หากคุณใช้LifecycleService
และlifecycle-process
หากคุณใช้ProcessLifecycleOwner
) แทนlifecycle-extensions
เนื่องจากlifecycle-extensions
จะไม่มีรุ่น2.3.0
ในอนาคต - Gradle Incremental Annotation Processor: โปรเซสเซอร์คำอธิบายประกอบของ Lifecycle จะเพิ่มข้อมูลโดยค่าเริ่มต้น
หากแอปเขียนด้วยภาษาโปรแกรม Java 8 คุณจะใช้
DefautLifecycleObserver
แทนได้ และหากเขียนด้วยภาษาโปรแกรม Java 7 คุณจะใช้LifecycleEventObserver
ได้
เวอร์ชัน 2.2.0-rc03
4 ธันวาคม 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.0-rc03 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่จะเกิดขึ้นเมื่อมีการบันทึก
ViewModel
ที่จำลองไว้ในViewModelStore
และทำการค้นหาในภายหลังด้วยค่าเริ่มต้น - แก้ไขการใช้
Dispatchers.Main.immediate
ในlaunchWhenCreated
และเมธอดที่คล้ายกันเพื่อให้เรียกใช้แบบซิงค์กันระหว่างเหตุการณ์ในวงจรที่เกี่ยวข้อง (aosp/1156203)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Anders Järleberg ที่ช่วยแก้ไข (aosp/1156203)
- ขอขอบคุณ Vsevolod Tolstopyatov จาก Jetbrains ที่ช่วยตรวจสอบการใช้งานการดำเนินการแบบแทรก
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้ส่วนขยายวงจรขึ้นอยู่กับ
1.2.0-rc03
เวอร์ชัน 2.2.0-rc02
7 พฤศจิกายน 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.0-rc02 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องในการตั้งค่า ProGuard ของไลบรารีที่ส่งผลต่ออุปกรณ์ที่ใช้ API 28 ขึ้นไปหาก API เป้าหมายต่ำกว่า 29 (b/142778206)
เวอร์ชัน 2.2.0-rc01
23 ตุลาคม 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.0-rc01 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
launchWhenCreated
และเมธอดที่เกี่ยวข้องจะทำงานช้ากว่าเมธอดวงจรที่เกี่ยวข้อง 1 เฟรม เนื่องจากใช้Dispatchers.Main
แทนDispatchers.Main.immediate
(aosp/1145596)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Nicklas Ansman ที่ช่วยแก้ไข (aosp/1145596)
เวอร์ชัน 2.2.0-beta01
9 ตุลาคม 2019
androidx.lifecycle:lifecycle-*:2.2.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.0-beta01 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่เกิดขึ้นใน Lifecycle 2.2.0-alpha05 ในลําดับของ
ProcessLifecycleOwner
และLifecycleOwner
ของกิจกรรมที่ย้ายไปยัง "เริ่มแล้ว" และ "กลับมาทําต่อ" ในอุปกรณ์ Android 10 (aosp/1128132) - แก้ไขการถดถอยที่เกิดขึ้นในวงจร
2.2.0-alpha05
ซึ่งจะทำให้เกิดNullPointerException
เมื่อใช้lifecycle-process
เวอร์ชัน2.0.0
หรือ2.1.0
(b/141536990)
เวอร์ชัน 2.2.0-alpha05
18 กันยายน 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.0-alpha05 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขภาวะแข่งขันในเครื่องมือสร้าง LiveData ของ coroutine b/140249349
เวอร์ชัน 2.2.0-alpha04
5 กันยายน 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha04
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้
lifecycleScope
,whenCreated
,whenStarted
,whenResumed
,viewModelScope
และการใช้งานพื้นฐานของliveData
ใช้Dispatchers.Main.immediate
แทนDispatchers.Main
(b/139740492)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Nicklas Ansman ที่มีส่วนร่วมในการย้ายข้อมูลไปยัง
Dispatchers.Main.immediate
(aosp/1106073)
เวอร์ชัน 2.2.0-alpha03
7 สิงหาคม 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha03
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้การติดตั้งใช้งาน
ViewModelStoreOwner
สามารถใช้HasDefaultViewModelProviderFactory
เพื่อระบุViewModelProvider.Factory
เริ่มต้นได้ เราได้ดำเนินการนี้กับกิจกรรม1.1.0-alpha02
, Fragment1.2.0-alpha02
และการนําทาง2.2.0-alpha01
แล้ว (aosp/1092370, b/135716331)
การเปลี่ยนแปลง API
ViewModelProviders.of()
เลิกใช้งานแล้ว คุณสามารถส่งFragment
หรือFragmentActivity
ไปยังตัวสร้างViewModelProvider(ViewModelStoreOwner)
ใหม่เพื่อให้ได้ฟังก์ชันการทำงานเดียวกัน (aosp/1009889)
เวอร์ชัน 2.2.0-alpha02
2 กรกฎาคม 2019
androidx.lifecycle:*:2.2.0-alpha02
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
- แทนที่
LiveDataScope.initialValue
ด้วยLiveDataScope.latestValue
ซึ่งจะติดตามค่าที่ส่งออกปัจจุบันของบล็อกliveData
- เพิ่มการโอเวอร์โหลดใหม่ลงในเครื่องมือสร้าง
liveData
ที่ได้รับพารามิเตอร์timeout
เป็นประเภทDuration
เวอร์ชัน 2.2.0-alpha01
7 พฤษภาคม 2019
androidx.lifecycle:*:2.2.0-alpha01
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- รุ่นนี้เพิ่มฟีเจอร์ใหม่ที่รองรับโคโริวทีนของ Kotlin สำหรับ Lifecycle และ LiveData ดูเอกสารประกอบโดยละเอียดเกี่ยวกับฟีเจอร์เหล่านี้ได้ที่นี่
ViewModel-SavedState เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0
22 มกราคม 2020
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0 มีคอมมิตเหล่านี้
ฟีเจอร์สำคัญใน 1.0.0
- เพิ่มคลาส SavedStateHandle ใหม่ ซึ่งจะช่วยให้ชั้นเรียน
ViewModel
เข้าถึงและมีส่วนร่วมกับสถานะที่บันทึกไว้ได้ ออบเจ็กต์นี้สามารถรับได้ในคอนสตรัคเตอร์ของคลาสViewModel
และฟาร์มัสที่ Fragments ให้มาโดยค่าเริ่มต้น และ AppCompatActivity จะแทรกSavedStateHandle
โดยอัตโนมัติ - เพิ่ม AbstractSavedStateViewModelFactory แล้ว ซึ่งช่วยให้คุณสร้างโรงงานที่กำหนดเองสำหรับ
ViewModel
และให้สิทธิ์เข้าถึงSavedStateHandle
ได้
ViewModel-Savedstate เวอร์ชัน 1.0.0-rc03
4 ธันวาคม 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-rc03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้ SavedState ของ Lifecycle ViewModel จะขึ้นอยู่กับ Lifecycle
2.2.0-rc03
Viewmodel-Savedstate เวอร์ชัน 1.0.0-rc02
7 พฤศจิกายน 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-rc02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้ขึ้นอยู่กับวงจร
2.2.0-rc02
ViewModel-SavedState เวอร์ชัน 1.0.0-rc01
23 ตุลาคม 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก 1.0.0-beta01
เวอร์ชัน 1.0.0-rc01 มีการคอมมิตเหล่านี้
ViewModel-Savedstate เวอร์ชัน 1.0.0-beta01
9 ตุลาคม 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-beta01 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเข้าถึง ViewModel ของ SavedState เป็นครั้งแรกใน
Activity.onActivityResult()
จะส่งผลให้เกิดIllegalStateException
(b/139093676) - แก้ไข
IllegalStateException
เมื่อใช้AbstractSavedStateViewModelFactory
(b/141225984)
ViewModel-SavedState เวอร์ชัน 1.0.0-alpha05
18 กันยายน 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha05 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
SavedStateViewModelFactory
ไม่ได้ขยายAbstractSavedStateViewModelFactory
อีกต่อไป และSavedStateHandle
จะสร้างขึ้นสําหรับ ViewModel ที่ขอเท่านั้น (aosp/1113593)
ViewModel-SavedState เวอร์ชัน 1.0.0-alpha03
7 สิงหาคม 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
lifecycle-viewmodel-savedstate
ไม่ได้ขึ้นอยู่กับfragment
อีกต่อไป และเราได้นําตัวสร้างSavedStateViewModelFactory(Fragment)
และSavedStateViewModelFactory(FragmentActivity)
ที่เกี่ยวข้องออกแล้ว แต่ตอนนี้SavedStateViewModelFactory
เป็นค่าเริ่มต้นสำหรับกิจกรรม1.1.0-alpha02
, Fragment1.2.0-alpha02
และการนําทาง2.2.0-alpha01
(b/135716331)
ViewModel-SavedState เวอร์ชัน 1.0.0-alpha02
2 กรกฎาคม 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- เพิ่มการโอเวอร์โหลด
SavedStateHandle.getLiveData()
ที่ยอมรับค่าเริ่มต้น
การเปลี่ยนแปลง API
- เปลี่ยนชื่อ
SavedStateVMFactory
เป็นSavedStateViewModelFactory
- เปลี่ยนชื่อ
AbstractSavedStateVMFactory
เป็นAbstractSavedStateViewModelFactory
ViewModel-Savedstate เวอร์ชัน 1.0.0-alpha01
13 มีนาคม 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
ได้รับการปล่อยแล้ว ดูบันทึกการคอมมิตทั้งหมดของรุ่นแรกนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้
ViewModels
มีส่วนร่วมใน savedstate ได้แล้ว โดยคุณใช้SavedStateVMFactory
ของ Factory ของ ViewModel ที่เพิ่งเปิดตัวใหม่ และ ViewModel ควรมี Constructor ที่ได้รับSavedStateHandle
object เป็นพารามิเตอร์
เวอร์ชัน 2.1.0
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 2.0.0
- เพิ่ม
LifecycleEventObserver
สำหรับกรณีที่ต้องใช้สตรีมเหตุการณ์ในวงจรของลูกค้า ซึ่งเป็น API สาธารณะแทนคลาสGenericLifecycleObserver
ที่ซ่อนอยู่ - เพิ่มส่วนขยาย ktx สำหรับเมธอด
LiveData.observe
และเมธอดTransformations.*
- เพิ่ม
Transformations.distinctUntilChanged
ซึ่งจะสร้างออบเจ็กต์ LiveData ใหม่ที่ไม่แสดงค่าจนกว่าจะมีการเปลี่ยนแปลงค่าLiveData
ของแหล่งที่มา - เพิ่มการรองรับ Coroutine ใน ViewModel ด้วยการเพิ่มพร็อพเพอร์ตี้ส่วนขยาย
ViewModel.viewModelScope
เวอร์ชัน 2.1.0
5 กันยายน 2019
androidx.lifecycle:lifecycle-*:2.1.0
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
เวอร์ชัน 2.1.0-rc01
2 กรกฎาคม 2019
androidx.lifecycle:*:2.1.0-rc01
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก androidx.lifecycle:*:2.1.0-beta01
ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
เวอร์ชัน 2.1.0-beta01
7 พฤษภาคม 2019
androidx.lifecycle:*:2.1.0-beta01
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- วงจรการพัฒนาได้รับการอัปเกรดเป็นรุ่นเบต้า: API ที่เปิดตัวในรุ่นอัลฟ่าก่อนหน้านี้ เช่น
liveData
ฟังก์ชันส่วนขยายสำหรับการเปลี่ยนรูปแบบและการสังเกตViewModel
การจัดเตรียมเริ่มต้นด้วยการมอบสิทธิ์พร็อพเพอร์ตี้ และอื่นๆ ได้รับการปรับปรุงให้เสถียรและจะไม่เปลี่ยนแปลง
เวอร์ชัน 2.1.0-alpha04
3 เมษายน 2019
androidx.lifecycle:*:2.1.0-alpha04
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
- การเปลี่ยนแปลงที่ส่งผลต่อเวอร์ชันเก่า: API พื้นฐานที่อยู่เบื้องหลัง
by viewModels()
และby activityViewModels()
มีการเปลี่ยนแปลงเพื่อรองรับViewModelStore
โดยตรงแทนที่จะรองรับเฉพาะViewModelStoreOwner
(aosp/932932)
เวอร์ชัน 2.1.0-alpha03
13 มีนาคม 2019
androidx.lifecycle:*:2.1.0-alpha03
ได้รับการปล่อยแล้ว ดูรายการคอมมิตทั้งหมดที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
- นำ
ViewModelProvider.KeyedFactory
ออกแล้ว อินเทอร์เฟซที่ 2 นอกเหนือจากViewModelProvider.Factory
ใช้งานร่วมกับฟีเจอร์ใหม่ เช่น การเปลี่ยนเส้นทางพร็อพเพอร์ตี้ใน Kotlinby viewmodels {}
ไม่ค่อยดี (aosp/914133)
เวอร์ชัน 2.1.0-alpha02
30 มกราคม 2019
androidx.lifecycle 2.1.0-alpha02
ได้รับการปล่อยแล้ว
การเปลี่ยนแปลง API
- ตอนนี้
LifecycleRegistry
มีเมธอดsetCurrentState()
ที่ใช้แทนเมธอดsetState()
ที่เลิกใช้งานแล้ว (aosp/880715)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่อินสแตนซ์
ViewModel
จําลองจะขัดข้องเมื่อล้างViewModelStore
ที่มี b/122273087
เวอร์ชัน 2.1.0-alpha01
17 ธันวาคม 2018
androidx.lifecycle 2.1.0-alpha01
ได้รับการปล่อยแล้ว
ฟีเจอร์ใหม่
- เพิ่ม
LifecycleEventObserver
สำหรับกรณีที่ต้องใช้สตรีมเหตุการณ์ในวงจรของลูกค้า แต่เป็น API สาธารณะแทนคลาสGenericLifecycleObserver
ที่ซ่อนอยู่ - เพิ่มส่วนขยาย ktx สำหรับเมธอด
LiveData.observe
และเมธอดTransformations.*
- เพิ่มเมธอด
Transformations.distinctUntilChanged
แล้ว ซึ่งจะสร้างออบเจ็กต์LiveData
ใหม่ที่ไม่แสดงค่าจนกว่าจะมีการเปลี่ยนแปลงค่า LiveData ของแหล่งที่มา - การรองรับ Coroutine ใน ViewModel: เพิ่มพร็อพเพอร์ตี้ส่วนขยาย
ViewModel.viewModelScope
- เพิ่ม
ViewModelProvider.KeyedFactory
ซึ่งเป็นแฟกทอรีสำหรับ ViewModel ที่ได้รับkey
และClass
ในเมธอดcreate
เวอร์ชัน 2.0.0
เวอร์ชัน 2.0.0
21 กันยายน 2018
เปิดตัว Lifecycle 2.0.0
พร้อมการแก้ไขข้อบกพร่อง 1 รายการจาก 2.0.0-rc01
ใน ViewModel
การแก้ไขข้อบกพร่อง
- แก้ไขกฎ ProGuard ของ ViewModel ที่นําตัวสร้างออกอย่างไม่ถูกต้อง b/112230489
เวอร์ชัน 2.0.0-beta01
2 กรกฎาคม 2018
การแก้ไขข้อบกพร่อง
- แก้ไขกฎ Proguard ของ LifecycleObserver เพื่อเก็บเฉพาะการใช้งาน ไม่ใช่อินเทอร์เฟซย่อย b/71389427
- แก้ไขกฎ ProGuard ของ ViewModel เพื่ออนุญาตการสร้างความสับสนและการทำให้ไฟล์เล็กลง
เวอร์ชันก่อน AndroidX
สำหรับ Lifecycle เวอร์ชันก่อน AndroidX ที่ตามมา ให้ใส่ข้อกำหนดต่อไปนี้
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"
}
เวอร์ชัน 1.1.1
21 มีนาคม 2018
มีการเปลี่ยนแปลงเพียงเล็กน้อย 1 รายการเท่านั้น คือ ย้าย android.arch.core.util.Function
จาก arch:runtime
ไป arch:common
ซึ่งช่วยให้ใช้ได้โดยไม่มี Dependency รันไทม์ เช่น ใน paging:common
ด้านล่าง
lifecycle:common
ขึ้นอยู่กับ lifecycle:runtime
ดังนั้นการเปลี่ยนแปลงนี้จึงไม่ส่งผลต่อ lifecycle:runtime
โดยตรง แต่จะส่งผลต่อโมดูลที่ขึ้นอยู่กับ lifecycle:common
โดยตรงเท่านั้น เช่น การแบ่งหน้า
เวอร์ชัน 1.1.0
22 มกราคม 2018
การเปลี่ยนแปลงบรรจุภัณฑ์
ขณะนี้มี Dependency ใหม่ที่มีขนาดเล็กกว่ามากดังต่อไปนี้
android.arch.lifecycle:livedata:1.1.0
android.arch.lifecycle:viewmodel:1.1.0
การเปลี่ยนแปลง API
- เราได้นํา
LifecycleActivity
และLifecycleFragment
ที่เลิกใช้งานแล้วออกแล้ว โปรดใช้FragmentActivity
,AppCompatActivity
หรือFragment
- เพิ่มคำอธิบายประกอบ
@NonNull
ไปยังViewModelProviders
และViewModelStores
แล้ว - เลิกใช้งานตัวสร้าง
ViewModelProviders
แล้ว โปรดใช้เมธอดแบบคงที่โดยตรง ViewModelProviders.DefaultFactory
เลิกใช้งานแล้ว โปรดใช้ViewModelProvider.AndroidViewModelFactory
- เพิ่มเมธอด
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
แบบคงที่เพื่อดึงข้อมูลFactory
แบบคงที่ซึ่งเหมาะสำหรับการสร้างอินสแตนซ์ViewModel
และAndroidViewModel