วงจร

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

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

อาร์ติแฟกต์ รุ่นที่เสถียร ตัวเลือกถอนการอ้างสิทธิ์ รุ่นเบต้า รุ่นอัลฟ่า
วงจร-* 2.8.4 - - -
Lifecycle-viewmodel-compose 2.8.4 - - -
คลังนี้ได้รับการอัปเดตล่าสุดเมื่อวันที่ 24 กรกฎาคม 2024

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

หากต้องการเพิ่มทรัพยากร Dependency ใน Lifecycle คุณต้องเพิ่มที่เก็บ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม

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

Kotlin

ดึงดูด

    dependencies {
        def lifecycle_version = "2.8.4"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
        // ViewModel utilities for Compose
        implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
        // Lifecycle utilities for Compose
        implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // Annotation processor
        kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.8.4"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
        // ViewModel utilities for Compose
        implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")
        // Lifecycle utilities for Compose
        implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // Annotation processor
        kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

Java

ดึงดูด

    dependencies {
        def lifecycle_version = "2.8.4"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // Annotation processor
        annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.8.4"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // Annotation processor
        annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

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

ความคิดเห็น

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

สร้างรายการใหม่

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

เวอร์ชัน 2.8

เวอร์ชัน 2.8.4

24 กรกฎาคม 2024

ปล่อย androidx.lifecycle:lifecycle-*:2.8.4 แล้ว เวอร์ชัน 2.8.4 มีสัญญาผูกมัดเหล่านี้

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

  • ตอนนี้ LiveData.asFlow() จะจัดการกรณีที่โฟลว์ที่แสดงผลเสร็จสมบูรณ์ทันทีหลังจากที่ได้รับค่าที่ตั้งไว้ใน LiveData แล้ว (เช่น เมื่อใช้ take(1)) (I9c566)
  • ตอนนี้การทำงาน Lifecycle*Effect เสร็จสมบูรณ์เป็นนิจพล (เช่น หากมีการเรียก onStopOrDispose เนื่องจากวงจรหยุดทำงาน จะไม่มีการเรียกใช้เป็นครั้งที่ 2 เมื่อกำจัด เว้นแต่วงจรจะกลับไปเป็น STARTED อีกครั้ง) (I5f607, b/352364595)

เวอร์ชัน 2.8.3

1 กรกฎาคม 2024

ปล่อย androidx.lifecycle:lifecycle-*:2.8.3 แล้ว เวอร์ชัน 2.8.3 มีสัญญาผูกมัดเหล่านี้

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

  • แก้ไขปัญหาความเข้ากันได้แบบย้อนหลังกับ Compose 1.6.0 และเวอร์ชันที่ต่ำกว่าของ Lifecycle 2.8 เมื่อใช้การย่อโค้ด (aosp/3133056, b/346808608)

เวอร์ชัน 2.8.2

12 มิถุนายน 2024

ปล่อย androidx.lifecycle:lifecycle-*:2.8.2 แล้ว เวอร์ชัน 2.8.2 มีสัญญาผูกมัดเหล่านี้

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

  • แก้ไขข้อผิดพลาด CompositionLocal LocalLifecycleOwner not present รายการเมื่อใช้ Lifecycle 2.8.X กับ Compose 1.6.X หรือเวอร์ชันก่อนหน้า ขณะนี้คุณสามารถใช้ Lifecycle 2.8.2 กับ Compose เวอร์ชันใดก็ได้โดยไม่ต้องใช้วิธีแก้ปัญหาเบื้องต้น (aosp/3105647, b/336842920)
  • ViewModelProvider จะไม่ขัดข้องอีกต่อไปเมื่อรวมทรัพยากร Dependency ของ compileOnly เวอร์ชันก่อนหน้าร่วมกับเวอร์ชัน 2.8 ขึ้นไป ซึ่งแก้ปัญหาเกี่ยวกับไลบรารี เช่น LeakCanary (I80383, b/341792251)

เวอร์ชัน 2.8.1

29 พฤษภาคม 2024

ปล่อย androidx.lifecycle:lifecycle-*:2.8.1 แล้ว เวอร์ชัน 2.8.1 มีสัญญาผูกมัดเหล่านี้

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

  • ตอนนี้ lifecycle-viewmodel-compose มีเฉพาะทรัพยากร Dependency ทั่วไปใน compose-runtime เท่านั้น โดยระบบจะนำทรัพยากร Dependency ทั่วไปออกจาก compose-ui อาร์ติแฟกต์ Android จะคง compose-ui ไว้เพื่อความเข้ากันได้ (aosp/3079334, b/339562627)
  • ตอนนี้การผสานรวม saveable ของ ViewModel ที่ใช้ผู้รับมอบสิทธิ์พร็อพเพอร์ตี้จะใช้ชื่อคลาสเป็นส่วนหนึ่งของคีย์ที่สร้างขึ้นโดยอัตโนมัติ เพื่อหลีกเลี่ยงความขัดแย้งหากมีหลายคลาสใช้ SavedStateHandle เดียวกัน (aosp/3063463)

เวอร์ชัน 2.8.0

14 พฤษภาคม 2024

ปล่อย androidx.lifecycle:lifecycle-*:2.8.0 แล้ว เวอร์ชัน 2.8.0 มีสัญญาผูกมัดเหล่านี้

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

  • ย้าย LocalLifecycleOwner จาก Compose UI ไปยัง lifecycle-runtime-compose แล้วเพื่อให้ใช้ API ตัวช่วยที่ใช้ Compose ภายนอก UI ของ Compose ได้
  • ตอนนี้อาร์ติแฟกต์ lifecycle-runtime-compose มี API dropUnlessResumed และ dropUnlessStarted ซึ่งช่วยให้คุณข้ามการคลิกหรือเหตุการณ์อื่นๆ ที่เกิดขึ้นแม้ว่า LifecycleOwner จะลดลงต่ำกว่า Lifecycle.State ที่ระบุก็ตาม ตัวอย่างเช่น สามารถใช้กับการเขียนในการไปยังส่วนต่างๆ เพื่อหลีกเลี่ยงการจัดการกิจกรรมการคลิกหลังจากที่เริ่มการเปลี่ยนไปยังหน้าจออื่นแล้ว: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ขณะนี้ ViewModel.viewModelScope เป็นพารามิเตอร์ตัวสร้างที่ลบล้างได้ ทำให้คุณสามารถแทรกผู้มอบหมายงานของคุณเองและ SupervisorJob() หรือลบล้างค่าเริ่มต้นโดยใช้ backgroundScope ที่มีอยู่ภายใน runTest (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    
  • เขียน ViewModel ใหม่เป็นภาษา Kotlin และตอนนี้ใช้ AutoClosable แทน Closeable แล้ว ขณะนี้ระบบรองรับการเพิ่มออบเจ็กต์ AutoCloseable ด้วย key ซึ่งช่วยให้เรียกข้อมูลผ่าน getCloseable() ได้

  • ตอนนี้การเรียกใช้ LifecycleStartEffect และ LifecycleResumeEffect โดยไม่มีคีย์ถือเป็นข้อผิดพลาด ซึ่งเป็นไปตามรูปแบบเดียวกันกับ DisposableEffect API ที่ API เหล่านี้มิเรอร์

  • เลิกใช้งาน LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) เพื่อใช้ LiveData.toPublisher(lifecycleOwner) แทน

  • ย้ายส่วนขยาย Kotlin lifecycle-livedata-core-ktx ไปยังโมดูล lifecycle-livedata-core แล้ว

  • มีการเปลี่ยนโครงสร้างภายใน NullSafeMutableLiveData เพื่อหลีกเลี่ยงผลบวกลวงจำนวนมาก

ความเข้ากันได้กับหลายแพลตฟอร์มของ Kotlin ในวงจร

ตอนนี้ Lifecycle API หลักใน Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event และ LifecycleRegistry จัดส่งในอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform

อาร์ติแฟกต์ที่ได้รับผลกระทบ:

  • lifecycle-common ย้าย API ส่วนใหญ่ไปยัง common และรองรับ jvm และ iOS นอกเหนือจาก 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 ยังคงได้รับการรักษา แต่มีการเปลี่ยนแปลงที่สำคัญ 2-3 อย่างเมื่อเปรียบเทียบแพลตฟอร์ม Android API กับแพลตฟอร์ม API ทั่วไป

  • ตอนนี้การสร้างอินสแตนซ์ ViewModelProvider จะทําผ่านเมธอด ViewModelProvider.create() แทนการเรียกใช้ตัวสร้างของอินสแตนซ์โดยตรง
  • ViewModelProvider.NewInstanceFactory และ ViewModelProvider.AndroidViewModelFactory มีให้บริการใน Android เท่านั้น
    • เราขอแนะนำให้ขยายกลุ่มที่กำหนดเองจาก ViewModelProvider.Factory และใช้เมธอด create ที่ใช้ CreationExtras หรือใช้ Kotlin DSL ของ viewModelFactory
  • การใช้ ViewModelProvider โดยไม่มีโรงงานที่กำหนดเองในแพลตฟอร์มที่ไม่ใช่ JVM จะส่งผลให้ได้รับ UnsupportedOperationException ในแพลตฟอร์ม JVM นั้น ระบบสามารถรักษาความเข้ากันได้โดยใช้ตัวสร้าง ViewModel แบบไม่มีอาร์กิวเมนต์ หากไม่ได้ระบุค่าจากโรงงานที่กำหนดเอง
  • viewModelScope จะเปลี่ยนไปใช้ EmptyCoroutineContext ในแพลตฟอร์มที่ Dispatchers.Main ไม่พร้อมใช้งาน (เช่น Linux)

อาร์ติแฟกต์ที่ได้รับผลกระทบ:

  • lifecycle-viewmodel ย้าย API ส่วนใหญ่ไปยัง common และรองรับ jvm และ iOS นอกเหนือจาก 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 อย่างไม่ถูกต้อง ข้อมูลเหล่านี้รวมอยู่ใน AAR lifecycle-runtime แล้ว (aosp/3038274, b/322382422)
  • แก้ไขการเรียงลำดับอินสแตนซ์ AutoCloseable ที่แนบกับ ViewModel โดยไม่ได้ตั้งใจ ซึ่งเป็นการจัดเรียง addCloseable(String, AutoCloseable) ก่อนหน้า จากนั้นจึงกู้คืน addClosable(AutoCloseable) และ onCleared() (aosp/3041632)
  • ปรับปรุงลักษณะการสร้างเริ่มต้นของ viewModelScope สำหรับสภาพแวดล้อมเดสก์ท็อปแบบเนทีฟและ JVM (aosp/3039221)

การสนับสนุนภายนอก

  • ขอขอบคุณ Victor Kropp ที่ปรับปรุงการตรวจสอบชุดข้อความหลักใน JVM Desktop (aosp/3037116)

เวอร์ชัน 2.8.0-beta01

17 เมษายน 2024

ปล่อย androidx.lifecycle:lifecycle-*:2.8.0-beta01 แล้ว เวอร์ชัน 2.8.0-beta01 มีสัญญาผูกมัดเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้อาร์ติแฟกต์ lifecycle-runtime-compose ใช้ได้กับ Kotlin Multiplatform โดยย้ายโค้ดไปยัง common และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มสำหรับ androidx.compose (If7a71, I4f4a0, b/331769623)

เวอร์ชัน 2.8.0-alpha04

3 เมษายน 2024

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

ฟีเจอร์ใหม่

  • ตอนนี้อาร์ติแฟกต์ lifecycle-viewmodel-compose ใช้ได้กับ Kotlin Multiplatform โดยย้ายโค้ดไปยัง common และจัดส่งอาร์ติแฟกต์ Android ซึ่งตรงกับการรองรับหลายแพลตฟอร์มของ androidx.compose การรองรับการเปลี่ยนแปลงนี้ทำให้เมธอด viewModel ที่เขียนได้รองรับ KClass นอกเหนือจาก java.lang.Class แล้ว (b/330323282)

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

  • มีการเปลี่ยนโครงสร้างภายใน NullSafeMutableLiveData เพื่อหลีกเลี่ยงผลบวกลวงจำนวนมาก (I2d8c1, Iafb18, I03463, I7ecef)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.8.0-alpha03

20 มีนาคม 2024

ปล่อย androidx.lifecycle:lifecycle-*:2.8.0-alpha03 แล้ว เวอร์ชัน 2.8.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ขณะนี้ ViewModel.viewModelScope เป็นพารามิเตอร์ตัวสร้างที่ลบล้างได้ ทำให้คุณสามารถแทรกผู้มอบหมายงานของคุณเองและ SupervisorJob() หรือลบล้างค่าเริ่มต้นโดยใช้ backgroundScope ที่มีอยู่ภายใน runTest (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    

ความเข้ากันได้กับหลายแพลตฟอร์มของ Kotlin

ตอนนี้อาร์ติแฟกต์ lifecycle-viewmodel และ API เช่น ViewModel, ViewModelStore, ViewModelStoreOwner และ ViewModelProvider จัดส่งในอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform (b/214568825)

เพื่อรองรับการเปลี่ยนแปลงนี้ เมธอดต่างๆ เช่น เมธอดใน ViewModelProvider ที่ใช้ java.lang.Class<T> จึงมีเมธอดที่เทียบเท่าซึ่งใช้ kotlin.reflect.KClass<T> แทน

ความเข้ากันได้แบบไบนารีใน Android ยังคงได้รับการรักษา แต่มีการเปลี่ยนแปลงที่สำคัญ 2-3 อย่างเมื่อเปรียบเทียบแพลตฟอร์ม Android API กับแพลตฟอร์ม API ทั่วไป

  • ตอนนี้การสร้างอินสแตนซ์ ViewModelProvider จะทําผ่านเมธอด ViewModelProvider.create() แทนการเรียกใช้ตัวสร้างของอินสแตนซ์โดยตรง
  • ViewModelProvider.NewInstanceFactory และ ViewModelProvider.AndroidViewModelFactory มีให้บริการใน Android เท่านั้น
    • เราขอแนะนำให้ขยายกลุ่มที่กำหนดเองจาก ViewModelProvider.Factory และใช้เมธอด create ที่ใช้ CreationExtras หรือใช้ Kotlin DSL ของ viewModelFactory
  • การใช้ ViewModelProvider โดยไม่มีโรงงานที่กำหนดเองในแพลตฟอร์มที่ไม่ใช่ JVM จะส่งผลให้ได้รับ UnsupportedOperationException ในแพลตฟอร์ม JVM นั้น ระบบสามารถรักษาความเข้ากันได้โดยใช้ตัวสร้าง ViewModel แบบไม่มีอาร์กิวเมนต์ หากไม่ได้ระบุค่าจากโรงงานที่กำหนดเอง
  • viewModelScope จะเปลี่ยนไปใช้ EmptyCoroutineContext ในแพลตฟอร์มที่ Dispatchers.Main ไม่พร้อมใช้งาน (เช่น Linux)

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

  • ตอนนี้ InitializerViewModelFactory (รวมถึงฟังก์ชันเครื่องมือสร้าง viewModelFactory) จะส่ง IllegalArgumentException หากมีการเพิ่ม initializer ที่มี clazz: KClass<VM : ViewModel> เดียวกันแล้ว (Ic3a36)

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

  • ViewModel.getCloseable จัดการคีย์ที่ซ้ำกันแล้ว หาก key มีทรัพยากร AutoCloseable ที่เชื่อมโยงอยู่แล้ว ระบบจะแทนที่และปิดทรัพยากรเดิมทันที (Ibeb67)
  • การเข้าถึง viewModelScope ของ ViewModel ปลอดภัยแล้ว (If4766, b/322407038)

การสนับสนุนภายนอก

  • LocalLifecycleOwner ย้ายจาก UI ของ Compose ไปยังการเขียนใน Lifecycle-runtime เพื่อให้สามารถใช้ API ตัวช่วยแบบ Compose ภายนอก UI ของ Compose ได้ ขอขอบคุณ Jake Wharton ที่ร่วมให้ข้อมูล (I6c41b, b/328263448)

เวอร์ชัน 2.8.0-alpha02

21 กุมภาพันธ์ 2024

ปล่อย androidx.lifecycle:lifecycle-*:2.8.0-alpha02 แล้ว เวอร์ชัน 2.8.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่ม API ของ dropUnlessResumed และ dropUnlessStarted แล้ว ซึ่งช่วยให้คุณข้ามการคลิกหรือเหตุการณ์อื่นๆ ที่เกิดขึ้นแม้ว่า LifecycleOwner จะลดลงต่ำกว่า Lifecycle.State ที่ระบุก็ตาม ตัวอย่างเช่น สามารถใช้กับการเขียนในการไปยังส่วนต่างๆ เพื่อหลีกเลี่ยงการจัดการกิจกรรมการคลิกหลังจากที่เริ่มการเปลี่ยนไปยังหน้าจออื่นแล้ว: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } (Icba83, b/317230685)

Conversion ของ Kotlin

  • ตอนนี้เขียน ViewModel เป็นภาษา Kotlin (I16f26, b/214568825) แล้ว
  • ย้ายส่วนขยาย Kotlin lifecycle-viewmodel-ktx ไปยังโมดูลวงจรพื้นฐานแล้ว (Id787b, b/274800183)
  • ย้ายส่วนขยาย Kotlin lifecycle-runtime-ktx ไปยังโมดูลวงจรพื้นฐานแล้ว (Ic3686, b/274800183)
  • ย้ายส่วนขยาย Kotlin lifecycle-livedata-core-ktx ไปยังโมดูลวงจรพื้นฐานแล้ว (I54a3d, b/274800183)

ความเข้ากันได้กับหลายแพลตฟอร์มของ Kotlin

  • ตอนนี้ Lifecycle API หลักใน Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event และ LifecycleRegistry จัดส่งในอาร์ติแฟกต์ที่เข้ากันได้กับ Kotlin Multiplatform (b/317249252)

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

  • ตอนนี้การเรียกใช้ LifecycleStartEffect และ LifecycleResumeEffect โดยไม่มีคีย์ถือเป็นข้อผิดพลาด ซึ่งเป็นไปตามรูปแบบเดียวกันกับ DisposableEffect API ที่ API เหล่านี้มิเรอร์ (Ib0e0c, b/323518079)
  • ตอนนี้ ViewModel ใช้ AutoCloseable แทน Closeable ซึ่งเป็นการเปลี่ยนแปลงที่เข้ากันได้แบบย้อนหลัง (I27f8e, b/214568825)
  • เลิกใช้งาน LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) เพื่อใช้ LiveData.toPublisher(lifecycleOwner) แทน (Iabe29, b/262623005)

การสนับสนุนภายนอก

  • ขอขอบคุณ Ivan Matkov จาก Jetbrains ที่เข้ามาช่วยย้าย Lifecycle ไปใช้ Kotlin Multiplatform (aosp/2926690, I0c5ac, If445d)

เวอร์ชัน 2.8.0-alpha01

24 มกราคม 2024

ปล่อย androidx.lifecycle:lifecycle-*:2.8.0-alpha01 แล้ว เวอร์ชัน 2.8.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ ViewModel รองรับการเพิ่มออบเจ็กต์ Closeable รายการที่มี key ที่อนุญาตให้เรียกข้อมูลผ่าน getCloseable() แล้ว (I3cf63)

เวอร์ชัน 2.7

เวอร์ชัน 2.7.0

10 มกราคม 2024

ปล่อย androidx.lifecycle:lifecycle-*:2.7.0 แล้ว เวอร์ชัน 2.7.0 มีคอมมิตเหล่านี้

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

  • ตอนนี้ TestLifecycleOwner มีฟังก์ชันการระงับ setCurrentState() ซึ่งทำให้มั่นใจได้ว่าการเปลี่ยนแปลงสถานะและ Callback ของ LifecycleObserver ทั้งหมดจะเสร็จสมบูรณ์ก่อนแสดงผล สิ่งที่สังเกตได้คือ วิธีนี้ต่างจากการตั้งค่าพร็อพเพอร์ตี้ currentState โดยตรงตรงที่ไม่ได้เป็นการใช้ runBlocking จึงปลอดภัยต่อการใช้งานภายในโครูทีน เช่น โครูทีนที่ runTest ระบุไว้
  • ส่วนขยาย LiveData ของ map และ switchMap จําลองลักษณะการทำงานของ distinctUntilChanged แล้ว หาก LiveData ตั้งค่า value ไว้ ระบบจะเรียกใช้ฟังก์ชัน map/switchMap ทันทีเพื่อป้อนข้อมูล value ของ LiveData ที่แสดงผล วิธีนี้ช่วยให้มั่นใจว่าระบบจะตั้งค่าเริ่มต้นให้เป็นส่วนหนึ่งของการเรียบเรียงแรก (เมื่อใช้กับ observeAsState()) แต่จะไม่เปลี่ยนแปลงลักษณะการสังเกต การอัปเดตค่าจากแหล่งที่มา LiveData จะยังคงมีผลเมื่อคุณเริ่มสังเกต LiveData เท่านั้น
  • รุ่นนี้แก้ปัญหาที่ SavedStateHandle คืนค่าคลาส Parcelable ที่กำหนดเองไม่ถูกต้องหลังจากกระบวนการเสียชีวิตและสันทนาการ เนื่องจากข้อมูลประเภทที่หายไปจากเฟรมเวิร์กของ Android อาร์เรย์ของไฟล์พาร์เซลที่กำหนดเองจึงต้องมีการดำเนินการเพิ่มเติม (การสร้างอาร์เรย์ประเภทที่ถูกต้องด้วยตนเอง) และตอนนี้เอกสารประกอบเกี่ยวกับ get, getLiveData และ getStateFlow จึงเรียกข้อจำกัดนี้โดยเฉพาะ
  • นำกฎ Proguard ที่เกี่ยวข้องกับ LifecycleObserver ออกแล้ว ซึ่งหมายความว่าโค้ดที่มีการจัดสรรซึ่งต้องการใช้ API ผ่านการสะท้อน (เช่น ใช้คำอธิบายประกอบ @OnLifecycleEvent ที่เลิกใช้งานมาเป็นเวลานาน) จะต้องมีกฎ Keep ของตนเองสำหรับ Use Case ที่เฉพาะเจาะจง

ความสามารถในการสังเกตเหตุการณ์ในวงจร

  • นอกจากการใช้ LifecycleEventObserver แล้ว ตอนนี้คุณสามารถสังเกต Flow ของ Lifecycle.Event ผ่านเมธอดส่วนขยาย Lifecycle.asFlow() ได้แล้ว
  • ตอนนี้ผู้ใช้ Jetpack Compose จะใช้ LifecycleEventEffect เพื่อเรียกใช้ผลข้างเคียงของ Compose โดยอิงตาม Lifecycle.Event ได้แล้ว
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • ผู้ใช้ Jetpack Compose สามารถใช้ LifecycleStartEffect และ LifecycleResumeEffect เพื่อจัดการเหตุการณ์คู่ ซึ่งเริ่มจากการหยุดและกลับมาทำงานอีกครั้งเพื่อหยุดชั่วคราวตามลำดับ API นี้สอดคล้องกับที่พบใน DisposableEffect และเหมาะสำหรับกรณีที่จำเป็นต้องคืนค่าการเปลี่ยนแปลงเมื่อสถานะจะเพิ่มขึ้นเมื่อย้อนกลับ
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

โปรดดูข้อมูลเพิ่มเติมที่หัวข้อเรียกใช้โค้ดในเหตุการณ์ในวงจร

การสังเกตสถานะของวงจร

  • ตอนนี้คุณสามารถสังเกต Lifecycle.State ปัจจุบันผ่านพร็อพเพอร์ตี้ Lifecycle.currentStateFlow ได้แล้ว ซึ่งจะแสดง StateFlow โดยที่ value คือ Lifecycle.State ปัจจุบัน
  • ผู้ใช้ Jetpack Compose สามารถใช้ส่วนขยาย Lifecycle.currentStateAsState() เพื่อแสดง Lifecycle.State เป็น Compose State ได้โดยตรง ค่านี้เทียบเท่ากับ (และทางเลือกที่สั้นกว่า) กับ lifecycle.currentStateFlow.collectAsState()

โปรดดูข้อมูลเพิ่มเติมที่หัวข้อรวบรวมสถานะของวงจรที่มีโฟลว์

เวอร์ชัน 2.7.0-rc02

13 ธันวาคม 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.7.0-rc02 แล้ว เวอร์ชัน 2.7.0-rc02 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาที่ SavedStateHandle ไม่กู้คืนคลาส Parcelable ที่กำหนดเองอย่างถูกต้องหลังจากกระบวนการเสียชีวิตและการสันทนาการ เนื่องจากข้อมูลประเภทที่หายไปจากเฟรมเวิร์กของ Android อาร์เรย์ของไฟล์พาร์เซลที่กำหนดเองจึงต้องมีการดำเนินการเพิ่มเติม (การสร้างอาร์เรย์ประเภทที่ถูกต้องด้วยตนเอง) และตอนนี้เอกสารประกอบเกี่ยวกับ get, getLiveData และ getStateFlow จึงเรียกข้อจำกัดนี้โดยเฉพาะ (I0b55a)

เวอร์ชัน 2.7.0-rc01

15 พฤศจิกายน 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.7.0-rc01 แล้ว เวอร์ชัน 2.7.0-rc01 มีคอมมิตเหล่านี้

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

  • ตอนนี้ LifecycleStartEffect และ LifecycleResumeEffect ได้กำจัดและสร้างบล็อกเอฟเฟกต์อีกครั้งหาก LifecycleOwner มีการเปลี่ยนแปลง (Ia25c6)

เวอร์ชัน 2.7.0-beta01

1 พฤศจิกายน 2023

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

  • การปรับปรุงเกี่ยวกับรุ่นเบต้า ไม่มีการเปลี่ยนแปลงสำคัญในเวอร์ชันรุ่นนี้

เวอร์ชัน 2.7.0-alpha03

18 ตุลาคม 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.7.0-alpha03 แล้ว เวอร์ชัน 2.7.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ lifecycle-runtime-testing มีการตรวจสอบ Lint ใหม่เพื่อหลีกเลี่ยงการตั้งค่า Lifecycle.State ของ TestLifecycleOwner โดยใช้ช่อง currentState เมื่ออยู่ภายในโครูทีน ขณะนี้การตรวจสอบ Lint จะแนะนำ setCurrentState ที่ระงับอยู่ ซึ่งช่วยให้ตั้งค่า Lifecycle.State ได้โดยไม่ต้องบล็อก (Icf728, b/297880630)

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

  • แก้ไขปัญหาเกี่ยวกับ LiveData.switchMap ที่การแสดงผลอินสแตนซ์ LiveData เดียวกันทั้งในการเรียกใช้ครั้งแรกและการเรียกใช้ต่อมาจะทำให้เพิ่มอินสแตนซ์ LiveData เป็นแหล่งที่มาไม่ได้ (Ibedcba7)

เวอร์ชัน 2.7.0-alpha02

6 กันยายน 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.7.0-alpha02 แล้ว เวอร์ชัน 2.7.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ TestLifecycleOwner มีฟังก์ชันการระงับ setCurrentState() แล้ว เพื่อให้ผู้ใช้มีตัวเลือกในการใช้ TestLifecycleOwner จากภายในโกโรทีน เช่น ฟังก์ชันที่ runTest ระบุไว้ (I329de, b/259344129)

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

  • ไฟล์ทั้งหมดจากโมดูล lifecycle-livedata-ktx ถูกย้ายไปยังโมดูล lifecycle-livedata หลักแล้ว (I10c6f, b/274800183)

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

  • ตอนนี้ส่วนขยาย LiveData.map() และ LiveData.switchMap() จะตั้งค่า value ของ LiveData ที่แสดงผล หาก LiveData ก่อนหน้ามีการตั้งค่าไว้ เพื่อให้การใช้ LiveData ที่ได้จาก Jetpack Compose มีสถานะที่ถูกต้องในการเรียบเรียงครั้งแรก (I91d2b, b/269479952)
  • addCloseable()ของ ViewModel จะปิด Closeable ทันทีหาก ViewModel ได้รับการโทรหา onCleared() แล้ว (I4712e, b/280294730)

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

  • จากอายุการใช้งาน 2.6.2: แก้ไขปัญหาที่ SavedStateHandle ไม่ได้รับการคืนค่าอย่างถูกต้องหลังการเสียชีวิตของกระบวนการหากมีการคืนค่าสถานะ มีการเรียก save() โดยไม่บันทึกสถานะใน SavedStateRegistry ระดับบนสุด จากนั้นระบบจะคืนค่าสถานะอีกครั้ง การดำเนินการนี้จะแก้ไขการโต้ตอบระหว่าง rememberSaveable และ NavHost ของการเขียนการนำทาง (aosp/2729289)

เวอร์ชัน 2.7.0-alpha01

26 กรกฎาคม 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.7.0-alpha01 แล้ว เวอร์ชัน 2.7.0-alpha01 มีคอมมิตเหล่านี้

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

  • ขณะนี้ Lifecycle.State สามารถสังเกตการเขียนได้ผ่าน Lifecycle.currentStateFlow ซึ่งจะแสดงผล StateFlow โดยที่ value คือ Lifecycle.State ปัจจุบัน (Ib212d, b/209684871)
  • ในตอนนี้ ระบบจะสังเกต Lifecycle.Event เป็น Flow ที่มี Lifecycle.asFlow(). ได้ (If2c0f, b/176311030)
  • เพิ่ม LifecycleResumeEffect API เพื่อเรียกใช้ Compose SideEffect โดยอิงตามทั้ง Callback เหตุการณ์ Lifecycle.Event.ON_RESUME และ Lifecycle.Event.ON_PAUSE แล้ว (I60386, b/235529345)
  • เพิ่ม LifecycleStartEffect API เพื่อเรียกใช้ Compose SideEffect ตาม Lifecycle.Event.ON_START และ Lifecycle.Event.ON_STOP Callback ของเหตุการณ์แล้ว (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 ที่เกี่ยวข้องกับ LifecycleObserver ออกแล้ว ซึ่งหมายความว่าโค้ดที่มีการจัดสรรซึ่งต้องการใช้ API ผ่านการสะท้อนจะต้องมีกฎ Keep ของตนเองสำหรับ Use Case ที่เฉพาะเจาะจง (Ia12fd)

เวอร์ชัน 2.6

เวอร์ชัน 2.6.2

6 กันยายน 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.6.2 แล้ว เวอร์ชัน 2.6.2 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาที่ SavedStateHandle ไม่ได้รับการคืนค่าอย่างถูกต้องหลังจากกระบวนการยุติการทำงาน หากมีการคืนค่าสถานะ มีการเรียก save() โดยไม่บันทึกสถานะใน SavedStateRegistry ระดับบนสุด จากนั้นจึงคืนค่าสถานะอีกครั้ง การดำเนินการนี้จะแก้ไขการโต้ตอบระหว่าง rememberSaveable และ NavHost ของการเขียนการนำทาง (aosp/2729289)

เวอร์ชัน 2.6.1

22 มีนาคม 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.6.1 แล้ว เวอร์ชัน 2.6.1 มีคอมมิตเหล่านี้

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.6.0

8 มีนาคม 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.6.0 แล้ว เวอร์ชัน 2.6.0 มีคอมมิตเหล่านี้

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

  • ตอนนี้ LiveData มีพร็อพเพอร์ตี้ isInitialized ใหม่ที่บ่งชี้ว่ามีการตั้งค่าอย่างชัดแจ้งใน LiveData หรือไม่ ซึ่งช่วยให้คุณแยกความแตกต่างระหว่าง liveData.value ที่แสดงผล null ได้ เนื่องจากไม่เคยมีการตั้งค่าหรือค่า null ที่ชัดเจน
  • MediatorLiveData มีตัวสร้างเพื่อตั้งค่าเริ่มต้นแล้ว
  • เพิ่มส่วนขยายใหม่ใน StateFlow และ Flow ของ collectAsStateWithLifecycle() ที่รวบรวมจากโฟลว์และแสดงค่าล่าสุดเป็น Compose State ในลักษณะที่รับรู้ถึงวงจร
  • เลิกใช้งาน Lifecycle.launchWhenX เมธอดและ Lifecycle.whenX แล้ว เนื่องจากการใช้ผู้มอบหมายงานชั่วคราวอาจทําให้สิ้นเปลืองทรัพยากรในบางกรณี ขอแนะนำให้ใช้ Lifecycle.repeatOnLifecycle สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการระงับงานแบบครั้งเดียว โปรดดูคำอธิบายนี้ว่าเพราะเหตุใดการดำเนินการนี้จึงไม่ปลอดภัยโดยตัวเอง
  • Conversion ของ Kotlin - คลาสของวงจรจํานวนมากได้แปลงเป็น Kotlin แล้ว คลาสที่แปลงทั้งหมดจะยังคงความเข้ากันได้แบบไบนารีกับเวอร์ชันก่อนหน้า ชั้นเรียนต่อไปนี้มีการเปลี่ยนแปลงที่ใช้ร่วมกันไม่ได้สำหรับชั้นเรียนที่เขียนด้วย Kotlin: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner, LifecycleOwner

ตารางด้านล่างแสดง Conversion แหล่งที่มาสำหรับวงจรเวอร์ชันใหม่

วงจร 2.5 วงจร 2.5 (KTX) วงจร 2.6
Transformations.switchMap(liveData) {...} liveData.switchMap {...} liveData.switchMap {...}
Transformations.map(liveData) {...} liveData.map {...} liveData.map {...}
Transformations.distinctUntilChanged(liveData) {...} liveData.distinctUntilChanged{...} liveData.distinctUntilChanged{...}
LiveDataReactiveStreams.fromPublisher(publisher) publisher.toLiveData() publisher.toLiveData()
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) liveData.toPublisher(lifecycleOwner) liveData.toPublisher(lifecycleOwner)
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override val defaultViewModelProviderFactory = factory
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override val defaultViewModelProviderCreationExtras = extras
ViewTreeLifecycleOwner.set(view, owner) ViewTreeLifecycleOwner.set(view, owner) view.setViewTreeLifecycleOwner(owner)
ViewTreeLifecycleOwner.get(view) view.findViewTreeLifecycleOwner() view.findViewTreeLifecycleOwner()
override fun getViewModelStore(): ViewModelStore = store override fun getViewModelStore(): ViewModelStore = store override val viewModelStore: ViewModelStore = store
override fun getLifecycle(): Lifecycle = registry override fun getLifecycle(): Lifecycle = registry override val lifecycle: Lifecycle get() = registry
  • ตอนนี้ค่า Null ของเมธอด onChanged ของ Observer ที่สร้างขึ้นใน Kotlin จะจับคู่กับค่า Null ของประเภททั่วไปแล้ว หากต้องการให้ Observer.onChanged() ยอมรับประเภทที่ไม่มีข้อมูล คุณจะต้องสร้างอินสแตนซ์ Observer ด้วยประเภทที่ไม่มีข้อมูล
  • ชั้นเรียนเหล่านี้ยังแปลงเป็น Kotlin ด้วย แต่ยังคงใช้งานร่วมกับแหล่งที่มาได้: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher และ ProcessLifecycleOwner

เวอร์ชัน 2.6.0-rc01

22 กุมภาพันธ์ 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.6.0-rc01 แล้ว เวอร์ชัน 2.6.0-rc01 มีคอมมิตเหล่านี้

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

  • ตอนนี้ส่วนขยาย LiveData.distinctUntilChanged() จะตั้งค่า value ของ LiveData ที่แสดงผล หาก LiveData ก่อนหน้ามีการตั้งค่าไว้ การดําเนินการนี้จะไม่เปลี่ยนแปลงลักษณะการสังเกต ค่าที่อัปเดตจากแหล่งที่มา LiveData จะยังคงมีผลเมื่อคุณเริ่มสังเกต LiveData ที่แสดงผลจาก distinctUntilChanged() เท่านั้น (Ib482F)

เวอร์ชัน 2.6.0-beta01

8 กุมภาพันธ์ 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.6.0-beta01 แล้ว เวอร์ชัน 2.6.0-beta01 มีการคอมมิตเหล่านี้

Conversion ของ Kotlin

  • ตอนนี้เขียนภาษาLifecycleOwnerเป็นภาษา Kotlin แล้ว นี่คือการเปลี่ยนแปลงที่เข้ากับแหล่งที่มาไม่ได้สำหรับคลาสที่เขียนด้วย Kotlin ซึ่งตอนนี้จะต้องลบล้างพร็อพเพอร์ตี้ lifecycle แทนที่จะใช้ฟังก์ชัน getLifecycle() ก่อนหน้านี้ (I75b4b, b/240298691)
  • ViewModelStoreOwner อยู่ใน Kotlin แล้ว นี่คือการเปลี่ยนแปลงที่เข้ากับแหล่งที่มาไม่ได้สำหรับคลาสที่เขียนด้วย Kotlin ซึ่งตอนนี้จะต้องลบล้างพร็อพเพอร์ตี้ viewModelStore แทนที่จะใช้ฟังก์ชัน getViewModelStore() ก่อนหน้านี้ (I86409, b/240298691)
  • ส่วนขยาย Kotlin บน LifecycleOwner ที่ระบุช่อง lifecycleScope ได้ย้ายไปยังอาร์ติแฟกต์ lifecycle-common จาก lifecycle-runtime-ktx แล้ว (I41d78, b/240298691)
  • ส่วนขยาย Kotlin บน Lifecycle ที่ระบุช่อง coroutineScope ได้ย้ายไปยังอาร์ติแฟกต์ lifecycle-common จาก lifecycle-runtime-ktx แล้ว (Iabb91, b/240298691)

เวอร์ชัน 2.6.0-alpha05

25 มกราคม 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.6.0-alpha05 แล้ว เวอร์ชัน 2.6.0-alpha05 มีคอมมิตเหล่านี้

Conversion ของ Kotlin

  • ตอนนี้เขียนภาษาTransformationsเป็นภาษา Kotlin แล้ว นี่คือการเปลี่ยนแปลงที่เข้ากันไม่ได้กับแหล่งที่มาสำหรับคลาสเหล่านั้นที่เขียนด้วย Kotlin ซึ่งใช้ไวยากรณ์โดยตรง เช่น Transformations.map ดังนั้นตอนนี้โค้ด Kotlin ต้องใช้ไวยากรณ์เมธอดส่วนขยายของ Kotlin ซึ่งก่อนหน้านี้พร้อมใช้งานเมื่อใช้ lifecycle-livedata-ktx เท่านั้น เมื่อใช้ภาษาโปรแกรม Java เวอร์ชันของเมธอดเหล่านี้ที่ใช้เมธอด androidx.arch.core.util.Function จะเลิกใช้งานและแทนที่ด้วยเวอร์ชันที่ใช้ Kotlin Function1 การเปลี่ยนแปลงนี้จะรักษาความเข้ากันได้ของไบนารีไว้ (I8e14f)
  • ตอนนี้เขียนภาษาViewTreeViewModelStoreOwnerเป็นภาษา Kotlin แล้ว นี่คือการเปลี่ยนแปลงแหล่งที่มาที่เข้ากันไม่ได้สำหรับคลาสเหล่านั้นที่เขียนด้วย Kotlin ตอนนี้คุณต้องนำเข้าและใช้วิธีการส่วนขยาย Kotlin ใน View ของ androidx.lifecycle.setViewTreeViewModelStoreOwner และ androidx.lifecycle.findViewTreeViewModelStoreOwner โดยตรงเพื่อตั้งค่าและค้นหาเจ้าของที่ตั้งค่าไว้ก่อนหน้านี้ โค้ดนี้เข้ากันได้กับไบนารีและยังคงใช้แหล่งที่มาได้สำหรับการใช้งานที่เขียนในภาษาโปรแกรม Java (Ia06d8, Ib22d8, b/240298691)
  • ตอนนี้อินเทอร์เฟซ HasDefaultViewModelProviderFactory เขียนด้วยภาษา Kotlin แล้ว นี่คือการเปลี่ยนแปลงแหล่งที่มาที่เข้ากันไม่ได้สำหรับคลาสที่เขียนด้วย Kotlin ซึ่งตอนนี้จะต้องลบล้างพร็อพเพอร์ตี้ defaultViewModelProviderFactory และ defaultViewModelCreationExtras แทนที่จะใช้ฟังก์ชันที่เกี่ยวข้องก่อนหน้านี้ (Iaed9c, b/240298691)
  • ตอนนี้เขียนภาษาObserverเป็นภาษา Kotlin แล้ว ตอนนี้เมธอด onChanged() ของพารามิเตอร์จะใช้ชื่อ value เป็นพารามิเตอร์ (Iffef2, I4995e, b/240298691)
  • ตอนนี้ระบบเขียน AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher และ ProcessLifecycleOwner เป็นภาษา Kotlin (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)

เวอร์ชัน 2.6.0-alpha04

11 มกราคม 2023

ปล่อย androidx.lifecycle:lifecycle-*:2.6.0-alpha04 แล้ว เวอร์ชัน 2.6.0-alpha04 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ LiveData มีพร็อพเพอร์ตี้ isInitialized ใหม่ที่บ่งชี้ว่ามีการตั้งค่าอย่างชัดแจ้งใน LiveData หรือไม่ ซึ่งช่วยให้คุณแยกความแตกต่างระหว่าง liveData.value ที่แสดงผล null ได้ เนื่องจากไม่เคยมีการตั้งค่าหรือค่า null ที่ชัดเจน (Ibd018)

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

  • API collectAsStateWithLifecycle() ของ lifecycle-runtime-compose ไม่อยู่ในสถานะทดลองอีกต่อไป (I09d42, b/258835424)
  • เลิกใช้งาน Lifecycle.launchWhenX เมธอดและ Lifecycle.whenX แล้ว เนื่องจากการใช้ผู้มอบหมายงานชั่วคราวอาจทําให้สิ้นเปลืองทรัพยากรในบางกรณี ขอแนะนำให้ใช้ Lifecycle.repeatOnLifecycle (Iafc54, b/248302832)

Conversion ของ Kotlin

  • ตอนนี้เขียนภาษาViewTreeLifecycleOwnerเป็นภาษา Kotlin แล้ว นี่คือการเปลี่ยนแปลงแหล่งที่มาที่เข้ากันไม่ได้สำหรับคลาสเหล่านั้นที่เขียนด้วย Kotlin ตอนนี้คุณต้องนำเข้าและใช้วิธีการส่วนขยาย Kotlin ใน View ของ androidx.lifecycle.setViewTreeLifecycleOwner และ androidx.lifecycle.findViewTreeLifecycleOwner โดยตรงเพื่อตั้งค่าและค้นหาเจ้าของที่ตั้งค่าไว้ก่อนหน้านี้ ซึ่งจะแทนที่ส่วนขยาย Kotlin ก่อนหน้าใน lifecycle-runtime-ktx โค้ดนี้เข้ากันได้กับไบนารีและยังคงใช้แหล่งที่มาได้สำหรับการใช้งานที่เขียนในภาษาโปรแกรม Java (I8a77a, I5234e, b/240298691)
  • ตอนนี้เขียนภาษาLiveDataReactiveStreamsเป็นภาษา Kotlin แล้ว ส่วนขยาย Kotlin ก่อนหน้านี้ใน lifecycle-reactivestreams-ktx ได้ย้ายไปอยู่ในโมดูล lifecycle-reactivestreams และกลายมาเป็นแพลตฟอร์มหลักสำหรับโค้ดที่เขียนด้วย Kotlin นี่คือการเปลี่ยนแปลงที่เข้ากันไม่ได้กับแหล่งที่มาสำหรับโค้ดที่เขียนใน Kotlin หากคุณไม่ได้ใช้ API ของเมธอดส่วนขยายของ Kotlin อยู่ (I2b1b9, I95d22, b/240298691)
  • ตอนนี้ระบบเขียน DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver และ ViewModelStore ด้วย Kotlin (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a/23

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

เวอร์ชัน 2.6.0-alpha03

24 ตุลาคม 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.6.0-alpha03 แล้ว เวอร์ชัน 2.6.0-alpha03 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาเกี่ยวกับข้อจำกัดระหว่างโมดูลวงจรต่างๆ ไม่ทำงานตามที่คาดหวัง (I18d0d, b/249686765)
  • ขณะนี้ข้อผิดพลาดที่เกิดจาก LifecycleRegistry.moveToState() จะมีข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์มากยิ่งขึ้น ซึ่งจะแจ้งให้นักพัฒนาซอฟต์แวร์ทราบถึงคอมโพเนนต์ที่ทำให้เกิดข้อผิดพลาด (Idf4b2, b/244910446)

เวอร์ชัน 2.6.0-alpha02

7 กันยายน 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.6.0-alpha02 แล้ว เวอร์ชัน 2.6.0-alpha02 มีคอมมิตเหล่านี้

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

  • MediatorLiveData มีตัวสร้างเพื่อตั้งค่าเริ่มต้นแล้ว (Ib6cc5, b/151244085)

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

  • ตอนนี้อาร์ติแฟกต์ Lifecycle มีข้อจำกัดที่ช่วยให้อาร์ติแฟกต์ของวงจรที่พึ่งพาระหว่างกันทั้งหมดใช้เวอร์ชันเดียวกัน โดยจะอัปเกรดทรัพยากร Dependency อื่นๆ โดยอัตโนมัติเมื่ออัปเกรด b/242871265
  • ตอนนี้ FlowLiveData.asFlow() สร้าง callbackFlow แทนที่จะใช้การใช้งาน Channel ของตัวเองเพื่อให้แน่ใจว่า ความปลอดภัยของชุดข้อความและการเก็บรักษาบริบท (I4a8b2, b/200596935)
  • ตอนนี้ฟังก์ชัน asLiveData ของ FlowLiveData จะเก็บรักษาค่าเริ่มต้นของ StateFlow ไว้เมื่อสร้าง ออบเจ็กต์ LiveData ใหม่ (I3f530, b/157380488)
  • จากอายุการใช้งาน 2.5.1: ตอนนี้การติดตั้งใช้งานที่กำหนดเองของ AndroidViewModelFactory จะเรียกใช้ฟังก์ชัน create(modelClass) อย่างถูกต้องเมื่อใช้ตัวสร้างการเก็บสถานะที่มี Lifecycle 2.4 ขึ้นไป (I5b315, b/238011621)

เวอร์ชัน 2.6.0-alpha01

29 มิถุนายน 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.6.0-alpha01 แล้ว เวอร์ชัน 2.6.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มส่วนขยายใหม่ใน StateFlow และ Flow ของ collectAsStateWithLifecycle ที่รวบรวมจากโฟลว์และแสดงค่าล่าสุดเป็น Compose State ตามวงจร ระบบจะรวบรวมโฟลว์และตั้งการปล่อยก๊าซใหม่เป็นค่าของรัฐเมื่อวงจรชีวิตอยู่ในช่วง Lifecycle.State เป็นอย่างน้อย เมื่อวงจรการใช้งานต่ำกว่า Lifecycle.State การรวบรวมโฟลว์จะหยุดและจะไม่มีการอัปเดตค่าของสถานะ (I1856e, b/230557927)

เวอร์ชัน 2.5

เวอร์ชัน 2.5.1

27 กรกฎาคม 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.5.1 แล้ว เวอร์ชัน 2.5.1 มีคอมมิตเหล่านี้

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

  • ตอนนี้การใช้งานที่กำหนดเองของ AndroidViewModelFactory จะเรียกฟังก์ชัน create(modelClass) ได้อย่างถูกต้องเมื่อใช้ตัวสร้าง AndroidViewModelFactory แบบเก็บสถานะที่มี Lifecycle 2.4 ขึ้นไป (I5b315, b/238011621)

เวอร์ชัน 2.5.0

29 มิถุนายน 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.5.0 แล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้

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

  • ตอนนี้ SavedStateHandle มี getStateFlow() API ที่แสดงผล Kotlin StateFlow สำหรับการตรวจสอบการเปลี่ยนแปลงค่าแทนการใช้ LiveData

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

    class CustomFactory : ViewModelProvider.Factory {
        override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
            return when (modelClass) {
                HomeViewModel::class -> {
                    // Get the Application object from extras
                    val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                    // Pass it directly to HomeViewModel
                    HomeViewModel(application)
                }
                DetailViewModel::class -> {
                    // Create a SavedStateHandle for this ViewModel from extras
                    val savedStateHandle = extras.createSavedStateHandle()
                    DetailViewModel(savedStateHandle)
                }
                else -> throw IllegalArgumentException("Unknown class $modelClass")
            } as T
        }
    }
    
  • ตอนนี้ lifecycle-viewmodel มี Kotlin DSL ที่ viewModelFactory ให้คุณกำหนด ViewModelProvider.Factory ในแง่ของเงื่อนไขเริ่มต้น lambda อย่างน้อย 1 รายการ โดยใช้ 1 รายการสำหรับ ViewModel แต่ละคลาสที่โรงงานที่กำหนดเองรองรับ โดยใช้ CreationExtras เป็นแหล่งข้อมูลหลัก

    val customFactory = viewModelFactory {
        // The return type of the lambda automatically sets what class this lambda handles
        initializer {
            // Get the Application object from extras provided to the lambda
            val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY))
            HomeViewModel(application)
        }
        initializer {
            val savedStateHandle = createSavedStateHandle()
            DetailViewModel(savedStateHandle)
        }
    }
    
  • ตอนนี้ lifecycle-viewmodel-compose มี viewModel() API ที่ใช้โรงงาน lambda เพื่อสร้างอินสแตนซ์ ViewModel โดยไม่ต้องสร้าง ViewModelProvider.Factory ที่กำหนดเอง

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • การผสานรวมโปรแกรมประหยัด Compose บันทึกสถานะแฮนเดิล - ตอนนี้อาร์ติแฟกต์ 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 จะไม่ขัดข้องอีกต่อไปเมื่อรวมทรัพยากร Dependency ของวงจร compileOnly เวอร์ชันก่อนหน้ากับเวอร์ชัน 2.5 ขึ้นไป (I81a66, b/230454566)

เวอร์ชัน 2.5.0-rc01

11 พฤษภาคม 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.5.0-rc01 แล้ว เวอร์ชัน 2.5.0-rc01 มีคอมมิตเหล่านี้

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

  • ตอนนี้ MediatorLiveData.addSource() ส่ง NullPointerException เมื่อส่งผ่านแหล่งที่มา null แทนการเผยแพร่แหล่งที่มา null ให้กับผู้สังเกตการณ์ (Ibd0fb, b/123085232)

เวอร์ชัน 2.5.0-beta01

20 เมษายน 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.5.0-beta01 แล้ว เวอร์ชัน 2.5.0-beta01 มีการคอมมิตเหล่านี้

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

  • เพิ่มผู้รับมอบสิทธิ์พร็อพเพอร์ตี้ SavedStateHandle.saveable ให้ใช้ชื่อพร็อพเพอร์ตี้เป็นคีย์เพื่อรักษาสถานะใน SavedStateHandle แล้ว (I8bb86, b/225014345)

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

  • แก้ไขปัญหาที่การซ้อน NavHost รายการหนึ่งภายใน NavHost อีกรายการในแท็บการนำทางด้านล่างที่ไม่ใช่หลักจะทำให้เกิด IllegalStateException เมื่อใช้การซ้อนย้อนกลับหลายรายการ (I11bd5, b/228865698)

เวอร์ชัน 2.5.0-alpha06

6 เมษายน 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.5.0-alpha06 แล้ว เวอร์ชัน 2.5.0-alpha06 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มโอเวอร์โหลด MutableState แบบทดลองไปยัง SavedStateHandle.saveable สำหรับ ความเท่าเทียมกับ rememberSaveable (I38cfe, b/224565154)

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

  • ตอนนี้ CreationExtras เป็นเชิงนามธรรมแทนการปิดผนึก (Ib8a7a)

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

  • แก้ไขข้อผิดพลาด IllegalStateException: Already attached to lifecycleOwner ที่เกิดจาก SavedStateHandleController (I7ea47, b/215406268)

เวอร์ชัน 2.5.0-alpha05

23 มีนาคม 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.5.0-alpha05 แล้ว เวอร์ชัน 2.5.0-alpha05 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้โมดูล lifecycle-viewmodel-compose มี SavedStateHandleSaver ซึ่งเป็น API ทดลองที่ช่วยให้มั่นใจว่าค่าใน SavedStateHandle ได้รับการผสานรวมอย่างถูกต้องด้วยสถานะอินสแตนซ์ที่บันทึกไว้เดียวกันกับที่ rememberSaveable ใช้ (Ia88b7, b/195689777)

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

  • แก้ไขปัญหาความเข้ากันได้กับ Lifecycle 2.3 และเวอร์ชัน Lifecycle ที่ใหม่กว่าใน Java (I52c8a, b/219545060)

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

  • ตอนนี้ SavedStateViewFactory รองรับการใช้ CreationExtras แล้ว แม้ว่าจะเริ่มต้นด้วย SavedStateRegistryOwner ก็ตาม หากมีการระบุค่าเพิ่มเติม ระบบจะไม่สนใจอาร์กิวเมนต์เริ่มต้น (I6c43b, b/224844583)

เวอร์ชัน 2.5.0-alpha04

9 มีนาคม 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.5.0-alpha04 แล้ว เวอร์ชัน 2.5.0-alpha04 มีคอมมิตเหล่านี้

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

  • ตอนนี้ SavedStateHandle มี getStateFlow() API ที่แสดงผล 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 ออบเจ็กต์ไปยัง ViewModel ที่จะ ปิดเมื่อล้าง ViewModel โดยไม่มีข้อกำหนด งานที่ต้องดำเนินการด้วยตนเองใน onCleared() (I55ea0)
  • ปัจจุบัน lifecycle-viewmodel มีตัวเลือก InitializerViewModelFactory ที่ให้คุณเพิ่ม lambda สำหรับการจัดการได้ คลาส ViewModel โดยเฉพาะ โดยใช้ CreationExtras เป็นข้อมูลหลัก แหล่งที่มา (If58fc, b/216687549)
  • ตอนนี้ lifecycle-viewmodel-compose มี viewModel() API ที่ ใช้โรงงาน lambda เพื่อสร้างอินสแตนซ์ ViewModel โดยไม่มี กำหนดให้สร้าง ViewModelProvider.Factory ที่กำหนดเอง (I97fbb, b/216688927)

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

  • ขณะนี้คุณสามารถสร้าง ViewModel ด้วย CreationExtras ผ่าน lifecycle-viewmodel-compose (I08887, b/216688927)

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

  • กำลังพยายามย้าย Lifecycle.State จาก INITIALIZED ไปที่ ตอนนี้ DESTROYED จะส่ง IllegalStateException เสมอโดยไม่คำนึง Lifecycle มีผู้สังเกตการณ์แนบมาด้วยหรือไม่ (I7c390, b/177924329)
  • ตอนนี้ LifecycleRegistry จะล้างผู้สังเกตการณ์เมื่อ ก็จะได้สถานะ DESTROYED (I4f8dd, b/142925860)

เวอร์ชัน 2.5.0-alpha02

9 กุมภาพันธ์ 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.5.0-alpha02 แล้ว เวอร์ชัน 2.5.0-alpha02 มีคอมมิตเหล่านี้

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

  • แปลง SavedStateHandle และ SavedStateViewModelFactory เป็น Kotlin แล้ว ซึ่งวิธีนี้ช่วยปรับปรุงความสามารถในการเว้นว่างของคำทั่วไปในทั้ง 2 คลาส (Ib6ce2, b/216168263, I9647a, b/177667711)
  • พารามิเตอร์ฟังก์ชัน LiveData switchMap สามารถ ตอนนี้ก็มีเอาต์พุตที่เป็นค่าว่าง (I40396, b/132923666)
  • ตอนนี้ส่วนขยาย -ktx LiveData มีคำอธิบายประกอบด้วย @CheckResult เพื่อบังคับใช้ผลลัพธ์เมื่อเรียกใช้ (Ia0f05, b/207325134)

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

  • ตอนนี้ SavedStateHandle จะจัดเก็บค่าเริ่มต้นอย่างเหมาะสมเมื่อ ไม่มีค่าสำหรับคีย์ที่ระบุ (I1c6ce, b/178510877)

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

  • จากอายุการใช้งาน 2.4.1: อัปเดต lifecycle-process เป็น Startup 1.1.1 เพื่อให้แน่ใจว่ามีการแก้ไขปัญหาที่ป้องกันไม่ให้ ProcessLifecycleInitializer ส่ง StartupException พร้อมใช้งานโดยค่าเริ่มต้น (Ib01df, b/216490724)
  • ต่อไปนี้จะมีข้อความแสดงข้อผิดพลาดที่ดีขึ้นเมื่อชั้นเรียน AndroidViewModel ที่กำหนดเองมี ในลำดับที่ไม่ถูกต้องและพยายามสร้าง ViewModel (I340f7, b/177667711)
  • ตอนนี้คุณสร้างโมเดลการแสดงผลผ่าน CreationExtras โดยใช้ AndroidViewModelFactory โดยไม่ต้องตั้งค่าแอปพลิเคชันได้แล้ว (I6ebef, b/217271656)

เวอร์ชัน 2.5.0-alpha01

26 มกราคม 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.5.0-alpha01 แล้ว เวอร์ชัน 2.5.0-alpha01 มีคอมมิตเหล่านี้

ViewModel CreationExtras

ในการเปิดตัวครั้งนี้ เราจะวางรากฐานสําหรับการปรับโครงสร้างของ ViewModel ใหม่ เราจะย้ายไปยังโลกของโรงงานแบบไม่เก็บสถานะที่อาศัยแนวคิดใหม่ ซึ่งก็คือ CreationExtras แทนชุดคลาสย่อยแบบตายตัวของ ViewModelProvider.Factory ที่แต่ละชุดเพิ่มฟังก์ชันการทำงานเพิ่มเติม (อนุญาตให้พารามิเตอร์ตัวสร้าง Application ผ่าน AndroidViewModelFactory, อนุญาตพารามิเตอร์ตัวสร้าง SavedStateHandle ผ่าน SavedStateViewModelFactory และ AbstractSavedStateViewModelFactory ฯลฯ) (Ia7343, b/188691010, b/188541057)

การเปลี่ยนแปลงนี้จะทำให้ ViewModelProvider ไม่ได้โทรออกไปยังเมธอด create(Class<T>) ของ ViewModelProvider.Factory ก่อนหน้านี้โดยตรงอีกต่อไป แต่จะเรียกใช้ create โอเวอร์โหลดใหม่แทน: create(Class<T>, CreationExtras) ซึ่งหมายความว่าตอนนี้การใช้งานอินสแตนซ์ ViewModelProvider.Factory โดยตรงจะมีสิทธิ์เข้าถึง CreationExtras ใหม่แต่ละรายการเหล่านี้

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: String นี้ให้สิทธิ์เข้าถึงคีย์ที่กำหนดเองที่คุณส่งไปยัง ViewModelProvider.get()
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY ให้สิทธิ์เข้าถึงชั้นเรียน Application
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY ให้สิทธิ์เข้าถึง SavedStateRegistryOwner ที่ใช้สร้าง ViewModel นี้
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY ให้สิทธิ์เข้าถึง ViewModelStoreOwner ที่ใช้สร้าง ViewModel นี้
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY ให้สิทธิ์เข้าถึง Bundle ของอาร์กิวเมนต์ที่ควรใช้ในการสร้าง SavedStateHandle

บริการเสริมเหล่านี้จะมีให้โดยค่าเริ่มต้นเมื่อใช้กิจกรรม 1.5.0-alpha01, ส่วนย่อย 1.5.0-alpha01 และการนำทาง 2.5.0-alpha01 หากคุณใช้เวอร์ชันก่อนหน้าของไลบรารีเหล่านั้น CreationExtras จะว่างเปล่า โดยคลาสย่อยทั้งหมดของ ViewModelProvider.Factory ได้รับการเขียนใหม่เพื่อรองรับทั้งเส้นทางการสร้างเดิมที่ใช้โดยไลบรารีเหล่านี้เวอร์ชันก่อนหน้า และเส้นทางที่ CreationExtras จะนำไปใช้ต่อไป

CreationExtras เหล่านี้ช่วยให้คุณสร้าง ViewModelProvider.Factory ที่ส่งเฉพาะข้อมูลที่คุณต้องการไปยัง ViewModel แต่ละรายการได้โดยไม่ต้องอาศัยลำดับชั้นที่เข้มงวดของคลาสย่อยจากโรงงาน

class CustomFactory : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
        return when (modelClass) {
            HomeViewModel::class -> {
                // Get the Application object from extras
                val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                // Pass it directly to HomeViewModel
                HomeViewModel(application)
            }
            DetailViewModel::class -> {
                // Create a SavedStateHandle for this ViewModel from extras
                val savedStateHandle = extras.createSavedStateHandle()
                DetailViewModel(savedStateHandle)
            }
            else -> throw IllegalArgumentException("Unknown class $modelClass")
        } as T
    }
}

เราใช้ฟังก์ชันส่วนขยาย Kotlin ของ createSavedStateHandle() ใน CreationExtras จาก SavedStateHandleSupport เพื่อสร้าง SavedStateHandle สําหรับ ViewModel เพียงตัวเดียวที่ต้องการใช้ (Ia6654, b/188541057)

คุณระบุ CreationExtras ที่กำหนดเองได้โดยการลบล้าง getDefaultViewModelCreationExtras() ใน ComponentActivity หรือ Fragment ซึ่งทำให้พร้อมใช้งานสำหรับ ViewModelProvider.Factory ที่กำหนดเองซึ่งเป็นรูปแบบที่มีการแทรกช่วยในตัว บริการเสริมเหล่านี้จะพร้อมใช้งานในโรงงานที่กำหนดเองของคุณโดยอัตโนมัติเมื่อใช้กับ ViewModelProvider โดยตรง หรือเมื่อใช้ส่วนขยายพร็อพเพอร์ตี้ by viewModels() และ by activityViewModels() ของ Kotlin (I79f2b, b/207012584, b/207012585, b/207012490)

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

  • แก้ไขปัญหาที่ระบุค่าเริ่มต้น ไปยัง SavedStateHandle จะปรากฏอีกครั้งหลังจากกระบวนการ การเสียชีวิตและสันทนาการ แม้ว่าจะเจาะจง นำออกจากSavedStateHandleแล้ว ซึ่งเป็นผลมาจาก รายการนี้ SavedStateHandle จะไม่ผสานค่าเริ่มต้นอีกต่อไป และที่คืนค่าไว้ด้วยกัน แทนที่จะใช้ ค่าที่คืนค่าเป็นแหล่งข้อมูลความจริง (I53a4b)

เวอร์ชัน 2.4

เวอร์ชัน 2.4.1

9 กุมภาพันธ์ 2022

ปล่อย androidx.lifecycle:lifecycle-*:2.4.1 แล้ว เวอร์ชัน 2.4.1 มีคอมมิตเหล่านี้

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

  • พอร์ตย้อนกลับจากอายุการใช้งาน 2.5.0-alpha01: แก้ไขปัญหาเกี่ยวกับค่าเริ่มต้นที่ระบุ ไปยัง SavedStateHandle จะปรากฏขึ้นอีกครั้งหลังจากกระบวนการ การเสียชีวิตและสันทนาการ แม้ว่าจะเจาะจง นำออกจาก SavedStateHandle แล้ว ซึ่งเป็นผลมาจาก รายการนี้ SavedStateHandle จะไม่ผสานค่าเริ่มต้นอีกต่อไป และที่คืนค่าไว้ด้วยกัน แทนที่จะใช้ ค่าที่คืนค่าเป็นแหล่งข้อมูลความจริง (I53a4b)
  • ตอนนี้ lifecycle-process ใช้ Androidx Startup 1.1.1 ซึ่งแก้ไขการถดถอย ซึ่งการใช้ ProcessLifecycleInitializer จะทำให้เกิดStartupException (b/216490724)

เวอร์ชัน 2.4.0

27 ตุลาคม 2021

ปล่อย androidx.lifecycle:lifecycle-*:2.4.0 แล้ว เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้

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

  • @OnLifecycleEvent เลิกใช้งานแล้ว ควรใช้ LifecycleEventObserver หรือ DefaultLifecycleObserver แทน
  • เพิ่มคลัง androidx.lifecycle:lifecycle-viewmodel-compose แล้ว โดยมี viewModel() Composable และ LocalViewModelStoreOwner
    • การเปลี่ยนแปลงที่ส่งผลร้ายแรงต่อแหล่งที่มา: ViewModelProvider ได้รับการเขียนใหม่ในภาษา Kotlin เมธอด ViewModelProvider.Factory.create ไม่อนุญาตให้ใช้ค่าทั่วไปที่เป็นค่าว่างอีกต่อไป
  • เพิ่ม coroutines API ใหม่ไปยัง androidx.lifecycle:lifecycle-runtime-ktx แล้ว:
  • Lifecycle.repeatOnLifecycle คือ API ที่ดำเนินการกับบล็อกโค้ดในโครูทีนเมื่อวงจรชีวิตอยู่ในสถานะหนึ่งๆ เป็นอย่างน้อย การบล็อกจะยกเลิกและเปิดใช้อีกครั้งเมื่อวงจรย้ายไปและออกจากสถานะเป้าหมาย
  • Flow.flowWithLifecycle ซึ่งเป็น API ที่แสดงค่าจากโฟลว์อัปสตรีมเมื่อวงจรชีวิตอยู่ในสถานะหนึ่งๆ เป็นอย่างน้อย
  • ย้าย DefaultLifecycleObserver จาก lifecycle.lifecycle-common-java8 ไปที่ lifecycle.lifecycle-common แล้ว lifecycle.lifecycle-common-java8ไม่มีฟังก์ชันการทํางานเพิ่มเติมใดๆ เพิ่มเติมจาก lifecycle.lifecycle-common แล้ว ดังนั้นการพึ่งพาจะขึ้นอยู่กับฟังก์ชันนี้จึงแทนที่ด้วย lifecycle.lifecycle-common
  • ย้าย API ที่ไม่ใช่ Coroutines จาก lifecycle-viewmodel-ktx ไปยังโมดูล lifecycle-viewmodel แล้ว
  • ตอนนี้ lifecycle-process ใช้ androidx.startup เพื่อเริ่มต้น ProcessLifecycleOwner

    ก่อนหน้านี้ androidx.lifecycle.ProcessLifecycleOwnerInitializer เป็นผู้ดำเนินการ

    หากคุณใช้ tools:node="remove" ระบบจะใช้ ContentProvider ในการเริ่มต้น ของกระบวนการในอดีต คุณจะต้องดำเนินการต่อไปนี้แทน

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (หรือ)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

เวอร์ชัน 2.4.0-rc01

29 กันยายน 2021

androidx.lifecycle:lifecycle-*:2.4.0-rc01 เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก Lifecycle 2.4.0-beta01 เวอร์ชัน 2.4.0-rc01 มีคอมมิตเหล่านี้

เวอร์ชัน 2.4.0-beta01

15 กันยายน 2021

ปล่อย androidx.lifecycle:lifecycle-*:2.4.0-beta01 แล้ว เวอร์ชัน 2.4.0-beta01 มีการคอมมิตเหล่านี้

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

  • @OnLifecycleEvent เลิกใช้งานแล้ว LifecycleEventObserver หรือ ควรใช้ DefaultLifecycleObserver แทน (I5a8fa)
  • ย้าย DefaultLifecycleObserver จาก androidx.lifecycle.lifecycle-common-java8 ไปยัง androidx.lifecycle.lifecycle-common androidx.lifecycle.lifecycle-common-java8 ไม่มีฟังก์ชันการทํางานเพิ่มเติมใดๆ เพิ่มเติมนอกเหนือจาก androidx.lifecycle.lifecycle-common แล้ว ดังนั้นการพึ่งพาจะขึ้นอยู่กับฟังก์ชันนี้จึงแทนที่ด้วย androidx.lifecycle.lifecycle-common (I021aa)
  • ย้าย API ที่ไม่ใช่ Coroutines จาก lifecycle-viewmodel-ktx ไปยัง โมดูล lifecycle-viewmodel (I6d5b2)

การสนับสนุนภายนอก

  • ขอขอบคุณ 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 ไม่อนุญาตให้มีค่าว่างอีกต่อไป ทั่วไป (I9b9f6)

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

  • ตอนนี้มีการเรียกใช้ Lifecycle.repeatOnLifecycle: block แบบต่อเนื่องเสมอเมื่อเรียกใช้ซ้ำ (Ibab33)

การสนับสนุนภายนอก

  • ขอบคุณ chao2zhang ที่แก้ไขข้อมูลโค้ดในเอกสารประกอบ repeatOnLifecycle #205

เวอร์ชัน 2.4.0-alpha02

16 มิถุนายน 2021

ปล่อย androidx.lifecycle:lifecycle-*:2.4.0-alpha02 แล้ว เวอร์ชัน 2.4.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการตรวจสอบ Lint ของ RepeatOnLifecycleWrongUsage ใหม่ลงใน lifecycle-runtime-ktx ซึ่งตรวจพบเมื่อมีการใช้ repeateOnLifecycle อย่างไม่ถูกต้องใน onStart() หรือ onResume() (706078, b/187887400)

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

  • LifecycleOwner.addRepeatingJob API ถูกนำออกใน ชอบ Lifecycle.repeatOnLifecycle ที่ยึดตามโครงสร้าง เกิดขึ้นพร้อมกัน และให้เหตุผลง่ายขึ้น (I4a3a8)
  • กำหนดให้ ProcessLifecycleInitializer เป็นแบบสาธารณะเพื่อให้ androidx.startup.Initializer รายการอื่นๆ ใช้เป็นทรัพยากร Dependency ได้ (I94c31)

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

  • แก้ไขปัญหาการตรวจสอบ Lint ของ NullSafeMutableLiveData เมื่อช่องมีตัวแก้ไข (#147, b/183696616)
  • แก้ไขปัญหาอื่นเกี่ยวกับการตรวจสอบ Lint ของ NullSafeMutableLiveData เมื่อใช้คำทั่วไป (#161, b/184830263)

การสนับสนุนภายนอก

  • ขอขอบคุณ maxsav สำหรับการปรับปรุงการตรวจสอบ Lint ของ NullSafeMutableLiveData (#147, b/183696616)
  • ขอขอบคุณ kozaxinan สำหรับการปรับปรุงการตรวจสอบ Lint ของ NullSafeMutableLiveData (#161, b/184830263)

เวอร์ชัน 2.4.0-alpha01

24 มีนาคม 2021

ปล่อย androidx.lifecycle:lifecycle-*:2.4.0-alpha01 แล้ว เวอร์ชัน 2.4.0-alpha01 มีคอมมิตเหล่านี้

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

  • ตอนนี้ lifecycle-process ใช้ androidx.startup เพื่อเริ่มต้น ProcessLifecycleOwner

    ก่อนหน้านี้ androidx.lifecycle.ProcessLifecycleOwnerInitializer เป็นผู้ดำเนินการ

    หากคุณใช้ tools:node="remove" ระบบจะใช้ ContentProvider ในการเริ่มต้น ของกระบวนการในอดีต คุณจะต้องดำเนินการต่อไปนี้แทน

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (หรือ)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

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

  • เพิ่ม Flow.flowWithLifecycle API ที่แสดงค่าจากโฟลว์อัปสตรีมเมื่อวงจรชีวิตอยู่ในสถานะหนึ่งๆ เป็นอย่างน้อยโดยใช้ Lifecycle.repeatOnLifecycle API ฟีเจอร์นี้เป็นอีกทางเลือกหนึ่งของ LifecycleOwner.addRepeatinJob API ใหม่ (I0f4cd)

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

  • จากอายุการใช้งาน 2.3.1: ตอนนี้กฎ Lint ของ NonNullableMutableLiveData ได้ถูกต้อง แยกความแตกต่างระหว่างตัวแปรฟิลด์ที่มีความสามารถในการเว้นว่างที่แตกต่างกัน (b/169249668)

Lifecycle Viewmodel Compose เวอร์ชัน 1.0.0

เวอร์ชัน 1.0.0-alpha07

16 มิถุนายน 2021

ปล่อย androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 แล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้

การละเมิดการเปลี่ยนแปลง API

  • ตอนนี้ viewModel() ใช้เวลา เป็นตัวเลือกViewModelStoreOwner จึงช่วยให้ทำงานได้ง่ายขึ้น กับเจ้าของที่ไม่ใช่ LocalViewModelStoreOwner ตัวอย่างเช่น ตอนนี้คุณสามารถใช้ viewModel(navBackStackEntry) เพื่อดึงข้อมูล ViewModel ที่เชื่อมโยงกับกราฟการนำทางเฉพาะแล้ว (I2628d, b/188693123)

เวอร์ชัน 1.0.0-alpha06

2 มิถุนายน 2021

ปล่อย androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 แล้ว เวอร์ชัน 1.0.0-alpha06 มีคอมมิตเหล่านี้

อัปเดตให้เข้ากันได้กับ Compose เวอร์ชัน 1.0.0-beta08

เวอร์ชัน 1.0.0-alpha05

18 พฤษภาคม 2021

ปล่อย androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05 แล้ว เวอร์ชัน 1.0.0-alpha05 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • อัปเดตให้เข้ากันได้กับ Compose เวอร์ชัน 1.0.0-beta07

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

  • ไฟล์ AndroidManifest จาก ui-test-Manifest และ ui-tooling-data ใช้งานร่วมกับ Android 12 ได้แล้ว (I6f9de, b/184718994)

เวอร์ชัน 1.0.0-alpha04

7 เมษายน 2021

ปล่อย androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 แล้ว เวอร์ชัน 1.0.0-alpha04 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงการขึ้นต่อกัน

  • เวอร์ชันนี้อนุญาต androidx.hilt:hilt-navigation-compose และ androidx.navigation:navigation-compose เพื่อซิงค์ทรัพยากร Dependency ใน androidx.compose.compiler:compiler:1.0.0-beta04 และ androidx.compose.runtime:runtime:1.0.0-beta04 สำหรับเวอร์ชัน 1.0.0 คอมไพเลอร์และรันไทม์จะต้องตรงกัน

เวอร์ชัน 1.0.0-alpha03

10 มีนาคม 2021

ปล่อย androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03 แล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตเหล่านี้

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

  • ตอนนี้ LocalViewModelStoreOwner.current แสดงผลเป็น มีค่าว่าง ViewModelStoreOwner เพื่อให้ระบุได้ดีขึ้น ปัจจุบันมี ViewModelStoreOwner ให้ใช้งานหรือไม่ องค์ประกอบ API ที่ต้องใช้ ViewModelStoreOwner เช่น เป็น viewModel() และ NavHost ยังคงส่งข้อยกเว้น หากไม่ได้ตั้งค่า ViewModelStoreOwner ไว้ (Idf39a)

Lifecycle-Viewmodel-Compose เวอร์ชัน 1.0.0-alpha02

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

ปล่อย androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02 แล้ว เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้

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

  • ตอนนี้ LocalViewModelStoreOwner มีฟังก์ชัน provides ที่สามารถ ที่ใช้กับ CompositionLocalProvider โดยแทนที่ asProvidableCompositionLocal() API (I45d24)

Lifecycle-Viewmodel-Compose เวอร์ชัน 1.0.0-alpha01

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

ปล่อย androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 แล้ว เวอร์ชัน 1.0.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ย้าย viewModel() Composable และ LocalViewModelStoreOwner จาก androidx.compose.ui.viewinterop ไปยังอาร์ติแฟกต์นี้ในแพ็กเกจ androidx.lifecycle.viewmodel.compose แล้ว (I7a374)

เวอร์ชัน 2.3.1

วงจรเวอร์ชัน 2.3.1

24 มีนาคม 2021

ปล่อย androidx.lifecycle:lifecycle-*:2.3.1 แล้ว เวอร์ชัน 2.3.1 มีคอมมิตเหล่านี้

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

  • ตอนนี้กฎ Lint NonNullableMutableLiveData สามารถ แยกความแตกต่างระหว่างตัวแปรฟิลด์ที่มีความสามารถในการเว้นว่างที่แตกต่างกัน (b/169249668)

เวอร์ชัน 2.3.0

เวอร์ชัน 2.3.0

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

ปล่อย androidx.lifecycle:lifecycle-*:2.3.0 แล้ว เวอร์ชัน 2.3.0 มีคอมมิตเหล่านี้

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

  • SavedStateHandle การรองรับคลาสที่จัดกลุ่มไม่ได้: ตอนนี้ SavedStateHandle รองรับการทำให้เป็นอนุกรมแบบ Lazy แล้ว โดยอนุญาตให้คุณเรียกใช้ setSavedStateProvider() สำหรับคีย์ที่ต้องการ ซึ่งเป็นการมอบ SavedStateProvider ที่จะเรียกกลับไปยัง saveState() เมื่อระบบขอให้ SavedStateHandle บันทึกสถานะ โปรดดูหัวข้อการบันทึกชั้นเรียนที่จัดกลุ่มไม่ได้
  • การบังคับใช้นโยบายพฤติกรรมในวงจร
    • ตอนนี้ LifecycleRegistry บังคับใช้ DESTROYED เป็นสถานะเทอร์มินัล
    • ตอนนี้ LifecycleRegistry ยืนยันว่ามีการเรียกใช้เมธอดในเทรดหลัก โดยเป็นสิ่งจำเป็นสำหรับวงจรของกิจกรรม ส่วนย่อย ฯลฯ เสมอ การเพิ่มผู้สังเกตการณ์จากชุดข้อความที่ไม่ใช่หัวข้อหลักทำให้เกิดข้อขัดข้องในช่วงรันไทม์ได้ยาก สำหรับออบเจ็กต์ LifecycleRegistry ที่เป็นของคอมโพเนนต์ของคุณเอง คุณสามารถเลือกไม่ใช้การตรวจสอบอย่างชัดแจ้งโดยใช้ LifecycleRegistry.createUnsafe(...) แต่คุณจะต้องตรวจสอบว่าการซิงค์ถูกต้องเมื่อมีการเข้าถึง LifecycleRegistry นี้จากเทรดอื่น
  • สถานะและตัวช่วยเหตุการณ์ของวงจร: เพิ่มเมธอดผู้ช่วยเหลือแบบคงที่ของ downFrom(State), downTo(State), upFrom(State), upTo(State) ใน Lifecycle.Event เพื่อสร้าง Event ที่ระบุ State และทิศทางการเปลี่ยน เพิ่มเมธอด getTargetState() ที่ระบุ State ที่อายุการใช้งานจะเปลี่ยนไปตาม Event โดยตรง
  • withStateAtLeast: เพิ่ม Lifecycle.withStateAtLeast API ที่รอสถานะอายุการใช้งานและเรียกใช้บล็อกโค้ดที่ไม่มีการระงับแบบพร้อมกันในจุดที่มีการเปลี่ยนแปลงสถานะ แล้วกลับมาแสดงอีกครั้งพร้อมผลลัพธ์ API เหล่านี้แตกต่างจากเมธอด when* ที่มีอยู่เนื่องจากไม่อนุญาตให้เรียกใช้โค้ดการระงับ และไม่ใช้ผู้มอบหมายงานที่กำหนดเอง (aosp/1326081)
  • ViewTree API: API ของ ViewTreeLifecycleOwner.get(View) และ ViewTreeViewModelStoreOwner.get(View) ใหม่ทำให้คุณสามารถเรียกข้อมูล LifecycleOwner และ ViewModelStoreOwner ที่มีอินสแตนซ์ตาม View ได้ คุณต้องอัปเกรดเป็นกิจกรรม 1.2.0 และ 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

  • ส่วนขยาย Kotlin LiveData.observe() จําเป็นต่อการใช้ไวยากรณ์ 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 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาข้อขัดข้องในการตรวจสอบ Lint ของ NullSafeMutableLiveData แล้ว (aosp/1395367)

เวอร์ชัน 2.3.0-alpha06

22 กรกฎาคม 2020

ปล่อย androidx.lifecycle:lifecycle-*:2.3.0-alpha06 แล้ว เวอร์ชัน 2.3.0-alpha06 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มเมธอดตัวช่วยแบบคงที่ของ downFrom(State), downTo(State), upFrom(State), upTo(State) ใน Lifecycle.Event เพื่อสร้าง Event ที่ระบุ State และทิศทางการเปลี่ยน เพิ่มเมธอด getTargetState() ที่ระบุ State ที่อายุการใช้งานจะเปลี่ยนไปตาม Event โดยตรง (I00887)
  • เพิ่ม API ของ Lifecycle.withStateAtLeast ที่รอสถานะของวงจรและเรียกใช้บล็อกโค้ดที่ไม่มีการระงับพร้อมกันเมื่อมีการเปลี่ยนแปลงสถานะ แล้วกลับมาใช้งานอีกครั้ง กับผลลัพธ์ API เหล่านี้แตกต่างจากเมธอด when* ที่มีอยู่เนื่องจากไม่อนุญาตให้เรียกใช้โค้ดการระงับ และไม่ใช้ผู้มอบหมายงานที่กำหนดเอง (aosp/1326081)

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

  • ตอนนี้ LifecycleRegistry บังคับใช้ DESTROYED เป็นสถานะเทอร์มินัล (I00887)
  • ตอนนี้ LifecycleRegistry ยืนยันว่ามีการเรียกใช้เมธอดในเทรดหลัก โดยเป็นสิ่งจำเป็นสำหรับวงจรของกิจกรรม ส่วนย่อย ฯลฯ เสมอ การเพิ่มผู้สังเกตการณ์จากชุดข้อความที่ไม่ใช่หัวข้อหลักทำให้เกิดข้อขัดข้องในช่วงรันไทม์ได้ยาก สำหรับออบเจ็กต์ LifecycleRegistry ที่เป็นของคอมโพเนนต์ของคุณเอง คุณสามารถเลือกไม่ใช้การตรวจสอบอย่างชัดแจ้งโดยใช้ LifecycleRegistry.createUnsafe(...) แต่คุณจะต้องตรวจสอบว่าการซิงค์ถูกต้องเมื่อมีการเข้าถึง LifecycleRegistry นี้จากเทรดอื่น (Ie7280, b/137392809)

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

  • แก้ไขข้อขัดข้องใน NullSafeMutableLiveData แล้ว (b/159987480)
  • แก้ไข ObsoleteLintCustomCheck สำหรับการตรวจสอบ Lint ที่รวมอยู่ใน lifecycle-livedata-core-ktx (และโดยเฉพาะ NullSafeMutableLiveData) (b/158699265)

เวอร์ชัน 2.3.0-alpha05

24 มิถุนายน 2020

ปล่อย androidx.lifecycle:lifecycle-*:2.3.0-alpha05 แล้ว เวอร์ชัน 2.3.0-alpha05 มีคอมมิตเหล่านี้

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

  • ขณะนี้ LiveData จัดการเคสที่เข้ามาใหม่ได้ดีขึ้น จึงไม่จำเป็นต้องโทรหา onActive() หรือ onInactive() ซ้ำอีก (b/157840298)
  • แก้ไขปัญหาที่การตรวจสอบ Lint ไม่ทำงานเมื่อใช้ Android Studio 4.1 Canary 6 ขึ้นไป (aosp/1331903)

เวอร์ชัน 2.3.0-alpha04

10 มิถุนายน 2020

ปล่อย androidx.lifecycle:lifecycle-*:2.3.0-alpha04 แล้ว เวอร์ชัน 2.3.0-alpha04 มีคอมมิตเหล่านี้

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

  • แก้ไขข้อขัดข้องในการตรวจสอบ Lint ของ NonNullableMutableLiveData แล้ว (b/157294666)
  • ขณะนี้การตรวจสอบ Lint NonNullableMutableLiveData ครอบคลุมกรณีที่มีการตั้งค่า null ใน MutableLiveData ด้วยพารามิเตอร์ประเภทที่ไม่เป็นค่าว่างอย่างมีนัยสำคัญ (b/156002218)

เวอร์ชัน 2.3.0-alpha03

20 พฤษภาคม 2020

ปล่อย androidx.lifecycle:lifecycle-*:2.3.0-alpha03 แล้ว เวอร์ชัน 2.3.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ SavedStateHandle รองรับการทำให้เป็นอนุกรมแบบ Lazy Loading แล้วโดยให้คุณเรียกใช้ setSavedStateProvider() สำหรับคีย์ที่ต้องการ โดยระบุ SavedStateProvider ซึ่งจะได้รับการติดต่อกลับไปยัง saveState() เมื่อระบบขอให้ SavedStateHandle บันทึกสถานะ (b/155106862)
  • ViewTreeViewModelStoreOwner.get(View) API ใหม่จะช่วยให้คุณเรียก ViewModelStoreOwner ที่มีอินสแตนซ์นั้นให้กับอินสแตนซ์ View ได้ คุณต้องอัปเกรดเป็นกิจกรรม 1.2.0-alpha05, ส่วนย่อย 1.3.0-alpha05 และ AppCompat 1.3.0-alpha01 เพื่อป้อนข้อมูลให้ถูกต้อง เพิ่มส่วนขยาย Kotlin findViewModelStoreOwner() ไปยัง lifecycle-viewmodel-ktx แล้ว (aosp/1295522)

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

  • แก้ไขปัญหาที่ทำให้การตรวจสอบ Lint MutableLiveData ที่เผยแพร่ในวงจร 2.3.0-alpha01 ไม่ได้รับการเผยแพร่ควบคู่กับอาร์ติแฟกต์ lifecycle-livedata-core-ktx (b/155323109)

เวอร์ชัน 2.3.0-alpha02

29 เมษายน 2020

ปล่อย androidx.lifecycle:lifecycle-*:2.3.0-alpha02 แล้ว เวอร์ชัน 2.3.0-alpha02 มีคอมมิตเหล่านี้

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

  • ตอนนี้ SavedStateViewModelFactory อนุญาตให้คุณส่งผ่านค่า Null Application ไปยังตัวสร้างเพื่อการสนับสนุนเคสที่ดียิ่งขึ้นในกรณีที่ไม่พร้อมใช้งาน และไม่จำเป็นต้องมีการสนับสนุนสำหรับ AndroidViewModel (aosp/1285740)

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

  • ปรับปรุงประสิทธิภาพ Cold Start โดยหลีกเลี่ยงความล้มเหลวในการยืนยันชั้นเรียนใน API 28 และอุปกรณ์ที่ต่ำกว่า (aosp/1282118)

เวอร์ชัน 2.3.0-alpha01

4 มีนาคม 2020

ปล่อย androidx.lifecycle:lifecycle-*:2.3.0-alpha01 แล้ว เวอร์ชัน 2.3.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ViewTreeLifecycleOwner.get(View) API ใหม่จะช่วยให้คุณเรียก LifecycleOwner ที่มีอินสแตนซ์นั้นให้กับอินสแตนซ์ View ได้ คุณต้องอัปเกรดเป็นกิจกรรม 1.2.0-alpha01 และส่วนย่อย 1.3.0-alpha01 เพื่อป้อนข้อมูลอย่างถูกต้อง ส่วนขยาย Kotlin สำหรับ findViewTreeLifecycleOwner พร้อมให้ใช้งานใน lifecycle-runtime-ktx (aosp/1182361, aosp/1182956)
  • เพิ่มการตรวจสอบ Lint ใหม่ที่เตือนคุณเมื่อตั้งค่า null ใน MutableLiveData ซึ่งกำหนดไว้ใน Kotlin ว่าไม่เป็นค่าว่าง ซึ่งจะใช้ได้เมื่อใช้อาร์ติแฟกต์ livedata-core-ktx หรือ livedata-ktx (aosp/1154723, aosp/1159092)
  • มีอาร์ติแฟกต์ lifecycle-runtime-testing ใหม่ซึ่งจัดเตรียม TestLifecycleOwner ที่ใช้งาน LifecycleOwner และระบุ Lifecycle ที่แก้ไขชุดข้อความได้อย่างปลอดภัย (aosp/1242438)

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

  • ตอนนี้อาร์ติแฟกต์ lifecycle-runtime มีชื่อแพ็กเกจที่ไม่ซ้ำกันแล้ว (aosp/1187196)

เวอร์ชัน 2.2.0

ViewModel-Savedstate เวอร์ชัน 2.2.0

5 กุมภาพันธ์ 2020

ปล่อย androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 แล้ว เวอร์ชัน 2.2.0 มีคอมมิตเหล่านี้

ตอนนี้ Lifecycle ViewModel savedState ใช้เวอร์ชันเดียวกันกับอาร์ติแฟกต์ Lifecycle อื่นๆ ลักษณะการทำงานของ 2.2.0 จะเหมือนกับลักษณะการทำงานของ 1.0.0

เวอร์ชัน 2.2.0

22 มกราคม 2020

ปล่อย androidx.lifecycle:lifecycle-*:2.2.0 แล้ว เวอร์ชัน 2.2.0 มีคอมมิตเหล่านี้

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

  • การผสานรวม Lifecycle Coroutine: อาร์ติแฟกต์ lifecycle-runtime-ktx ใหม่เพิ่มการผสานรวมระหว่าง Lifecycle กับ Coroutine ของ Kotlin นอกจากนี้ยังมีการขยาย lifecycle-livedata-ktx เพื่อใช้ประโยชน์จากโครูทีนด้วย ดูรายละเอียดเพิ่มเติมได้ที่ใช้โครูทีนของ Kotlin กับคอมโพเนนต์สถาปัตยกรรม
  • การเลิกใช้งาน ViewModelProviders.of(): เราเลิกใช้งาน ViewModelProviders.of() แล้ว คุณสามารถส่ง Fragment หรือ FragmentActivity ไปยังเครื่องมือสร้าง ViewModelProvider(ViewModelStoreOwner) ใหม่เพื่อให้ทำงานในลักษณะเดียวกันได้เมื่อใช้ 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: ตัวประมวลผลคำอธิบายประกอบของ Lifecycle จะเพิ่มขึ้นเรื่อยๆ โดยค่าเริ่มต้น หากแอปเขียนด้วยภาษาโปรแกรม Java 8 คุณจะใช้ DefautLifecycleObserver แทนได้ และหาก ข้อความนี้เขียนด้วยภาษาโปรแกรม Java 7 ซึ่งคุณสามารถใช้ LifecycleEventObserver ได้

เวอร์ชัน 2.2.0-rc03

4 ธันวาคม 2019

ปล่อย androidx.lifecycle:lifecycle-*:2.2.0-rc03 แล้ว เวอร์ชัน 2.2.0-rc03 มีคอมมิตเหล่านี้

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

  • แก้ไขความล้มเหลวที่เกิดขึ้นเมื่อมีการจัดเก็บ ViewModel จำลองใน ViewModelStore และค้นหาในภายหลังด้วยค่าเริ่มต้นจากโรงงาน
  • แก้ไขการใช้งาน Dispatchers.Main.immediate ใน launchWhenCreated และเรียกเมธอดที่คล้ายกันพร้อมกันในระหว่างเหตุการณ์ในวงจรที่เกี่ยวข้อง (aosp/1156203)

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

  • ขอขอบคุณ Anders Järleberg ที่ช่วยแก้ไขปัญหานี้ (aosp/1156203)
  • ขอขอบคุณ Vsevolod Tolstopyatov จาก Jetbrains ที่ตรวจสอบการติดตั้งใช้งานการดำเนินการในบรรทัด

การเปลี่ยนแปลงการขึ้นต่อกัน

  • ตอนนี้ส่วนขยายอายุการใช้งานขึ้นอยู่กับ Fragment 1.2.0-rc03

เวอร์ชัน 2.2.0-rc02

7 พฤศจิกายน 2019

ปล่อย androidx.lifecycle:lifecycle-*:2.2.0-rc02 แล้ว เวอร์ชัน 2.2.0-rc02 มีคอมมิตเหล่านี้

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

  • แก้ไขข้อบกพร่องในการตั้งค่า Proguard ของไลบรารีซึ่งส่งผลต่ออุปกรณ์ที่ใช้ API 28 ขึ้นไปหาก API เป้าหมายต่ำกว่า 29 (b/142778206)

เวอร์ชัน 2.2.0-rc01

23 ตุลาคม 2019

ปล่อย androidx.lifecycle:lifecycle-*:2.2.0-rc01 แล้ว เวอร์ชัน 2.2.0-rc01 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาที่ launchWhenCreated และวิธีการที่เกี่ยวข้องจะเรียกใช้ 1 เฟรมหลังจากเมธอดอายุการใช้งานที่เกี่ยวข้องเนื่องจากใช้ Dispatchers.Main แทน Dispatchers.Main.immediate (aosp/1145596)

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

  • ขอขอบคุณ Nicklas Ansman ที่ร่วมแก้ไขปัญหา (aosp/1145596)

เวอร์ชัน 2.2.0-beta01

9 ตุลาคม 2019

ปล่อย androidx.lifecycle:lifecycle-*:2.2.0-beta01 แล้ว เวอร์ชัน 2.2.0-beta01 มีการคอมมิตเหล่านี้

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

  • แก้ไขการถดถอยที่เกิดขึ้นในวงจร 2.2.0-alpha05 ในลําดับ ProcessLifecycleOwner และ LifecycleOwner ของกิจกรรมจะย้ายไปเริ่มต้นและกลับมาทำงานอีกครั้งในอุปกรณ์ Android 10 (aosp/1128132)
  • แก้ไขการถดถอยที่ใช้ในวงจร 2.2.0-alpha05 ซึ่งจะทําให้เกิด NullPointerException เมื่อใช้เวอร์ชัน 2.0.0 หรือ 2.1.0 ของ lifecycle-process (b/141536990)

เวอร์ชัน 2.2.0-alpha05

18 กันยายน 2019

ปล่อย androidx.lifecycle:lifecycle-*:2.2.0-alpha05 แล้ว เวอร์ชัน 2.2.0-alpha05 มีคอมมิตเหล่านี้

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

  • แก้ไขภาวะการแข่งขันในเครื่องมือสร้างข้อมูลสดของ Coroutine b/140249349

เวอร์ชัน 2.2.0-alpha04

5 กันยายน 2019

ปล่อย androidx.lifecycle:lifecycle-*:2.2.0-alpha04 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ขณะนี้ lifecycleScope, whenCreated, whenStarted, whenResumed, viewModelScope และการใช้งานที่สำคัญของ liveData ใช้ Dispatchers.Main.immediate แทน Dispatchers.Main (b/139740492)

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

  • ขอขอบคุณ Nicklas Ansman ที่มีส่วนร่วมในการย้ายไปยัง Dispatchers.Main.immediate (aosp/1106073)

เวอร์ชัน 2.2.0-alpha03

7 สิงหาคม 2019

ปล่อย androidx.lifecycle:lifecycle-*:2.2.0-alpha03 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

การเปลี่ยนแปลง 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 โดยอัตโนมัติ
  • เพิ่ม AbstractSavedStateViewModelfactor แล้ว ซึ่งจะช่วยให้คุณสร้างโรงงานที่กำหนดเองสำหรับ ViewModel และให้สิทธิ์เข้าถึง SavedStateHandle แก่โรงงานได้

ViewModel-Savedstate เวอร์ชัน 1.0.0-rc03

4 ธันวาคม 2019

ปล่อย androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03 แล้ว เวอร์ชัน 1.0.0-rc03 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงการขึ้นต่อกัน

  • ตอนนี้ Lifecycle ViewModel savedState ขึ้นอยู่กับอายุการใช้งาน 2.2.0-rc03 แล้ว

Viewmodel-Savedstate เวอร์ชัน 1.0.0-rc02

7 พฤศจิกายน 2019

ปล่อย androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02 แล้ว เวอร์ชัน 1.0.0-rc02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงการขึ้นต่อกัน

  • ตอนนี้จะขึ้นอยู่กับวงจรการใช้งาน 2.2.0-rc02

ViewModel-SavedState เวอร์ชัน 1.0.0-rc01

23 ตุลาคม 2019

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

ViewModel-Savedstate เวอร์ชัน 1.0.0-beta01

9 ตุลาคม 2019

ปล่อย androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01 แล้ว เวอร์ชัน 1.0.0-beta01 มีการคอมมิตเหล่านี้

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

  • แก้ไขปัญหาที่การเข้าถึง SaveState ViewModel เป็นครั้งแรกใน Activity.onActivityResult() จะทำให้เกิดIllegalStateException (b/139093676)
  • แก้ไขIllegalStateExceptionเมื่อใช้ AbstractSavedStateViewModelFactory (b/141225984)

ViewModel-SavedState เวอร์ชัน 1.0.0-alpha05

18 กันยายน 2019

ปล่อย androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05 แล้ว เวอร์ชัน 1.0.0-alpha05 มีคอมมิตเหล่านี้

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

  • SavedStateViewModelFactory ไม่ขยาย AbstractSavedStateViewModelFactory แล้ว และระบบจะสร้าง SavedStateHandle สำหรับ ViewModels ที่ขอมีข้อมูลดังกล่าวเท่านั้น (aosp/1113593)

ViewModel-SavedState เวอร์ชัน 1.0.0-alpha03

7 สิงหาคม 2019

ปล่อย androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ

ViewModel-SavedState เวอร์ชัน 1.0.0-alpha02

2 กรกฎาคม 2019

ปล่อย androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • เพิ่ม SavedStateHandle.getLiveData() โอเวอร์โหลดซึ่งยอมรับค่าเริ่มต้น

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

  • SavedStateVMFactory เปลี่ยนชื่อเป็น SavedStateViewModelFactory แล้ว
  • AbstractSavedStateVMFactory เปลี่ยนชื่อเป็น AbstractSavedStateViewModelFactory แล้ว

ViewModel-Savedstate เวอร์ชัน 1.0.0-alpha01

13 มีนาคม 2019

ปล่อย androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01 แล้ว ดูบันทึกคอมมิตแบบเต็มสำหรับรุ่นเริ่มต้นนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้ ViewModels สามารถสนับสนุนสถานะที่บันทึกไว้แล้ว ในการดำเนินการนี้ ให้ใช้ SavedStateVMFactory ซึ่งเป็นโรงงานของ viewmodel ที่เพิ่งแนะนำและ ViewModel ควรมีตัวสร้างที่รับออบเจ็กต์ SavedStateHandle เป็นพารามิเตอร์

เวอร์ชัน 2.1.0

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

  • เพิ่ม LifecycleEventObserver สําหรับกรณีที่จําเป็นต้องมีสตรีมเหตุการณ์ในวงจร ซึ่งเป็น API สาธารณะแทนที่จะเป็นคลาส GenericLifecycleObserver ที่ซ่อนอยู่
  • เพิ่มส่วนขยาย ktx สำหรับเมธอด LiveData.observe และ Transformations.* เมธอด
  • เพิ่ม Transformations.distinctUntilChanged แล้ว ซึ่งจะสร้างออบเจ็กต์ LiveData ใหม่ที่ไม่ระบุค่าจนกว่าจะมีการเปลี่ยนค่า LiveData ของแหล่งที่มา
  • เพิ่มการรองรับโครูทีนใน ViewModels โดยเพิ่มพร็อพเพอร์ตี้ส่วนขยาย ViewModel.viewModelScope

เวอร์ชัน 2.1.0

5 กันยายน 2019

ปล่อย androidx.lifecycle:lifecycle-*:2.1.0 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

เวอร์ชัน 2.1.0-rc01

2 กรกฎาคม 2019

เผยแพร่ androidx.lifecycle:*:2.1.0-rc01 แล้วโดยไม่มีการเปลี่ยนแปลงจาก androidx.lifecycle:*:2.1.0-beta01 คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

เวอร์ชัน 2.1.0-beta01

7 พฤษภาคม 2019

ปล่อย androidx.lifecycle:*:2.1.0-beta01 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • วงจรจะเปลี่ยนไปใช้เวอร์ชันเบต้า: API ที่เปิดตัวในอัลฟ่าก่อนหน้านี้ เช่น ฟังก์ชันส่วนขยาย liveData สำหรับการเปลี่ยนรูปแบบและการสังเกตการณ์ การเริ่มต้น ViewModel ด้วยการมอบสิทธิ์พร็อพเพอร์ตี้ และ API อื่นๆ จะมีความเสถียรและไม่มีการเปลี่ยนแปลง

เวอร์ชัน 2.1.0-alpha04

3 เมษายน 2019

ปล่อย androidx.lifecycle:*:2.1.0-alpha04 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: API ที่สำคัญซึ่งอยู่เบื้องหลัง by viewModels() และ by activityViewModels() ได้มีการเปลี่ยนแปลงเพื่อให้รองรับ ViewModelStore โดยตรง แทนที่จะรองรับเพียง ViewModelStoreOwner (aosp/932932)

เวอร์ชัน 2.1.0-alpha03

13 มีนาคม 2019

ปล่อย androidx.lifecycle:*:2.1.0-alpha03 แล้ว ดูรายการคอมมิตทั้งหมดที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • นำ ViewModelProvider.KeyedFactory ออกแล้ว อินเทอร์เฟซที่ 2 นอกเหนือจาก ViewModelProvider.Factory เขียนได้ไม่ดีนักเมื่อมีฟีเจอร์ใหม่เป็นการมอบสิทธิ์พร็อพเพอร์ตี้ใน 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 ใน ViewModels: เพิ่มพร็อพเพอร์ตี้ส่วนขยาย ViewModel.viewModelScope แล้ว
  • เพิ่ม ViewModelProvider.KeyedFactory ซึ่งเป็นโรงงานสำหรับ ViewModels ที่ได้รับ key และ Class ในเมธอด create

เวอร์ชัน 2.0.0

เวอร์ชัน 2.0.0

21 กันยายน 2018

เผยแพร่วงจร 2.0.0 พร้อมกับการแก้ไขข้อบกพร่อง 1 รายการจาก 2.0.0-rc01 ใน ViewModel

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

  • แก้ไขกฎ Proguard ของ ViewModel ที่นำตัวสร้างออกอย่างไม่ถูกต้อง b/112230489

เวอร์ชัน 2.0.0-beta01

2 กรกฎาคม 2018

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

  • แก้ไขกฎ Proguard ของ LifecycleObserver ให้เก็บไว้เฉพาะการใช้งานเท่านั้น ไม่ใช่อินเทอร์เฟซย่อย b/71389427
  • แก้ไขกฎ Proguard ของ ViewModel เพื่ออนุญาตให้มีการปรับให้ยากต่อการอ่าน (Obfuscation) และการย่อ

เวอร์ชันก่อน AndroidX

สำหรับ Lifecycle เวอร์ชันก่อน AndroidX ที่ตามมา ให้ใส่ทรัพยากร Dependency ต่อไปนี้

dependencies {
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    // alternatively - just ViewModel
    implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
    // alternatively - just LiveData
    implementation "android.arch.lifecycle:livedata:$lifecycle_version"
    // alternatively - Lifecycles only (no ViewModel or LiveData).
    //     Support library depends on this lightweight import
    implementation "android.arch.lifecycle:runtime:$lifecycle_version"

    annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
    // alternately - if using Java8, use the following instead of compiler
    implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

    // optional - ReactiveStreams support for LiveData
    implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"

    // optional - Test helpers for LiveData
    testImplementation "android.arch.core:core-testing:$lifecycle_version"
}

เวอร์ชัน 1.1.1

21 มีนาคม 2018

มีการเปลี่ยนแปลงเพียงเล็กน้อยเท่านั้น: android.arch.core.util.Function ถูกย้ายจาก arch:runtime ไปยัง arch:common วิธีนี้จะช่วยให้ใช้ได้โดยไม่ต้องพึ่งรันไทม์ เช่น ใน paging:common ด้านล่าง

lifecycle:common เป็นทรัพยากร Dependency ของ lifecycle:runtime การเปลี่ยนแปลงนี้จึงไม่มีผลกับ lifecycle:runtime โดยตรง แต่จะส่งผลต่อโมดูลที่ขึ้นอยู่กับ lifecycle:common โดยตรงเท่านั้น เหมือนกับการแบ่งหน้า

เวอร์ชัน 1.1.0

22 มกราคม 2018

การเปลี่ยนแปลงแพ็กเกจ

ทรัพยากร Dependency ใหม่ที่มีขนาดเล็กกว่ามากพร้อมใช้งานแล้ว

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

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

  • LifecycleActivity และ LifecycleFragment ที่เลิกใช้งานแล้วได้นำออกแล้ว โปรดใช้ FragmentActivity, AppCompatActivity หรือรองรับ Fragment
  • เพิ่มคำอธิบายประกอบ @NonNull รายการใน ViewModelProviders และ ViewModelStores แล้ว
  • ตัวสร้าง ViewModelProviders เลิกใช้งานแล้ว โปรดใช้เมธอดแบบคงที่โดยตรง
  • ViewModelProviders.DefaultFactory เลิกใช้งานแล้ว โปรดใช้ ViewModelProvider.AndroidViewModelFactory
  • เพิ่มเมธอด ViewModelProvider.AndroidViewModelFactory.getInstance(Application) แบบคงที่เพื่อเรียกข้อมูลแล้ว Factory แบบคงที่ที่เหมาะสำหรับการสร้างอินสแตนซ์ ViewModel และ AndroidViewModel