วงจร
ตารางนี้แสดงรายการอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.lifecycle
อาร์ติแฟกต์ | รุ่นที่เสถียร | ตัวเลือกถอนการอ้างสิทธิ์ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
วงจร-* | 2.8.4 | - | - | 2.9.0-alpha01 |
Lifecycle-viewmodel-compose | 2.8.4 | - | - | 2.9.0-alpha01 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Lifecycle คุณต้องเพิ่มที่เก็บ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับ
ในแอปหรือโมดูล
Kotlin
ดึงดูด
dependencies { def lifecycle_version = "2.8.4" 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.8.4" 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
ดึงดูด
dependencies { def lifecycle_version = "2.8.4" 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.8.4" 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") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากร Dependency ได้ที่หัวข้อเพิ่มการอ้างอิงของบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูที่ ปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนที่จะสร้างใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูเอกสารประกอบเกี่ยวกับเครื่องมือติดตามปัญหา เพื่อดูข้อมูลเพิ่มเติม
เวอร์ชัน 2.8
เวอร์ชัน 2.8.4
24 กรกฎาคม 2024
ปล่อย androidx.lifecycle:lifecycle-*:2.8.4
แล้ว เวอร์ชัน 2.8.4 มีสัญญาผูกมัดเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้
LiveData.asFlow()
จะจัดการกรณีที่โฟลว์ที่แสดงผลเสร็จสมบูรณ์ทันทีหลังจากที่ได้รับค่าที่ตั้งไว้ในLiveData
แล้ว (เช่น เมื่อใช้take(1)
) (I9c566) - ตอนนี้การทำงาน
Lifecycle*Effect
เสร็จสมบูรณ์เป็นนิจพล (เช่น หากมีการเรียกonStopOrDispose
เนื่องจากวงจรหยุดทำงาน จะไม่มีการเรียกใช้เป็นครั้งที่ 2 เมื่อกำจัด เว้นแต่วงจรจะกลับไปเป็นSTARTED
อีกครั้ง) (I5f607, b/352364595)
เวอร์ชัน 2.8.3
1 กรกฎาคม 2024
ปล่อย androidx.lifecycle:lifecycle-*:2.8.3
แล้ว เวอร์ชัน 2.8.3 มีสัญญาผูกมัดเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาความเข้ากันได้แบบย้อนหลังกับ Compose 1.6.0 และเวอร์ชันที่ต่ำกว่าของ Lifecycle 2.8 เมื่อใช้การย่อโค้ด (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
จะไม่ขัดข้องอีกต่อไปเมื่อรวมทรัพยากร Dependency ของcompileOnly
เวอร์ชันก่อนหน้าร่วมกับเวอร์ชัน 2.8 ขึ้นไป ซึ่งแก้ปัญหาเกี่ยวกับไลบรารี เช่น LeakCanary (I80383, b/341792251)
เวอร์ชัน 2.8.1
29 พฤษภาคม 2024
ปล่อย androidx.lifecycle:lifecycle-*:2.8.1
แล้ว เวอร์ชัน 2.8.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้
lifecycle-viewmodel-compose
มีเฉพาะทรัพยากร Dependency ทั่วไปในcompose-runtime
เท่านั้น โดยระบบจะนำทรัพยากร Dependency ทั่วไปออกจาก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
จาก Compose UI ไปยังlifecycle-runtime-compose
แล้วเพื่อให้ใช้ API ตัวช่วยที่ใช้ Compose ภายนอก UI ของ Compose ได้ - ตอนนี้อาร์ติแฟกต์
lifecycle-runtime-compose
มี APIdropUnlessResumed
และdropUnlessStarted
ซึ่งช่วยให้คุณทิ้งการคลิกหรือเหตุการณ์อื่นๆ ที่เกิดขึ้นแม้ว่าLifecycleOwner
จะลดลงต่ำกว่าLifecycle.State
ที่ระบุก็ตาม ตัวอย่างเช่น สามารถใช้กับการเขียนในการไปยังส่วนต่างๆ เพื่อหลีกเลี่ยงการจัดการกิจกรรมการคลิกหลังจากที่เริ่มการเปลี่ยนไปยังหน้าจออื่นแล้ว:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
ขณะนี้
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)
แทนย้ายส่วนขยาย Kotlin
lifecycle-livedata-core-ktx
ไปยังโมดูล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 นอกเหนือจาก Androidlifecycle-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 ยังคงได้รับการรักษา แต่มีการเปลี่ยนแปลงที่สำคัญ 2-3 อย่างเมื่อเปรียบเทียบแพลตฟอร์ม Android API กับแพลตฟอร์ม API ทั่วไป
- ตอนนี้การสร้างอินสแตนซ์
ViewModelProvider
จะทําผ่านเมธอดViewModelProvider.create()
แทนการเรียกใช้ตัวสร้างของอินสแตนซ์โดยตรง ViewModelProvider.NewInstanceFactory
และViewModelProvider.AndroidViewModelFactory
มีให้บริการใน Android เท่านั้น- เราขอแนะนำให้ขยายกลุ่มที่กำหนดเองจาก
ViewModelProvider.Factory
และใช้เมธอดcreate
ที่ใช้CreationExtras
หรือใช้ Kotlin DSL ของviewModelFactory
- เราขอแนะนำให้ขยายกลุ่มที่กำหนดเองจาก
- การใช้
ViewModelProvider
โดยไม่มีโรงงานที่กำหนดเองในแพลตฟอร์มที่ไม่ใช่ JVM จะส่งผลให้ได้รับUnsupportedOperationException
ในแพลตฟอร์ม JVM นั้น ระบบสามารถรักษาความเข้ากันได้โดยใช้ตัวสร้าง ViewModel แบบไม่มีอาร์กิวเมนต์ หากไม่ได้ระบุค่าจากโรงงานที่กำหนดเอง viewModelScope
จะเปลี่ยนไปใช้EmptyCoroutineContext
ในแพลตฟอร์มที่Dispatchers.Main
ไม่พร้อมใช้งาน (เช่น Linux)
อาร์ติแฟกต์ที่ได้รับผลกระทบ:
lifecycle-viewmodel
ย้าย API ส่วนใหญ่ไปยังcommon
และรองรับ jvm และ iOS นอกเหนือจาก Androidlifecycle-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
อย่างไม่ถูกต้อง ข้อมูลเหล่านี้รวมอยู่ใน AARlifecycle-runtime
แล้ว (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 แล้ว - ตอนนี้วงจรขึ้นอยู่กับโปรแกรมติดตั้งโปรไฟล์ 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 ยังคงได้รับการรักษา แต่มีการเปลี่ยนแปลงที่สำคัญ 2-3 อย่างเมื่อเปรียบเทียบแพลตฟอร์ม Android API กับแพลตฟอร์ม API ทั่วไป
- ตอนนี้การสร้างอินสแตนซ์
ViewModelProvider
จะทําผ่านเมธอดViewModelProvider.create()
แทนการเรียกใช้ตัวสร้างของอินสแตนซ์โดยตรง ViewModelProvider.NewInstanceFactory
และViewModelProvider.AndroidViewModelFactory
มีให้บริการใน Android เท่านั้น- เราขอแนะนำให้ขยายกลุ่มที่กำหนดเองจาก
ViewModelProvider.Factory
และใช้เมธอดcreate
ที่ใช้CreationExtras
หรือใช้ Kotlin DSL ของviewModelFactory
- เราขอแนะนำให้ขยายกลุ่มที่กำหนดเองจาก
- การใช้
ViewModelProvider
โดยไม่มีโรงงานที่กำหนดเองในแพลตฟอร์มที่ไม่ใช่ JVM จะส่งผลให้ได้รับUnsupportedOperationException
ในแพลตฟอร์ม JVM นั้น ระบบสามารถรักษาความเข้ากันได้โดยใช้ตัวสร้าง ViewModel แบบไม่มีอาร์กิวเมนต์ หากไม่ได้ระบุค่าจากโรงงานที่กำหนดเอง 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 เพื่อให้สามารถใช้ 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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม API ของ
dropUnlessResumed
และdropUnlessStarted
แล้วเพื่อให้คุณข้ามการคลิกหรือเหตุการณ์อื่นๆ ที่เกิดขึ้นแม้ว่าLifecycleOwner
จะลดลงต่ำกว่าLifecycle.State
ที่ระบุก็ตาม ตัวอย่างเช่น สามารถใช้กับการเขียนในการไปยังส่วนต่างๆ เพื่อหลีกเลี่ยงการจัดการกิจกรรมการคลิกหลังจากที่เริ่มการเปลี่ยนไปยังหน้าจออื่นแล้ว:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
(Icba83, b/317230685)
Conversion ของ Kotlin
- ตอนนี้เขียน
ViewModel
เป็นภาษา Kotlin (I16f26, b/214568825) แล้ว - ย้ายส่วนขยาย Kotlin
lifecycle-viewmodel-ktx
ไปยังโมดูลวงจรพื้นฐานแล้ว (Id787b, b/274800183) - ย้ายส่วนขยาย Kotlin
lifecycle-runtime-ktx
ไปยังโมดูลวงจรพื้นฐานแล้ว (Ic3686, b/274800183) - ย้ายส่วนขยาย Kotlin
lifecycle-livedata-core-ktx
ไปยังโมดูลวงจรพื้นฐานแล้ว (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()
ซึ่งทำให้มั่นใจได้ว่าการเปลี่ยนแปลงสถานะและ Callback ของLifecycleObserver
ทั้งหมดจะเสร็จสมบูรณ์ก่อนแสดงผล สิ่งที่สังเกตได้คือ วิธีนี้ต่างจากการตั้งค่าพร็อพเพอร์ตี้currentState
โดยตรงตรงที่ไม่ได้เป็นการใช้runBlocking
จึงปลอดภัยต่อการใช้งานภายในโครูทีน เช่น โครูทีนที่runTest
ระบุไว้ - ส่วนขยาย
LiveData
ของmap
และswitchMap
จําลองลักษณะการทำงานของdistinctUntilChanged
แล้ว หากLiveData
ตั้งค่าvalue
ไว้ ระบบจะเรียกใช้ฟังก์ชันmap
/switchMap
ทันทีเพื่อป้อนข้อมูลvalue
ของLiveData
ที่แสดงผล เพื่อให้แน่ใจว่าระบบจะตั้งค่าเริ่มต้นให้เป็นส่วนหนึ่งของการเรียบเรียงแรก (เมื่อใช้กับobserveAsState()
) แต่จะไม่เปลี่ยนแปลงลักษณะการสังเกต การอัปเดตค่าจากแหล่งที่มาLiveData
จะยังคงมีผลเมื่อคุณเริ่มสังเกตLiveData
เท่านั้น - รุ่นนี้แก้ปัญหาที่
SavedStateHandle
คืนค่าคลาสParcelable
ที่กำหนดเองไม่ถูกต้องหลังจากกระบวนการเสียชีวิตและสันทนาการ เนื่องจากข้อมูลประเภทที่หายไปจากเฟรมเวิร์กของ Android อาร์เรย์ของไฟล์พาร์เซลที่กำหนดเองจึงต้องมีการดำเนินการเพิ่มเติม (การสร้างอาร์เรย์ประเภทที่ถูกต้องด้วยตนเอง) และตอนนี้เอกสารประกอบเกี่ยวกับget
,getLiveData
และgetStateFlow
จึงเรียกข้อจำกัดนี้โดยเฉพาะ - นำกฎ Proguard ที่เกี่ยวข้องกับ
LifecycleObserver
ออกแล้ว ซึ่งหมายความว่าโค้ดที่มีการจัดสรรซึ่งต้องการใช้ API ผ่านการสะท้อน (เช่น ใช้คำอธิบายประกอบ@OnLifecycleEvent
ที่เลิกใช้งานมาเป็นเวลานาน) จะต้องมีกฎ Keep ของตนเองสำหรับ Use Case ที่เฉพาะเจาะจง
ความสามารถในการสังเกตเหตุการณ์ในวงจร
- นอกจากการใช้
LifecycleEventObserver
แล้ว ตอนนี้คุณสามารถสังเกตFlow
ของLifecycle.Event
ผ่านเมธอดส่วนขยายLifecycle.asFlow()
ได้แล้ว - ตอนนี้ผู้ใช้ 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()
โปรดดูข้อมูลเพิ่มเติมที่หัวข้อรวบรวมสถานะของวงจรที่มีโฟลว์
เวอร์ชัน 2.7.0-rc02
13 ธันวาคม 2023
ปล่อย androidx.lifecycle:lifecycle-*:2.7.0-rc02
แล้ว เวอร์ชัน 2.7.0-rc02 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
SavedStateHandle
ไม่กู้คืนคลาสParcelable
ที่กำหนดเองอย่างถูกต้องหลังจากกระบวนการเสียชีวิตและการสันทนาการ เนื่องจากข้อมูลประเภทที่หายไปจากเฟรมเวิร์กของ Android อาร์เรย์ของไฟล์พาร์เซลที่กำหนดเองจึงต้องมีการดำเนินการเพิ่มเติม (การสร้างอาร์เรย์ประเภทที่ถูกต้องด้วยตนเอง) และตอนนี้เอกสารประกอบเกี่ยวกับ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
เมื่ออยู่ภายในโครูทีน ขณะนี้การตรวจสอบ 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
ของการเขียนการนำทาง (aosp/2729289)
เวอร์ชัน 2.7.0-alpha01
26 กรกฎาคม 2023
ปล่อย androidx.lifecycle:lifecycle-*:2.7.0-alpha01
แล้ว เวอร์ชัน 2.7.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ขณะนี้
Lifecycle.State
สามารถสังเกตการเขียนได้ผ่าน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
ตามLifecycle.Event.ON_START
และLifecycle.Event.ON_STOP
Callback ของเหตุการณ์แล้ว (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 ที่เกี่ยวข้องกับ
LifecycleObserver
ออกแล้ว ซึ่งหมายความว่าโค้ดที่มีการจัดสรรซึ่งต้องการใช้ API ผ่านการสะท้อนจะต้องมีกฎ Keep ของตนเองสำหรับ Use Case ที่เฉพาะเจาะจง (Ia12fd)
เวอร์ชัน 2.6
เวอร์ชัน 2.6.2
6 กันยายน 2023
ปล่อย androidx.lifecycle:lifecycle-*:2.6.2
แล้ว เวอร์ชัน 2.6.2 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
SavedStateHandle
ไม่ได้รับการคืนค่าอย่างถูกต้องหลังจากกระบวนการยุติการทำงาน หากมีการคืนค่าสถานะ มีการเรียกsave()
โดยไม่บันทึกสถานะในSavedStateRegistry
ระดับบนสุด จากนั้นจึงคืนค่าสถานะอีกครั้ง การดำเนินการนี้จะแก้ไขการโต้ตอบระหว่างrememberSaveable
และNavHost
ของการเขียนการนำทาง (aosp/2729289)
เวอร์ชัน 2.6.1
22 มีนาคม 2023
ปล่อย androidx.lifecycle:lifecycle-*:2.6.1
แล้ว เวอร์ชัน 2.6.1 มีคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- ตอนนี้
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()
ที่รวบรวมจากโฟลว์และแสดงค่าล่าสุดเป็น Compose State ในลักษณะที่รับรู้ถึงวงจร - เลิกใช้งาน
Lifecycle.launchWhenX
เมธอดและLifecycle.whenX
แล้ว เนื่องจากการใช้ผู้มอบหมายงานชั่วคราวอาจทําให้สิ้นเปลืองทรัพยากรในบางกรณี ขอแนะนำให้ใช้Lifecycle.repeatOnLifecycle
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการระงับงานแบบครั้งเดียว โปรดดูคำอธิบายนี้ว่าเพราะเหตุใดการดำเนินการนี้จึงไม่ปลอดภัยโดยตัวเอง - Conversion ของ Kotlin - คลาสของวงจรจํานวนมากได้แปลงเป็น Kotlin แล้ว คลาสที่แปลงทั้งหมดจะยังคงความเข้ากันได้แบบไบนารีกับเวอร์ชันก่อนหน้า ชั้นเรียนต่อไปนี้มีการเปลี่ยนแปลงที่ใช้ร่วมกันไม่ได้สำหรับชั้นเรียนที่เขียนด้วย Kotlin:
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
ตารางด้านล่างแสดง Conversion แหล่งที่มาสำหรับวงจรเวอร์ชันใหม่
วงจร 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 |
- ตอนนี้ค่า Null ของเมธอด
onChanged
ของObserver
ที่สร้างขึ้นใน Kotlin จะจับคู่กับค่า Null ของประเภททั่วไปแล้ว หากต้องการให้Observer.onChanged()
ยอมรับประเภทที่ไม่มีข้อมูล คุณจะต้องสร้างอินสแตนซ์Observer
ด้วยประเภทที่ไม่มีข้อมูล - ชั้นเรียนเหล่านี้ยังแปลงเป็น 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
จะเลิกใช้งานและแทนที่ด้วยเวอร์ชันที่ใช้ KotlinFunction1
การเปลี่ยนแปลงนี้จะรักษาความเข้ากันได้ของไบนารีไว้ (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, I59a/23
แก้ไขข้อบกพร่อง
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
มีข้อจำกัดที่ช่วยให้อาร์ติแฟกต์ของวงจรที่พึ่งพาระหว่างกันทั้งหมดใช้เวอร์ชันเดียวกัน โดยจะอัปเกรดทรัพยากร Dependency อื่นๆ โดยอัตโนมัติเมื่ออัปเกรด 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
ที่รวบรวมจากโฟลว์และแสดงค่าล่าสุดเป็น Compose State ตามวงจร ระบบจะรวบรวมโฟลว์และตั้งการปล่อยก๊าซใหม่เป็นค่าของรัฐเมื่อวงจรชีวิตอยู่ใน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)
ส่วนเพิ่มเติมเหล่านี้จะจัดเตรียมโดยกิจกรรมหรือ Fragment โดยอัตโนมัติเมื่อใช้กิจกรรม1.5.0
และส่วนย่อย1.5.0
ตามลำดับclass CustomFactory : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T { return when (modelClass) { HomeViewModel::class -> { // Get the Application object from extras val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) // Pass it directly to HomeViewModel HomeViewModel(application) } DetailViewModel::class -> { // Create a SavedStateHandle for this ViewModel from extras val savedStateHandle = extras.createSavedStateHandle() DetailViewModel(savedStateHandle) } else -> throw IllegalArgumentException("Unknown class $modelClass") } as T } }
ตอนนี้
lifecycle-viewmodel
มี Kotlin DSL ที่viewModelFactory
ให้คุณกำหนด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 เพื่อสร้างอินสแตนซ์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) }
การผสานรวมโปรแกรมประหยัดการเขียนของที่บันทึกไว้StateHandle - ตอนนี้อาร์ติแฟกต์
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
จะไม่ขัดข้องอีกต่อไปเมื่อรวมทรัพยากร Dependency ของวงจร 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
ออบเจ็กต์ไปยังViewModel
ที่จะ ปิดเมื่อล้างViewModel
โดยไม่มีข้อกำหนด งานที่ต้องดำเนินการด้วยตนเองในonCleared()
(I55ea0) - ปัจจุบัน
lifecycle-viewmodel
มีตัวเลือกInitializerViewModelFactory
ที่ให้คุณเพิ่ม lambda สำหรับการจัดการได้ คลาสViewModel
โดยเฉพาะ โดยใช้CreationExtras
เป็นข้อมูลหลัก แหล่งที่มา (If58fc, b/216687549) - ตอนนี้
lifecycle-viewmodel-compose
มีviewModel()
API ที่ ใช้โรงงาน lambda เพื่อสร้างอินสแตนซ์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 แล้ว ซึ่งวิธีนี้ช่วยปรับปรุงความสามารถในการเว้นว่างของคำทั่วไปในทั้ง 2 คลาส (Ib6ce2, b/216168263, I9647a, b/177667711) - พารามิเตอร์ฟังก์ชัน
LiveData
switchMap
สามารถ ตอนนี้ก็มีเอาต์พุตที่เป็นค่าว่าง (I40396, b/132923666) - ตอนนี้ส่วนขยาย -ktx
LiveData
มีคำอธิบายประกอบด้วย@CheckResult
เพื่อบังคับใช้ผลลัพธ์เมื่อเรียกใช้ (Ia0f05, b/207325134)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
SavedStateHandle
จะจัดเก็บค่าเริ่มต้นอย่างเหมาะสมเมื่อ ไม่มีค่าสำหรับคีย์ที่ระบุ (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
ใหม่ เราจะย้ายไปยังโลกของโรงงานแบบไม่เก็บสถานะที่อาศัยแนวคิดใหม่ ซึ่งก็คือ CreationExtras
แทนที่จะเป็นชุดคลาสย่อยแบบตายตัวของ ViewModelProvider.Factory
ที่แต่ละชุดเพิ่มฟังก์ชันการทำงานเพิ่มเติม (อนุญาตให้พารามิเตอร์ตัวสร้าง Application
ผ่าน AndroidViewModelFactory
SavedStateHandle
SavedStateViewModelFactory
AbstractSavedStateViewModelFactory
(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
บริการเพิ่มเติมเหล่านี้จะมีให้โดยค่าเริ่มต้นเมื่อใช้กิจกรรม 1.5.0-alpha01
, ส่วนย่อย 1.5.0-alpha01
และการนำทาง 2.5.0-alpha01
หากคุณใช้เวอร์ชันก่อนหน้าของไลบรารีเหล่านั้น CreationExtras
จะว่างเปล่า โดยคลาสย่อยทั้งหมดของ ViewModelProvider.Factory
ได้รับการเขียนใหม่เพื่อรองรับทั้งเส้นทางการสร้างเดิมที่ใช้โดยไลบรารีเหล่านี้เวอร์ชันก่อนหน้า และเส้นทางที่ CreationExtras
จะนำไปใช้ต่อไป
CreationExtras
เหล่านี้ช่วยให้คุณสร้าง ViewModelProvider.Factory
ที่ส่งเฉพาะข้อมูลที่คุณต้องการไปยัง ViewModel
แต่ละรายการได้โดยไม่ต้องอาศัยลำดับชั้นที่เข้มงวดของคลาสย่อยจากโรงงาน
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
}
}
เราใช้ฟังก์ชันส่วนขยาย Kotlin ของ createSavedStateHandle()
ใน CreationExtras
จาก SavedStateHandleSupport
เพื่อสร้าง SavedStateHandle
สําหรับ ViewModel เพียงตัวเดียวที่ต้องการใช้ (Ia6654, b/188541057)
คุณระบุ CreationExtras
ที่กำหนดเองได้โดยการลบล้าง getDefaultViewModelCreationExtras()
ใน ComponentActivity
หรือ Fragment
ทำให้ใช้งานกับ ViewModelProvider.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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- พอร์ตย้อนกลับจากอายุการใช้งาน
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()
Composable และLocalViewModelStoreOwner
- การเปลี่ยนแปลงที่ทำให้เกิดแหล่งที่มา:
ViewModelProvider
ได้รับการเขียนใหม่ในภาษา Kotlin เมธอดViewModelProvider.Factory.create
ไม่อนุญาตให้ใช้ค่าทั่วไปที่เป็นค่าว่างอีกต่อไป
- การเปลี่ยนแปลงที่ทำให้เกิดแหล่งที่มา:
- เพิ่ม coroutines 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 ที่ไม่ใช่ Coroutines จาก
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
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก Lifecycle 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 ที่ไม่ใช่ Coroutines จาก
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
ไม่อนุญาตให้มีค่าว่างอีกต่อไป ทั่วไป (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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการตรวจสอบ Lint ของ
RepeatOnLifecycleWrongUsage
ใหม่ลงในlifecycle-runtime-ktx
ซึ่งตรวจพบเมื่อมีการใช้repeateOnLifecycle
อย่างไม่ถูกต้องในonStart()
หรือonResume()
(706078, b/187887400)
การเปลี่ยนแปลง API
LifecycleOwner.addRepeatingJob
API ถูกนำออกใน ชอบLifecycle.repeatOnLifecycle
ที่ยึดตามโครงสร้าง เกิดขึ้นพร้อมกัน และให้เหตุผลง่ายขึ้น (I4a3a8)- กำหนดให้
ProcessLifecycleInitializer
เป็นแบบสาธารณะเพื่อให้androidx.startup.Initializer
รายการอื่นๆ ใช้เป็นทรัพยากร Dependency ได้ (I94c31)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาการตรวจสอบ Lint ของ
NullSafeMutableLiveData
เมื่อช่องมีตัวแก้ไข (#147, b/183696616) - แก้ไขปัญหาอื่นเกี่ยวกับการตรวจสอบ Lint ของ
NullSafeMutableLiveData
เมื่อใช้คำทั่วไป (#161, b/184830263)
การสนับสนุนภายนอก
- ขอขอบคุณ maxsav สำหรับการปรับปรุงการตรวจสอบ Lint ของ
NullSafeMutableLiveData
(#147, b/183696616) - ขอขอบคุณ kozaxinan สำหรับการปรับปรุงการตรวจสอบ Lint ของ
NullSafeMutableLiveData
(#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)
แก้ไขข้อบกพร่อง
- จากอายุการใช้งาน 2.3.1: ตอนนี้กฎ Lint ของ
NonNullableMutableLiveData
ได้ถูกต้อง แยกความแตกต่างระหว่างตัวแปรฟิลด์ที่มีความสามารถในการเว้นว่างที่แตกต่างกัน (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 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงการขึ้นต่อกัน
- เวอร์ชันนี้อนุญาต
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
เพื่อให้ระบุได้ดีขึ้น ปัจจุบันมี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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้กฎ Lint
NonNullableMutableLiveData
สามารถ แยกความแตกต่างระหว่างตัวแปรฟิลด์ที่มีความสามารถในการเว้นว่างที่แตกต่างกัน (b/169249668)
เวอร์ชัน 2.3.0
เวอร์ชัน 2.3.0
10 กุมภาพันธ์ 2021
ปล่อย androidx.lifecycle:lifecycle-*:2.3.0
แล้ว เวอร์ชัน 2.3.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.2.0
SavedStateHandle
การรองรับคลาสที่จัดกลุ่มไม่ได้: ตอนนี้SavedStateHandle
รองรับการทำให้เป็นอนุกรมแบบ Lazy แล้ว โดยอนุญาตให้คุณเรียกใช้setSavedStateProvider()
สำหรับคีย์ที่ต้องการ ซึ่งเป็นการมอบSavedStateProvider
ที่จะเรียกกลับไปยังsaveState()
เมื่อระบบขอให้SavedStateHandle
บันทึกสถานะ โปรดดูหัวข้อการบันทึกชั้นเรียนที่จัดกลุ่มไม่ได้- การบังคับใช้นโยบายพฤติกรรมในวงจร
- ตอนนี้ LifecycleRegistry บังคับใช้
DESTROYED
เป็นสถานะเทอร์มินัล - ตอนนี้
LifecycleRegistry
ยืนยันว่ามีการเรียกใช้เมธอดในเทรดหลัก ซึ่งมักเป็นสิ่งจำเป็นสำหรับวงจรของกิจกรรม ส่วนย่อย ฯลฯ การเพิ่มผู้สังเกตการณ์จากชุดข้อความที่ไม่ใช่หัวข้อหลักส่งผลให้ตรวจจับข้อขัดข้องในระหว่างรันไทม์ได้ยาก สำหรับออบเจ็กต์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: API ของViewTreeLifecycleOwner.get(View)
และViewTreeViewModelStoreOwner.get(View)
ใหม่ทำให้คุณสามารถเรียกข้อมูลLifecycleOwner
และViewModelStoreOwner
ที่มีอินสแตนซ์ตามView
ได้ คุณต้องอัปเกรดเป็นกิจกรรม1.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
- ส่วนขยาย Kotlin
LiveData.observe()
จําเป็นต่อการใช้ไวยากรณ์ 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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาข้อขัดข้องในการตรวจสอบ Lint ของ
NullSafeMutableLiveData
แล้ว (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) - เพิ่ม API ของ
Lifecycle.withStateAtLeast
ที่รอสถานะของวงจรและเรียกใช้บล็อกโค้ดที่ไม่มีการระงับพร้อมกันเมื่อมีการเปลี่ยนแปลงสถานะ แล้วกลับมาใช้งานอีกครั้ง กับผลลัพธ์ API เหล่านี้แตกต่างจากเมธอดwhen*
ที่มีอยู่เนื่องจากไม่อนุญาตให้เรียกใช้โค้ดการระงับ และไม่ใช้ผู้มอบหมายงานที่กำหนดเอง (aosp/1326081)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ LifecycleRegistry บังคับใช้
DESTROYED
เป็นสถานะเทอร์มินัล (I00887) - ตอนนี้
LifecycleRegistry
ยืนยันว่ามีการเรียกใช้เมธอดในเทรดหลัก ซึ่งมักเป็นสิ่งจำเป็นสำหรับวงจรของกิจกรรม ส่วนย่อย ฯลฯ การเพิ่มผู้สังเกตการณ์จากชุดข้อความที่ไม่ใช่หัวข้อหลักส่งผลให้ตรวจจับข้อขัดข้องในระหว่างรันไทม์ได้ยาก สำหรับออบเจ็กต์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) - ขณะนี้การตรวจสอบ Lint
NonNullableMutableLiveData
ครอบคลุมกรณีที่มีการตั้งค่าnull
ในMutableLiveData
ด้วยพารามิเตอร์ประเภทที่ไม่เป็นค่าว่างอย่างมีนัยสำคัญ (b/156002218)
เวอร์ชัน 2.3.0-alpha03
20 พฤษภาคม 2020
ปล่อย androidx.lifecycle:lifecycle-*:2.3.0-alpha03
แล้ว เวอร์ชัน 2.3.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
SavedStateHandle
รองรับการทำให้เป็นอนุกรมแบบ Lazy Loading แล้วโดยให้คุณเรียกใช้setSavedStateProvider()
สำหรับคีย์ที่ต้องการ โดยระบุSavedStateProvider
ซึ่งจะได้รับการติดต่อกลับไปยังsaveState()
เมื่อระบบขอให้SavedStateHandle
บันทึกสถานะ (b/155106862) ViewTreeViewModelStoreOwner.get(View)
API ใหม่จะช่วยให้คุณเรียกViewModelStoreOwner
ที่มีอินสแตนซ์นั้นให้กับอินสแตนซ์View
ได้ คุณต้องอัปเกรดเป็นกิจกรรม1.2.0-alpha05
, ส่วนย่อย1.3.0-alpha05
และ AppCompat1.3.0-alpha01
เพื่อป้อนข้อมูลให้ถูกต้อง เพิ่มส่วนขยาย KotlinfindViewModelStoreOwner()
ไปยังlifecycle-viewmodel-ktx
แล้ว (aosp/1295522)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้การตรวจสอบ Lint
MutableLiveData
ที่เผยแพร่ในวงจร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
ที่เป็นค่าว่างไปยังตัวสร้างเพื่อการสนับสนุนกรณีได้ดียิ่งขึ้นในกรณีที่ไม่พร้อมใช้งาน และไม่จำเป็นต้องมีการสนับสนุนสำหรับ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
ได้ คุณต้องอัปเกรดเป็นกิจกรรม1.2.0-alpha01
และส่วนย่อย1.3.0-alpha01
เพื่อป้อนข้อมูลอย่างถูกต้อง ส่วนขยาย Kotlin สำหรับfindViewTreeLifecycleOwner
พร้อมให้ใช้งานในlifecycle-runtime-ktx
(aosp/1182361, aosp/1182956)- เพิ่มการตรวจสอบ Lint ใหม่ที่เตือนคุณเมื่อตั้งค่า
null
ในMutableLiveData
ซึ่งกำหนดไว้ใน Kotlin ว่าไม่เป็นค่าว่าง ซึ่งจะใช้ได้เมื่อใช้อาร์ติแฟกต์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 มีคอมมิตเหล่านี้
ตอนนี้ Lifecycle ViewModel savedState ใช้เวอร์ชันเดียวกันกับอาร์ติแฟกต์ 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: ตัวประมวลผลคำอธิบายประกอบของ 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 ที่ตรวจสอบการติดตั้งใช้งานการดำเนินการในบรรทัด
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้ส่วนขยายอายุการใช้งานขึ้นอยู่กับ Fragment
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 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่เกิดขึ้นในวงจร 2.2.0-alpha05 ในลําดับ
ProcessLifecycleOwner
และLifecycleOwner
ของกิจกรรมจะย้ายไปเริ่มต้นและกลับมาทำงานอีกครั้งในอุปกรณ์ Android 10 (aosp/1128132) - แก้ไขการถดถอยที่ใช้ในวงจร
2.2.0-alpha05
ซึ่งจะทําให้เกิดNullPointerException
เมื่อใช้เวอร์ชัน2.0.0
หรือ2.1.0
ของlifecycle-process
(b/141536990)
เวอร์ชัน 2.2.0-alpha05
18 กันยายน 2019
ปล่อย androidx.lifecycle:lifecycle-*:2.2.0-alpha05
แล้ว เวอร์ชัน 2.2.0-alpha05 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขภาวะการแข่งขันในเครื่องมือสร้างข้อมูลสดของ 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
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้คุณสามารถติดตั้งใช้งาน
HasDefaultViewModelProviderFactory
เพื่อระบุViewModelProvider.Factory
เริ่มต้น (ไม่บังคับ) ได้แล้วViewModelStoreOwner
โดยดำเนินการสำหรับกิจกรรม1.1.0-alpha02
ส่วนย่อย1.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 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้ Lifecycle ViewModel savedState ขึ้นอยู่กับอายุการใช้งาน
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 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้จะขึ้นอยู่กับวงจรการใช้งาน
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 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเข้าถึง SaveState ViewModel เป็นครั้งแรกใน
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
สำหรับ ViewModels ที่ขอให้มี URL ดังกล่าวเท่านั้น (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
, ส่วนย่อย1.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
สามารถสนับสนุนสถานะที่บันทึกไว้แล้ว ในการใช้โมเดลดังกล่าว ให้ใช้SavedStateVMFactory
ซึ่งเป็นโรงงานของ viewmodel ที่เพิ่งแนะนำและ ViewModel ควรมีตัวสร้างที่รับออบเจ็กต์SavedStateHandle
เป็นพารามิเตอร์
เวอร์ชัน 2.1.0
การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.0.0
- เพิ่ม
LifecycleEventObserver
สําหรับกรณีที่จําเป็นต้องมีสตรีมเหตุการณ์ในวงจร ซึ่งเป็น API สาธารณะแทนที่จะเป็นคลาสGenericLifecycleObserver
ที่ซ่อนอยู่ - เพิ่มส่วนขยาย ktx สำหรับเมธอด
LiveData.observe
และTransformations.*
เมธอด - เพิ่ม
Transformations.distinctUntilChanged
แล้ว ซึ่งจะสร้างออบเจ็กต์ LiveData ใหม่ที่ไม่ระบุค่าจนกว่าจะมีการเปลี่ยนค่าLiveData
ของแหล่งที่มา - เพิ่มการรองรับโครูทีนใน ViewModels โดยเพิ่มพร็อพเพอร์ตี้ส่วนขยาย
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
ด้วยการมอบสิทธิ์พร็อพเพอร์ตี้ และ API อื่นๆ จะมีความเสถียรและไม่มีการเปลี่ยนแปลง
เวอร์ชัน 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 ใน ViewModels: เพิ่มพร็อพเพอร์ตี้ส่วนขยาย
ViewModel.viewModelScope
แล้ว - เพิ่ม
ViewModelProvider.KeyedFactory
ซึ่งเป็นโรงงานสำหรับ ViewModels ที่ได้รับkey
และClass
ในเมธอดcreate
เวอร์ชัน 2.0.0
เวอร์ชัน 2.0.0
21 กันยายน 2018
เผยแพร่วงจร 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 เพื่ออนุญาตให้มีการปรับให้ยากต่อการอ่าน (Obfuscation) และการย่อ
เวอร์ชันก่อน AndroidX
สำหรับ Lifecycle เวอร์ชันก่อน AndroidX ที่ตามมา ให้ใส่ทรัพยากร Dependency ต่อไปนี้
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
มีการเปลี่ยนแปลงเพียงเล็กน้อยเท่านั้น: android.arch.core.util.Function
ถูกย้ายจาก arch:runtime
ไปยัง arch:common
วิธีนี้จะช่วยให้ใช้ได้โดยไม่ต้องพึ่งรันไทม์ เช่น ใน paging:common
ด้านล่าง
lifecycle:common
เป็นทรัพยากร Dependency ของ 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