วงจร

คอมโพเนนต์ที่รับรู้วงจรจะดําเนินการเพื่อตอบสนองต่อการเปลี่ยนแปลงสถานะวงจรของคอมโพเนนต์อื่น เช่น กิจกรรมและ Fragment คอมโพเนนต์เหล่านี้ช่วยให้คุณสร้างโค้ดที่มีการจัดระเบียบดีขึ้นและมักจะมีน้ำหนักเบากว่า ซึ่งทำให้ดูแลรักษาได้ง่ายขึ้น

ตารางนี้จะแสดงรายการอาร์ติแฟกต์ทั้งหมดในกลุ่ม androidx.lifecycle

อาร์ติแฟกต์ รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า เวอร์ชันอัลฟ่า
lifecycle-* 2.9.0 - - -
lifecycle-viewmodel-compose 2.9.0 - - -
ไลบรารีนี้อัปเดตล่าสุดเมื่อวันที่ 7 พฤษภาคม 2025

การประกาศทรัพยากร 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 ที่เพิ่มเข้ามาใน SavedState 1.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 ที่เพิ่มเข้ามาใน SavedState 1.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.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

เวอร์ชัน 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 มี API dropUnlessResumed และ 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 นอกเหนือจาก Android
  • lifecycle-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
  • การใช้ 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
  • การใช้ 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 เป็น Compose State ได้โดยตรง ซึ่งเทียบเท่ากับ 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 เพื่อเรียกใช้ Compose SideEffect โดยอิงตามทั้ง Callback เหตุการณ์ Lifecycle.Event.ON_RESUME และ Lifecycle.Event.ON_PAUSE (I60386, b/235529345)
  • เพิ่ม LifecycleStartEffect API เพื่อเรียกใช้ Compose SideEffect โดยอิงตาม Callback เหตุการณ์ Lifecycle.Event.ON_START และ Lifecycle.Event.ON_STOP (I5a8d1, b/235529345)
  • เพิ่ม LifecycleEventEffect API เพื่อเรียกใช้ Compose SideEffect ตาม 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

เวอร์ชัน 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 ที่แสดงผล Kotlin StateFlow สำหรับการตรวจสอบการเปลี่ยนแปลงค่าแทนการใช้ LiveData

  • ViewModel CreationExtras - เมื่อเขียน ViewModelProvider.Factory ที่กําหนดเอง คุณไม่จําเป็นต้องขยาย AndroidViewModelFactory หรือ AbstractSavedStateViewModelFactory เพื่อเข้าถึง Application หรือ SavedStateHandle ตามลําดับอีกต่อไป แต่ระบบจะส่งฟิลด์เหล่านี้ไปยังคลาสย่อย ViewModelProvider.Factory ทุกคลาสเป็น CreationExtras ผ่าน create แบบโอเวอร์โหลดใหม่: create(Class<T>, CreationExtras) ข้อมูลเพิ่มเติมเหล่านี้จะมาจากกิจกรรมหรือข้อมูลโค้ดโดยอัตโนมัติเมื่อใช้ Activity 1.5.0 และ Fragment 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 มี 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 ของ ViewModel

    class 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 ที่แสดงผล Kotlin StateFlow สำหรับการตรวจสอบการเปลี่ยนแปลงค่าแทนการใช้ 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)

การมีส่วนร่วมจากภายนอก

  • ขอขอบคุณ dmitrilc ที่ช่วยแก้ไขประเภทในเอกสารประกอบของ ViewModel (#221)

เวอร์ชัน 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 นี้จากเธรดอื่น
  • ตัวช่วยสถานะวงจรและเหตุการณ์: เพิ่มเมธอดตัวช่วยแบบคงที่ของ 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 คุณต้องอัปเกรดเป็น Activity 1.2.0 และ Fragment 1.3.0 รวมถึง AppCompat 1.3.0-alpha01 ขึ้นไปเพื่อป้อนข้อมูลนี้อย่างถูกต้อง ส่วนขยาย Kotlin findViewTreeLifecycleOwner และ 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)

การมีส่วนร่วมจากภายนอก

เวอร์ชัน 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)

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

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

  • เราได้อัปเดตเอกสารเกี่ยวกับ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 คุณต้องอัปเกรดเป็น Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 และ AppCompat 1.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 คุณต้องอัปเกรดเป็น Activity 1.2.0-alpha01 และ Fragment 1.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) ใหม่เพื่อให้ได้ฟังก์ชันการทำงานแบบเดียวกันเมื่อใช้ Fragment 1.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 ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

การเปลี่ยนแปลง 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, Fragment 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 มีส่วนร่วมใน savedstate ได้แล้ว โดยคุณใช้ SavedStateVMFactory ของ Factory ของ ViewModel ที่เพิ่งเปิดตัวใหม่ และ ViewModel ควรมี Constructor ที่ได้รับ SavedStateHandleobject เป็นพารามิเตอร์

เวอร์ชัน 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 ใช้งานร่วมกับฟีเจอร์ใหม่ เช่น การเปลี่ยนเส้นทางพร็อพเพอร์ตี้ใน Kotlin by 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