Vòng đời

Các thành phần có nhận biết vòng đời (lifecycle) thực hiện các hành động để phản hồi trước một thay đổi trong trạng thái vòng đời của một thành phần khác, chẳng hạn như các hoạt động (activity) và mảnh (fragment). Các thành phần này giúp bạn tạo ra mã được tổ chức tốt hơn và thường nhẹ hơn, dễ duy trì hơn.

Bảng này liệt kê tất cả cấu phần phần mềm trong nhóm androidx.lifecycle.

Cấu phần phần mềm Bản phát hành ổn định Bản phát hành dùng thử Bản phát hành beta Bản phát hành alpha
lifecycle-* 2.8.7 - - 2.9.0-alpha08
lifecycle-viewmodel-compose 2.8.7 - - 2.9.0-alpha08
Lần gần nhất cập nhật thư viện này: ngày 11 tháng 12 năm 2024

Khai báo phần phụ thuộc

Để thêm một phần phụ thuộc vào Lifecycle, bạn phải thêm kho lưu trữ Google Maven vào dự án. Đọc nội dung Kho lưu trữ Maven của Google để biết thêm thông tin.

Thêm các phần phụ thuộc cho cấu phần phần mềm bạn cần trong tệp build.gradle cho ứng dụng hoặc mô-đun của mình:

Kotlin

Groovy

    dependencies {
        def lifecycle_version = "2.8.7"
        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.7"
        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.8.7"
        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.7"
        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")
    }
    

Để biết thêm thông tin về các phần phụ thuộc, hãy xem nội dung Thêm phần phụ thuộc cho bản dựng.

Ý kiến phản hồi

Ý kiến phản hồi của bạn có thể giúp chúng tôi cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể thêm lượt bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.

Báo lỗi mới

Xem tài liệu về Công cụ theo dõi lỗi để biết thêm thông tin.

Phiên bản 2.9

Phiên bản 2.9.0-alpha08

Ngày 11 tháng 12 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.9.0-alpha08. Phiên bản 2.9.0-alpha08 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm ViewModelScenario.recreate để mô phỏng sự kiện Sự cố buộc tắt quy trình hệ thống, tạo lại ViewModel đang được kiểm thử và tất cả các thành phần liên quan. (Id6a69, b/381063087)
  • Giờ đây, bạn có thể phân giải các thực thể LifecycleOwnerViewModelStoreOwner được truy xuất thông qua API findViewTree tương ứng thông qua các thành phần mẹ không liên kết của một thành phần hiển thị, chẳng hạn như ViewOverlay. Hãy xem ghi chú phát hành của core hoặc tài liệu trong ViewTree.setViewTreeDisjointParent để biết thêm thông tin về thành phần hiển thị mẹ không liên kết. (I800f4)

Thay đổi về API

  • Giúp việc đặt tên và sắp xếp gói nhất quán hơn với SavedStateRegistryOwnerDelegate (I8c135, b/376026744)

Sửa lỗi

Phiên bản 2.9.0-alpha07

Ngày 13 tháng 11 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.9.0-alpha07. Phiên bản 2.9.0-alpha07 bao gồm các thay đổi sau.

Khả năng tương thích của Kotlin Multiplatform

  • Lifecycle ViewModel SavedState hiện đã tương thích với KMP. Điều này cho phép bạn sử dụng SavedStateHandle trong mã chung. (Ib6394, b/334076622)

Hỗ trợ chuyển đổi tuần tự KotlinX

  • Với sự hỗ trợ của tính năng chuyển đổi tuần tự KotlinX được thêm vào SavedState 1.3.0-alpha05, chúng tôi đã giới thiệu saved, một trình uỷ quyền thuộc tính lazy, giúp bạn dễ dàng lưu trữ các lớp @Serializable trong SavedStateHandle và tự động khôi phục các lớp đó trong quá trình bị gián đoạn và tạo lại. Xin lưu ý rằng đối tượng uỷ quyền saved là lazy và sẽ không gọi hàm lambda init hoặc lưu bất kỳ nội dung nào vào SavedStateHandle cho đến khi được truy cập. (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
        }
    }
    

Thay đổi về API

  • Thêm getMutableStateFlow vào SavedStateHandle để trả về MutableStateFlow. Hàm mới này là dành riêng cho khoá và không thể sử dụng với getLiveData. Hệ thống sẽ gửi một trường hợp ngoại lệ nếu bạn cố gắng sử dụng cả hai phương thức để truy cập vào cùng một trạng thái. (I04a4f, b/375408415)

Phiên bản 2.9.0-alpha06

Ngày 30 tháng 10 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.9.0-alpha06. Phiên bản 2.9.0-alpha06 bao gồm các thay đổi sau.

Thay đổi về hành vi

  • Trạng thái Lifecycle.DESTROYED là trạng thái cuối cùng và mọi nỗ lực di chuyển Lifecycle từ trạng thái này sang bất kỳ trạng thái nào khác hiện sẽ dẫn đến IllegalStateException. (I116c4, b/370577987)
  • SavedStateHandle không còn bao gồm bất kỳ SavedStateProvider.saveState() nào mà Bundle được trả về là trống. (I910b5, b/370577987)

Sửa lỗi

  • Lifecycle.eventFlow hiện hoàn tất chính xác khi LifecycleDESTROYED (I293b2, b/374043130)

Phiên bản 2.9.0-alpha05

Ngày 16 tháng 10 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.9.0-alpha05 mà không có thay đổi đáng kể nào. Phiên bản 2.9.0-alpha05 bao gồm các thay đổi sau.

Phiên bản 2.9.0-alpha04

Ngày 2 tháng 10 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.9.0-alpha04. Phiên bản 2.9.0-alpha04 bao gồm các thay đổi sau.

Kotlin Multiplatform

  • Mô-đun lifecycle-viewmodel-savedstate hiện được định cấu hình để tương thích với KMP nhằm chuẩn bị cho các API như SavedStateHandle được cung cấp trong nhóm tài nguyên chung trong một bản phát hành trong tương lai. (I503ed, I48764, b/334076622)

Phiên bản 2.9.0-alpha03

Ngày 18 tháng 9 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.9.0-alpha03. Phiên bản 2.9.0-alpha03 bao gồm các thay đổi sau.

Sửa lỗi

  • Từ Lifecycle 2.8.6: Lỗi tìm lỗi mã nguồn NullSafeMutableLiveData đã cải thiện khả năng hỗ trợ tính năng truyền thông minh, tránh các lỗi dương tính giả. (85fed6, b/181042665)

Thông tin cập nhật về phần phụ thuộc

Phiên bản 2.9.0-alpha02

Ngày 4 tháng 9 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.9.0-alpha02. Phiên bản 2.9.0-alpha02 bao gồm các thay đổi sau.

Sửa lỗi

  • Từ Lifecycle 2.8.5: Cập nhật quy tắc ProGuard androidx.lifecycle.ReportFragment để cho phép làm rối mã nguồn . (ff898e1)

Đóng góp bên ngoài

  • Di chuyển androidx.compose.ui.platform.LocalLifecycleOwner sang nhóm tài nguyên chung (KMP). Cảm ơn Ivan Matkov của JetBrains đã đóng góp. (8cd5d03)
  • Từ Lifecycle 2.8.5: Trình uỷ quyền tiện ích SavedStateHandle.saveable` hiện hỗ trợ các giá trị rỗng. Cảm ơn Roman Kalukiewicz đã đóng góp. (0d78ea6)

Phiên bản 2.9.0-alpha01

Ngày 7 tháng 8 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.9.0-alpha01. Phiên bản 2.9.0-alpha01 bao gồm các thay đổi sau.

Kotlin Multiplatform

  • lifecycle-testing hiện đã tương thích với KMP. (Iea41e)
  • Thêm tính năng hỗ trợ cho mục tiêu nhiều nền tảng kotlin linuxArm64 (I139d3, b/338268719)

Tính năng mới

  • Cấu phần phần mềm KMP androidx.lifecycle:lifecycle-viewmodel-testing mới cung cấp một lớp ViewModelScenario để kiểm thử riêng ViewModel, với khả năng hỗ trợ onCleared (tất cả nền tảng) và SavedStateHandle (chỉ Android). (337f68d, c9b3409, 9799a95c, b/264602919)
  • Việc tạo ViewModel bằng ViewModelProvider hiện an toàn với luồng; các chú thích @MainThread đã bị xoá. (Ifd978, b/237006831)

Thay đổi về API

  • Thêm hàm nhà máy CreationExtras.Key() để đơn giản hoá việc tạo các đối tượng CreationExtras.Key ẩn danh. (I970ee)
  • CreationExtras hiện bao gồm các phương thức nạp chồng toán tử giống như bản đồ để cho phép thao tác theo cách thông tục đối với nội dung trong Kotlin. Cho phép sử dụng in, +=+ với CreationExtras. (Ib4353)
  • CreationExtras hiện triển khai các phương thức equals, hashCodetoString. (Ib4353)
  • NewInstanceFactory hiện có trên các mục tiêu Android và máy tính chạy JVM. (d3d0892)
  • Thuộc tính tiện ích nội tuyến để hiển thị ứng dụng cơ bản một cách an toàn trong ngôn ngữ Kotlin phiên bản 2.0 (I39df2)

Sửa lỗi

  • Xoá phần trình bày quyền truy cập vào API nền tảng mới theo cách thủ công vì việc này diễn ra tự động thông qua tính năng tạo mô hình API khi sử dụng R8 với AGP 7.3 trở lên (ví dụ: R8 phiên bản 3.3) và cho tất cả các bản dựng khi sử dụng AGP 8.1 trở lên (ví dụ: D8 phiên bản 8.1). Những ứng dụng không sử dụng AGP nên cập nhật lên D8 phiên bản 8.1 trở lên. Hãy xem bài viết này để biết thêm thông tin. (If6b4c, b/345472586)

Phiên bản 2.8

Phiên bản 2.8.7

Ngày 30 tháng 10 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.7. Phiên bản 2.8.7 bao gồm các thay đổi sau.

Thay đổi về API

  • androidx.compose.ui.platform.LocalLifecycleOwner hiện đã có trong nhóm tài nguyên chung (KMP). (6a3f5b3)
  • lifecycle-runtime-compose: Xoá cấu phần phần mềm desktop và thêm cấu phần phần mềm -jvmStubs-linuxx64Stubs. Không có mục tiêu nào trong số này được dùng, chúng là phần giữ chỗ để hỗ trợ các nỗ lực của Jetbrains Compose. (6a3f5b3)

Phiên bản 2.8.6

Ngày 18 tháng 9 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.6. Phiên bản 2.8.6 bao gồm các thay đổi sau.

Sửa lỗi

  • Lỗi tìm lỗi mã nguồn NullSafeMutableLiveData đã cải thiện khả năng hỗ trợ tính năng truyền thông minh, tránh các kết quả dương tính giả. (85fed6, b/181042665)

Thông tin cập nhật về phần phụ thuộc

Phiên bản 2.8.5

Ngày 4 tháng 9 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.5. Phiên bản 2.8.5 bao gồm các thay đổi sau.

Sửa lỗi

  • Cập nhật quy tắc ProGuard androidx.lifecycle.ReportFragment để cho phép làm rối mã nguồn . (ff898e1)

Đóng góp bên ngoài

  • Trình uỷ quyền tiện ích SavedStateHandle.saveable hiện hỗ trợ các giá trị rỗng. Cảm ơn Roman Kalukiewicz đã đóng góp. (0d78ea6)

Phiên bản 2.8.4

Ngày 24 tháng 7 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.4. Phiên bản 2.8.4 bao gồm các thay đổi sau.

Sửa lỗi

  • Giờ đây, LiveData.asFlow() xử lý chính xác các trường hợp mà Flow được trả về được hoàn tất ngay sau khi nhận được một giá trị đã được đặt trên LiveData (ví dụ: khi sử dụng take(1)). (I9c566)
  • Giờ đây, việc hoàn tất Lifecycle*Effect là idempotent (tức là nếu onStopOrDispose được gọi do Vòng đời bị dừng, thì onStopOrDispose sẽ không được gọi lần thứ hai khi bị loại bỏ, trừ phi Vòng đời quay lại STARTED). (I5f607, b/352364595)

Phiên bản 2.8.3

Ngày 1 tháng 7 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.3. Phiên bản 2.8.3 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề về khả năng tương thích ngược của Lifecycle 2.8 với Compose 1.6.0 trở xuống khi sử dụng tính năng rút gọn mã. (aosp/3133056, b/346808608)

Phiên bản 2.8.2

Ngày 12 tháng 6 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.2. Phiên bản 2.8.2 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi CompositionLocal LocalLifecycleOwner not present khi sử dụng Lifecycle 2.8.X với Compose 1.6.X trở về trước – giờ đây, bạn có thể sử dụng Lifecycle 2.8.2 với mọi phiên bản Compose mà không cần giải pháp nào. (aosp/3105647, b/336842920)
  • ViewModelProvider sẽ không còn gặp sự cố khi kết hợp với phiên bản trước của phần phụ thuộc Vòng đời compileOnly trong các phiên bản 2.8 trở lên, khắc phục các vấn đề với các thư viện như LeakCanary. (I80383, b/341792251)

Phiên bản 2.8.1

Ngày 29 tháng 5 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.1. Phiên bản 2.8.1 bao gồm các thay đổi sau.

Sửa lỗi

  • lifecycle-viewmodel-compose hiện chỉ có một phần phụ thuộc chung trên compose-runtime, xoá phần phụ thuộc chung trên compose-ui. Cấu phần phần mềm Android giữ lại compose-ui để tương thích. (aosp/3079334, b/339562627)
  • Tính năng tích hợp saveable của ViewModel bằng cách sử dụng đối tượng uỷ quyền thuộc tính hiện sử dụng tên lớp như một phần của khoá được tạo tự động, tránh xung đột nếu nhiều lớp sử dụng cùng một SavedStateHandle. (aosp/3063463)

Phiên bản 2.8.0

Ngày 14 tháng 5 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.0. Phiên bản 2.8.0 bao gồm các thay đổi sau.

Các thay đổi quan trọng kể từ phiên bản 2.7.0

  • LocalLifecycleOwner đã được chuyển từ giao diện người dùng Compose sang lifecycle-runtime-compose để có thể sử dụng các API trợ giúp dựa trên Compose bên ngoài giao diện người dùng Compose.
  • Cấu phần phần mềm lifecycle-runtime-compose hiện chứa các API dropUnlessResumeddropUnlessStarted cho phép bạn thả lượt nhấp hoặc các sự kiện khác xảy ra ngay cả sau khi LifecycleOwner giảm xuống dưới Lifecycle.State đã cho. Ví dụ: bạn có thể sử dụng tính năng này với Navigation Compose để tránh xử lý các sự kiện nhấp chuột sau khi quá trình chuyển đổi sang màn hình khác đã bắt đầu: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope hiện là một tham số hàm khởi tạo có thể ghi đè, cho phép bạn chèn trình điều phối và SupervisorJob() của riêng mình hoặc ghi đè giá trị mặc định bằng cách sử dụng backgroundScope có trong 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 đã được viết lại trong Kotlin và hiện sử dụng AutoClosable thay vì Closeable. Giờ đây, tính năng này hỗ trợ việc thêm các đối tượng AutoCloseable bằng key cho phép truy xuất các đối tượng đó thông qua getCloseable().

  • Giờ đây, việc gọi LifecycleStartEffectLifecycleResumeEffect mà không có khoá sẽ gây ra lỗi, tuân theo quy ước tương tự như API DisposableEffect mà các API này phản ánh.

  • Ngừng sử dụng LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) và thay bằng LiveData.toPublisher(lifecycleOwner).

  • Các tiện ích Kotlin lifecycle-livedata-core-ktx hiện đã được chuyển sang mô-đun lifecycle-livedata-core.

  • NullSafeMutableLiveData đã được tái cấu trúc để tránh nhiều kết quả dương tính giả.

Khả năng tương thích của Kotlin Multiplatform trong vòng đời

Các API Vòng đời cốt lõi trong Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.EventLifecycleRegistry hiện được vận chuyển trong các cấu phần phần mềm tương thích với Kotlin Multiplatform.

Các cấu phần phần mềm bị ảnh hưởng:

  • lifecycle-common di chuyển hầu hết các API sang common và hỗ trợ jvm và iOS ngoài Android.
  • lifecycle-runtime di chuyển hầu hết các API sang common và hỗ trợ jvm và iOS ngoài Android.
  • lifecycle-runtime-ktx hiện trống, tất cả API đều được chuyển vào lifecycle-runtime.
  • lifecycle-runtime-compose di chuyển tất cả API sang common và vận chuyển một cấu phần phần mềm Android, khớp với tính năng hỗ trợ nhiều nền tảng của androidx.compose.

Khả năng tương thích của ViewModel với Kotlin Multiplatform

Cấu phần phần mềm lifecycle-viewmodel và các API như ViewModel, ViewModelStore, ViewModelStoreOwnerViewModelProvider hiện được vận chuyển trong các cấu phần phần mềm tương thích với Kotlin Multiplatform.

Để phù hợp với thay đổi này, các phương thức như các phương thức trên ViewModelProvider đã lấy java.lang.Class<T> hiện có một phương thức tương đương lấy kotlin.reflect.KClass<T>.

Khả năng tương thích tệp nhị phân trên Android vẫn được duy trì, nhưng có một vài thay đổi đáng chú ý khi so sánh giao diện API Android với giao diện API phổ biến:

  • Việc tạo một thực thể ViewModelProvider hiện được thực hiện thông qua các phương thức ViewModelProvider.create() thay vì gọi trực tiếp hàm khởi tạo của thực thể đó.
  • ViewModelProvider.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory chỉ có trên Android.
    • Bạn nên mở rộng Nhà máy tuỳ chỉnh từ ViewModelProvider.Factory và sử dụng phương thức create lấy CreationExtras hoặc sử dụng DSL Kotlin viewModelFactory.
  • Việc sử dụng ViewModelProvider mà không có nhà máy tuỳ chỉnh trên các nền tảng không phải JVM sẽ dẫn đến UnsupportedOperationException. Trên các nền tảng JVM, khả năng tương thích được duy trì bằng cách sử dụng hàm khởi tạo ViewModel không có đối số nếu không cung cấp nhà máy tuỳ chỉnh.
  • viewModelScope sẽ dự phòng thành EmptyCoroutineContext trong các nền tảng không có Dispatchers.Main (ví dụ: Linux).

Các cấu phần phần mềm bị ảnh hưởng:

  • lifecycle-viewmodel di chuyển hầu hết các API sang common và hỗ trợ jvm và iOS ngoài Android.
  • lifecycle-viewmodel-ktx hiện trống, tất cả API đều được chuyển vào lifecycle-viewmodel.
  • lifecycle-viewmodel-compose di chuyển tất cả API sang common và vận chuyển một cấu phần phần mềm Android, khớp với tính năng hỗ trợ nhiều nền tảng của androidx.compose.

Thay đổi về hành vi

  • InitializerViewModelFactory (bao gồm cả hàm trình tạo viewModelFactory) hiện sẽ gửi một IllegalArgumentException nếu initializer có cùng clazz: KClass<VM : ViewModel> đã được thêm. (Ic3a36)

Lỗi đã biết

Phiên bản 2.8.0-rc01

Ngày 1 tháng 5 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.0-rc01. Phiên bản 2.8.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề Hồ sơ cơ sở cho các lớp lifecycle-common không được đóng gói đúng cách. Các tệp này hiện được đóng gói trong tệp AAR lifecycle-runtime. (aosp/3038274, b/322382422)
  • Khắc phục sự thay đổi thứ tự ngoài ý muốn trong cách xoá các thực thể AutoCloseable đính kèm vào ViewModel – thứ tự trước đó là addCloseable(String, AutoCloseable), sau đó là addClosable(AutoCloseable), sau đó là onCleared() đã được khôi phục. (aosp/3041632)
  • Cải thiện hành vi tạo mặc định cho viewModelScope cho môi trường máy tính gốc và JVM. (aosp/3039221)

Đóng góp bên ngoài

  • Cảm ơn Victor Kropp đã cải thiện tính năng kiểm tra luồng chính trên JVM Desktop. (aosp/3037116)

Phiên bản 2.8.0-beta01

Ngày 17 tháng 4 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.0-beta01. Phiên bản 2.8.0-beta01 bao gồm các thay đổi sau.

Tính năng mới

  • Cấu phần phần mềm lifecycle-runtime-compose hiện tương thích với Kotlin Multiplatform, di chuyển mã của cấu phần phần mềm này sang common và vận chuyển một cấu phần phần mềm Android, khớp với tính năng hỗ trợ đa nền tảng cho androidx.compose. (If7a71, I4f4a0, b/331769623)

Phiên bản 2.8.0-alpha04

Ngày 3 tháng 4 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.0-alpha04. Phiên bản 2.8.0-alpha04 bao gồm các thay đổi sau.

Tính năng mới

  • Cấu phần phần mềm lifecycle-viewmodel-compose hiện tương thích với Kotlin Multiplatform, di chuyển mã của cấu phần phần mềm này sang common và vận chuyển một cấu phần phần mềm Android, khớp với tính năng hỗ trợ đa nền tảng của androidx.compose. Để điều chỉnh thay đổi này, phương thức viewModel có khả năng kết hợp hiện chấp nhận KClass ngoài java.lang.Class. (b/330323282)

Sửa lỗi

  • NullSafeMutableLiveData đã được tái cấu trúc để tránh nhiều kết quả dương tính giả. (I2d8c1, Iafb18, I03463, I7ecef)

Cập nhật các phần phụ thuộc

  • Cấu phần phần mềm lifecycle-viewmodel-compose hiện phụ thuộc vào Compose 1.6.0.
  • Lifecycle hiện phụ thuộc vào Trình cài đặt hồ sơ 1.3.1.

Phiên bản 2.8.0-alpha03

Ngày 20 tháng 3 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.0-alpha03. Phiên bản 2.8.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • ViewModel.viewModelScope hiện là một tham số hàm khởi tạo có thể ghi đè, cho phép bạn chèn trình điều phối và SupervisorJob() của riêng mình hoặc ghi đè giá trị mặc định bằng cách sử dụng backgroundScope có trong 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)
    }
    

Khả năng tương thích của Kotlin Multiplatform

Cấu phần phần mềm lifecycle-viewmodel và các API như ViewModel, ViewModelStore, ViewModelStoreOwnerViewModelProvider hiện được vận chuyển trong các cấu phần phần mềm tương thích với Kotlin Multiplatform. (b/214568825)

Để phù hợp với thay đổi này, các phương thức như các phương thức trên ViewModelProvider đã lấy java.lang.Class<T> hiện có một phương thức tương đương lấy kotlin.reflect.KClass<T>.

Khả năng tương thích tệp nhị phân trên Android vẫn được duy trì, nhưng có một vài thay đổi đáng chú ý khi so sánh giao diện API Android với giao diện API phổ biến:

  • Việc tạo một thực thể ViewModelProvider hiện được thực hiện thông qua các phương thức ViewModelProvider.create() thay vì gọi trực tiếp hàm khởi tạo của thực thể đó.
  • ViewModelProvider.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory chỉ có trên Android.
    • Bạn nên mở rộng Nhà máy tuỳ chỉnh từ ViewModelProvider.Factory và sử dụng phương thức create lấy CreationExtras hoặc sử dụng DSL Kotlin viewModelFactory.
  • Việc sử dụng ViewModelProvider mà không có nhà máy tuỳ chỉnh trên các nền tảng không phải JVM sẽ dẫn đến UnsupportedOperationException. Trên các nền tảng JVM, khả năng tương thích được duy trì bằng cách sử dụng hàm khởi tạo ViewModel không có đối số nếu không cung cấp nhà máy tuỳ chỉnh.
  • viewModelScope sẽ dự phòng thành EmptyCoroutineContext trên các nền tảng không có Dispatchers.Main (ví dụ: Linux).

Thay đổi về hành vi

  • InitializerViewModelFactory (bao gồm cả hàm trình tạo viewModelFactory) hiện sẽ gửi một IllegalArgumentException nếu bạn đã thêm một initializer có cùng clazz: KClass<VM : ViewModel>. (Ic3a36)

Sửa lỗi

  • ViewModel.getCloseable hiện xử lý các khoá trùng lặp: nếu key đã có tài nguyên AutoCloseable liên kết với nó, thì tài nguyên cũ sẽ được thay thế và đóng ngay lập tức. (Ibeb67)
  • Giờ đây, việc truy cập vào viewModelScope của ViewModel sẽ an toàn với luồng. (If4766, b/322407038)

Đóng góp bên ngoài

  • LocalLifecycleOwner đã chuyển từ giao diện người dùng Compose sang lifecycle-runtime-compose để có thể sử dụng các API trợ giúp dựa trên Compose bên ngoài giao diện người dùng Compose. Cảm ơn Jake Wharton đã đóng góp. (I6c41b, b/328263448)

Phiên bản 2.8.0-alpha02

Ngày 21 tháng 2 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.0-alpha02. Phiên bản 2.8.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Chúng tôi đã thêm API dropUnlessResumeddropUnlessStarted để cho phép bạn thả lượt nhấp hoặc các sự kiện khác xảy ra ngay cả sau khi LifecycleOwner giảm xuống dưới Lifecycle.State đã cho. Ví dụ: bạn có thể sử dụng tính năng này với Navigation Compose để tránh xử lý các sự kiện nhấp sau khi quá trình chuyển đổi sang màn hình khác đã bắt đầu: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } (Icba83, b/317230685)

Hoạt động chuyển đổi trong Kotlin

  • ViewModel hiện được viết bằng Kotlin (I16f26, b/214568825)
  • Các tiện ích kotlin lifecycle-viewmodel-ktx hiện đã được chuyển sang mô-đun vòng đời cơ sở. (Id787b, b/274800183)
  • Các tiện ích kotlin lifecycle-runtime-ktx hiện đã được chuyển sang mô-đun vòng đời cơ sở. (Ic3686, b/274800183)
  • Các tiện ích kotlin lifecycle-livedata-core-ktx hiện đã được chuyển sang mô-đun vòng đời cơ sở. (I54a3d, b/274800183)

Khả năng tương thích của Kotlin Multiplatform

  • Các API Vòng đời cốt lõi trong Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.EventLifecycleRegistry hiện được vận chuyển trong các cấu phần phần mềm tương thích với Kotlin Multiplatform. (b/317249252)

Thay đổi về API

  • Giờ đây, việc gọi LifecycleStartEffectLifecycleResumeEffect mà không có khoá sẽ gây ra lỗi, tuân theo quy ước tương tự như API DisposableEffect mà các API này phản ánh. (Ib0e0c, b/323518079)
  • ViewModel hiện sử dụng AutoCloseable thay vì Closeable. Đó là một thay đổi có khả năng tương thích ngược. (I27f8e, b/214568825)
  • Ngừng sử dụng LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) và thay bằng LiveData.toPublisher(lifecycleOwner). (Iabe29, b/262623005)

Đóng góp bên ngoài

  • Cảm ơn Ivan Matkov của Jetbrains đã giúp chuyển Lifecycle sang Kotlin Multiplatform. (aosp/2926690, I0c5ac, If445d)

Phiên bản 2.8.0-alpha01

Ngày 24 tháng 1 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.8.0-alpha01. Phiên bản 2.8.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • ViewModel hiện hỗ trợ việc thêm các đối tượng Closeable bằng key cho phép truy xuất các đối tượng đó thông qua getCloseable(). (I3cf63)

Phiên bản 2.7

Phiên bản 2.7.0

Ngày 10 tháng 1 năm 2024

Phát hành androidx.lifecycle:lifecycle-*:2.7.0. Phiên bản 2.7.0 bao gồm các thay đổi sau.

Các thay đổi quan trọng kể từ phiên bản 2.6.0

  • TestLifecycleOwner hiện bao gồm một hàm tạm ngưng setCurrentState() để đảm bảo rằng thay đổi trạng thái và tất cả lệnh gọi lại LifecycleObserver đều hoàn tất trước khi trả về. Đáng chú ý là không giống như việc đặt trực tiếp thuộc tính currentState, cách này không sử dụng runBlocking, giúp bạn có thể sử dụng an toàn trong một coroutine, chẳng hạn như coroutine do runTest cung cấp.
  • Các tiện ích LiveData của mapswitchMap hiện phản ánh hành vi của distinctUntilChanged – nếu LiveData có một value được đặt, hàm map/switchMap sẽ được gọi ngay lập tức để điền value của LiveData được trả về. Điều này đảm bảo rằng giá trị ban đầu sẽ được đặt trong thành phần kết hợp đầu tiên (khi được sử dụng với observeAsState()), nhưng không thay đổi hành vi quan sát – các giá trị cập nhật từ nguồn LiveData sẽ vẫn chỉ áp dụng sau khi bạn bắt đầu quan sát LiveData.
  • Bản phát hành này khắc phục sự cố SavedStateHandle không khôi phục đúng cách các lớp Parcelable tuỳ chỉnh sau khi bị buộc tắt và tạo lại. Do khung Android bị mất thông tin loại, các mảng Parcelable tuỳ chỉnh cần thêm công việc (tạo mảng đã nhập đúng loại theo cách thủ công) và tài liệu về get, getLiveDatagetStateFlow hiện gọi cụ thể giới hạn này.
  • Các quy tắc giữ proguard liên kết với LifecycleObserver đã bị xoá. Điều này có nghĩa là mã được bảo vệ muốn sử dụng API thông qua tính năng phản chiếu (chẳng hạn như sử dụng chú thích @OnLifecycleEvent đã ngừng hoạt động từ lâu) sẽ cần cung cấp các quy tắc giữ lại riêng cho trường hợp sử dụng cụ thể của mình.

Khả năng quan sát sự kiện trong vòng đời

  • Thay vì sử dụng LifecycleEventObserver, giờ đây, bạn có thể quan sát Flow của Lifecycle.Event thông qua phương thức mở rộng Lifecycle.asFlow().
  • Giờ đây, người dùng Jetpack Compose có thể sử dụng LifecycleEventEffect để chạy các hiệu ứng phụ của Compose dựa trên Lifecycle.Event.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Người dùng Jetpack Compose có thể sử dụng LifecycleStartEffectLifecycleResumeEffect để xử lý các cặp sự kiện – bắt đầu để dừng và tiếp tục để tạm dừng, tương ứng. API này phản ánh API có trong DisposableEffect và phù hợp với các trường hợp cần đảo ngược thay đổi đang được thực hiện khi trạng thái tăng lên và giảm xuống.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

Hãy xem phần Chạy mã trên các sự kiện trong vòng đời để biết thêm thông tin.

Khả năng quan sát trạng thái vòng đời

  • Giờ đây, bạn có thể quan sát Lifecycle.State hiện tại thông qua thuộc tính Lifecycle.currentStateFlow. Thuộc tính này trả về một StateFlow, trong đó valueLifecycle.State hiện tại.
  • Người dùng Jetpack Compose có thể sử dụng tiện ích Lifecycle.currentStateAsState() để hiển thị trực tiếp Lifecycle.State dưới dạng Compose State. Phương thức này tương đương (và ngắn hơn) với lifecycle.currentStateFlow.collectAsState().

Hãy xem phần Thu thập trạng thái vòng đời bằng luồng để biết thêm thông tin.

Phiên bản 2.7.0-rc02

Ngày 13 tháng 12 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.7.0-rc02. Phiên bản 2.7.0-rc02 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục sự cố trong đó SavedStateHandle không khôi phục đúng cách các lớp Parcelable tuỳ chỉnh sau khi bị buộc tắt và tạo lại. Do khung Android bị mất thông tin loại, các mảng Parcelable tuỳ chỉnh cần thêm công việc (tạo mảng đã nhập đúng loại theo cách thủ công) và tài liệu về get, getLiveDatagetStateFlow hiện gọi cụ thể giới hạn này. (I0b55a)

Phiên bản 2.7.0-rc01

Ngày 15 tháng 11 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.7.0-rc01. Phiên bản 2.7.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • LifecycleStartEffectLifecycleResumeEffect hiện xử lý và tạo lại chính xác khối hiệu ứng nếu LifecycleOwner thay đổi. (Ia25c6)

Phiên bản 2.7.0-beta01

Ngày 1 tháng 11 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.7.0-beta01 mà không có thay đổi nào. Phiên bản 2.7.0-beta01 bao gồm các thay đổi sau.

  • Tăng phiên bản beta, không có thay đổi lớn nào đối với phiên bản phát hành này.

Phiên bản 2.7.0-alpha03

Ngày 18 tháng 10 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.7.0-alpha03. Phiên bản 2.7.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • lifecycle-runtime-testing hiện chứa một tính năng kiểm tra tìm lỗi mã nguồn mới để tránh đặt Lifecycle.State của TestLifecycleOwner bằng cách sử dụng trường currentState khi bên trong một coroutine. Quy trình kiểm tra tìm lỗi mã nguồn hiện đề xuất tạm ngưng setCurrentState, cho phép đặt Lifecycle.State mà không chặn. (Icf728, b/297880630)

Sửa lỗi

  • Khắc phục vấn đề với LiveData.switchMap, trong đó việc trả về cùng một thực thể LiveData trên cả lệnh gọi ban đầu và lệnh gọi tiếp theo sẽ ngăn việc thêm thực thể LiveData làm nguồn. (Ibedcba7)

Phiên bản 2.7.0-alpha02

Ngày 6 tháng 9 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.7.0-alpha02. Phiên bản 2.7.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • TestLifecycleOwner hiện bao gồm hàm tạm ngưng setCurrentState() để cho phép người dùng sử dụng TestLifecycleOwner từ trong một coroutine, chẳng hạn như coroutine do runTest cung cấp. (I329de, b/259344129)

Thay đổi về API

  • Tất cả tệp từ các mô-đun lifecycle-livedata-ktx đã được chuyển vào mô-đun lifecycle-livedata chính. (I10c6f, b/274800183)

Thay đổi về hành vi

  • Tiện ích LiveData.map()LiveData.switchMap() hiện đặt value của LiveData được trả về nếu LiveData trước đó đã đặt một giá trị, đảm bảo rằng việc sử dụng LiveData thu được trong Jetpack Compose có trạng thái phù hợp trên thành phần ban đầu. (I91d2b, b/269479952)
  • addCloseable() của ViewModel hiện sẽ đóng ngay Closeable nếu ViewModel đã nhận được lệnh gọi đến onCleared(). (I4712e, b/280294730)

Sửa lỗi

  • Từ Vòng đời 2.6.2: Khắc phục vấn đề SavedStateHandle không được khôi phục chính xác sau khi quá trình bị gián đoạn nếu trạng thái được khôi phục, save() được gọi mà không thực sự lưu trạng thái trong SavedStateRegistry mẹ, sau đó trạng thái được khôi phục lại. Thao tác này sẽ khắc phục sự tương tác giữa rememberSaveableNavHost của Navigation Compose. (aosp/2729289)

Phiên bản 2.7.0-alpha01

Ngày 26 tháng 7 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.7.0-alpha01. Phiên bản 2.7.0-alpha01 bao gồm các thay đổi sau.

Thay đổi về API

  • Lifecycle.State hiện có thể quan sát được qua Compose thông qua Lifecycle.currentStateFlow. Phương thức này trả về một StateFlow, trong đó valueLifecycle.State hiện tại. (Ib212d, b/209684871)
  • Giờ đây, bạn có thể quan sát Lifecycle.Event dưới dạng Flow với Lifecycle.asFlow(). (If2c0f, b/176311030)
  • Thêm API LifecycleResumeEffect để chạy SideEffect Compose dựa trên cả lệnh gọi lại sự kiện Lifecycle.Event.ON_RESUMELifecycle.Event.ON_PAUSE. (I60386, b/235529345)
  • Thêm API LifecycleStartEffect để chạy SideEffect Compose dựa trên lệnh gọi lại sự kiện Lifecycle.Event.ON_STARTLifecycle.Event.ON_STOP. (I5a8d1, b/235529345)
  • Thêm API LifecycleEventEffect để chạy SideEffect Compose dựa trên Lifecycle.Event. (Ic9794, b/235529345)
  • Thêm tiện ích Lifecycle.collectAsState() để hiển thị trực tiếp Lifecycle.State dưới dạng State Compose. Phương thức này tương đương (và ngắn hơn) với lifecycle.currentStateFlow.collectAsState(). (I11015, b/235529345)

Sửa lỗi

  • Tiện ích LiveData.distinctUntilChanged() hiện đặt value của LiveData được trả về nếu LiveData trước đó đã đặt một giá trị. Điều này không thay đổi hành vi quan sát – các giá trị cập nhật từ nguồn LiveData sẽ vẫn chỉ áp dụng sau khi bạn bắt đầu quan sát LiveData được trả về từ distinctUntilChanged(). (Ib482f)
  • Các quy tắc giữ proguard liên kết với LifecycleObserver đã bị xoá. Điều này có nghĩa là mã được bảo vệ muốn sử dụng API thông qua tính năng phản chiếu sẽ cần cung cấp các quy tắc giữ lại riêng cho trường hợp sử dụng cụ thể. (Ia12fd)

Phiên bản 2.6

Phiên bản 2.6.2

Ngày 6 tháng 9 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.6.2. Phiên bản 2.6.2 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề SavedStateHandle không được khôi phục chính xác sau khi quá trình bị gián đoạn nếu trạng thái được khôi phục, save() được gọi mà không thực sự lưu trạng thái trong SavedStateRegistry mẹ, sau đó trạng thái được khôi phục lại. Thao tác này sẽ khắc phục sự tương tác giữa rememberSaveableNavHost của Navigation Compose. (aosp/2729289)

Phiên bản 2.6.1

Ngày 22 tháng 3 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.6.1. Phiên bản 2.6.1 bao gồm các thay đổi sau.

Thông tin cập nhật về phần phụ thuộc

Phiên bản 2.6.0

Ngày 8 tháng 3 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.6.0. Phiên bản 2.6.0 bao gồm các thay đổi sau.

Các thay đổi quan trọng kể từ phiên bản 2.5.0

  • Giờ đây, LiveData bao gồm một thuộc tính isInitialized mới cho biết đã có giá trị rõ ràng được đặt trên LiveData hay chưa, nhờ đó giúp bạn phân biệt giữa các trường hợp liveData.value trả về null do chưa có giá trị nào được đặt hay do có giá trị null rõ ràng.
  • MediatorLiveData giờ đây bao gồm một hàm khởi tạo để đặt giá trị ban đầu.
  • Thêm một tiện ích mới vào StateFlowFlow của collectAsStateWithLifecycle() thu thập từ các luồng và đại diện cho giá trị mới nhất của trạng thái này dưới dạng Trạng thái trong Compose theo cách nhận biết vòng đời.
  • Phương thức Lifecycle.launchWhenX và phương thức Lifecycle.whenX không còn được dùng vì trong một số trường hợp, việc sử dụng trình điều phối đang tạm dừng có thể dẫn đến lãng phí tài nguyên. Thay vào đó, bạn nên dùng Lifecycle.repeatOnLifecycle. Để biết thêm thông tin về việc tạm ngưng công việc một lần, vui lòng xem nội dung giải thích này về lý do việc này vốn không an toàn.
  • Chuyển đổi sang Kotlin – Một số lượng lớn lớp Vòng đời đã được chuyển đổi sang Kotlin. Tất cả các lớp đã chuyển đổi vẫn giữ được khả năng tương thích nhị phân với các phiên bản trước. Các lớp sau đây có thay đổi không tương thích với nguồn đối với các lớp được viết bằng Kotlin: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner, LifecycleOwner

Bảng bên dưới cung cấp các lượt chuyển đổi nguồn cho phiên bản mới của vòng đời.

Lifecycle 2.5 Lifecycle 2.5 (KTX) Lifecycle 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
  • Tính chất rỗng của phương thức onChanged của Observer được tạo trong Kotlin hiện khớp với tính chất rỗng của loại chung. Nếu muốn Observer.onChanged() chấp nhận loại rỗng, bạn phải tạo bản sao Observer bằng loại rỗng.
  • Các lớp này cũng được chuyển đổi sang Kotlin nhưng vẫn tương thích với nguồn: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcherProcessLifecycleOwner

Phiên bản 2.6.0-rc01

Ngày 22 tháng 2 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.6.0-rc01. Phiên bản 2.6.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • Tiện ích LiveData.distinctUntilChanged() hiện đặt value của LiveData được trả về nếu LiveData trước đó đã đặt một giá trị. Điều này không thay đổi hành vi quan sát – các giá trị cập nhật từ nguồn LiveData sẽ vẫn chỉ áp dụng sau khi bạn bắt đầu quan sát LiveData được trả về từ distinctUntilChanged(). (Ib482f)

Phiên bản 2.6.0-beta01

Ngày 8 tháng 2 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.6.0-beta01. Phiên bản 2.6.0-beta01 bao gồm các thay đổi sau.

Hoạt động chuyển đổi trong Kotlin

  • Giờ đây, LifecycleOwner được viết bằng Kotlin. Đây là thay đổi không tương thích nguồn đối với các lớp được viết bằng Kotlin – giờ đây, chúng phải ghi đè thuộc tính lifecycle thay vì triển khai hàm getLifecycle() trước. (I75b4b, b/240298691)
  • ViewModelStoreOwner hiện đã có trong Kotlin. Đây là thay đổi không tương thích nguồn đối với các lớp được viết bằng Kotlin – giờ đây, chúng phải ghi đè thuộc tính viewModelStore thay vì triển khai hàm getViewModelStore() trước. (I86409, b/240298691)
  • Phần mở rộng Kotlin trong LifecycleOwner cung cấp trường lifecycleScope đã được chuyển sang cấu phần phần mềm lifecycle-common từ lifecycle-runtime-ktx. (I41d78, b/240298691)
  • Phần mở rộng Kotlin trong Lifecycle cung cấp trường coroutineScope đã được chuyển sang cấu phần phần mềm lifecycle-common từ lifecycle-runtime-ktx. (Iabb91, b/240298691)

Phiên bản 2.6.0-alpha05

Ngày 25 tháng 1 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.6.0-alpha05. Phiên bản 2.6.0-alpha05 bao gồm các thay đổi sau.

Hoạt động chuyển đổi trong Kotlin

  • Giờ đây, Transformations được viết bằng Kotlin. Đây là thay đổi không tương thích với nguồn đối với lớp được viết bằng Kotlin trực tiếp sử dụng cú pháp như Transformations.map. Giờ đây, mã Kotlin phải dùng cú pháp phương thức phần mở rộng Kotlin mà trước đây chỉ dùng được khi có lifecycle-livedata-ktx. Khi sử dụng ngôn ngữ lập trình Java, chúng tôi không dùng phiên bản của các phương thức dùng phương thức androidx.arch.core.util.Function mà thay thế bằng phiên bản dùng Function1 của Kotlin. Thay đổi này vẫn duy trì khả năng tương thích với tệp nhị phân. (I8e14f)
  • Giờ đây, ViewTreeViewModelStoreOwner được viết bằng Kotlin. Đây là thay đổi không tương thích với nguồn đối với lớp được viết bằng Kotlin. Giờ đây, bạn phải nhập trực tiếp và dùng phương thức phần mở rộng Kotlin trên View của androidx.lifecycle.setViewTreeViewModelStoreOwnerandroidx.lifecycle.findViewTreeViewModelStoreOwner để đặt và tìm chủ sở hữu đã đặt trước đó. Phương thức này tương thích với tệp nhị phân và vẫn tương thích với nguồn triển khai được viết bằng ngôn ngữ lập trình Java. (Ia06d8, Ib22d8, b/240298691)
  • Giờ đây, giao diện HasDefaultViewModelProviderFactory được viết bằng Kotlin. Đây là thay đổi không tương thích với nguồn đối với lớp được viết bằng Kotlin. Giờ đây, các lớp này phải ghi đè các thuộc tính defaultViewModelProviderFactorydefaultViewModelCreationExtras thay vì triển khai các hàm tương ứng trước đó. (Iaed9c, b/240298691)
  • Giờ đây, Observer được viết bằng Kotlin. Phương thức onChanged() của mẫu này hiện dùng value tên cho tham số. (Iffef2, I4995e, b/240298691)
  • Giờ đây, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcherProcessLifecycleOwner được viết bằng Kotlin (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)

Phiên bản 2.6.0-alpha04

Ngày 11 tháng 1 năm 2023

Phát hành androidx.lifecycle:lifecycle-*:2.6.0-alpha04. Phiên bản 2.6.0-alpha04 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, LiveData bao gồm một thuộc tính isInitialized mới cho biết đã có giá trị rõ ràng được đặt trên LiveData hay chưa, nhờ đó giúp bạn phân biệt giữa các trường hợp liveData.value trả về null do chưa có giá trị nào được đặt hay do có giá trị null rõ ràng. (Ibd018)

Các thay đổi về API

  • Các API collectAsStateWithLifecycle() của lifecycle-runtime-compose không còn ở trạng thái thử nghiệm. (I09d42, b/258835424)
  • Phương thức Lifecycle.launchWhenX và phương thức Lifecycle.whenX không còn được dùng vì trong một số trường hợp, việc sử dụng trình điều phối đang tạm dừng có thể dẫn đến lãng phí tài nguyên. Thay vào đó, bạn nên dùng Lifecycle.repeatOnLifecycle. (Iafc54, b/248302832)

Hoạt động chuyển đổi trong Kotlin

  • ViewTreeLifecycleOwner giờ đây được viết bằng Kotlin. Đây là sự thay đổi không tương thích nguồn đối với các lớp được viết bằng Kotlin – bạn giờ phải nhập trực tiếp và dùng phương thức mở rộng Kotlin trên View của androidx.lifecycle.setViewTreeLifecycleOwnerandroidx.lifecycle.findViewTreeLifecycleOwner để đặt và tìm chủ sở hữu đã đặt trước đó. Thao tác này sẽ thay thế phần mở rộng Kotlin trước đó trong lifecycle-runtime-ktx. Phần mở rộng này tương thích với tệp nhị phân và vẫn tương thích với nguồn triển khai bằng ngôn ngữ lập trình Java. (I8a77a, I5234e, b/240298691)
  • LiveDataReactiveStreams giờ được viết bằng Kotlin. Các phần mở rộng Kotlin trước đây trong lifecycle-reactivestreams-ktx đã được chuyển sang mô-đun lifecycle-reactivestreams và trở thành nền tảng chính cho mã được viết bằng Kotlin. Đây là sự thay đổi không tương thích với nguồn đối với mã được viết bằng Kotlin nếu bạn chưa sử dụng các API phương thức mở rộng Kotlin. (I2b1b9, I95d22, b/240298691)
  • DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserverViewModelStore giờ đây được viết bằng Kotlin (Iadffd, (I60034), I8c52c, I9593d, I01fe1, I59a23, b/240298691)

Sửa lỗi

  • SavedStateHandle không còn gặp lỗi ClassCastException khi gọi get() bằng loại lớp không chính xác. (I6ae7c)

Phiên bản 2.6.0-alpha03

Ngày 24 tháng 10 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.6.0-alpha03. Phiên bản 2.6.0-alpha03 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục sự cố những quy tắc ràng buộc giữa các mô-đun Lifecycle khác nhau không hoạt động như dự kiến. (I18d0d, b/249686765)
  • Giờ đây, các lỗi do LifecycleRegistry.moveToState() gửi sẽ cung cấp thông báo lỗi hữu ích hơn để nhà phát triển biết về thành phần gây ra lỗi. (Idf4b2, b/244910446)

Phiên bản 2.6.0-alpha02

Ngày 7 tháng 9 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.6.0-alpha02. Phiên bản 2.6.0-alpha02 bao gồm các thay đổi sau.

Các thay đổi về API

  • MediatorLiveData giờ đây bao gồm một hàm khởi tạo để đặt giá trị ban đầu. (Ib6cc5, b/151244085)

Sửa lỗi

  • Các cấu phần phần mềm Lifecycle giờ đây bao gồm các quy tắc ràng buộc nhằm đảm bảo rằng tất cả các cấu phần phần mềm Lifecycle phụ thuộc lẫn nhau đều sử dụng cùng một phiên bản, tự động nâng cấp các phần phụ thuộc khác khi một phần phụ thuộc được nâng cấp. b/242871265
  • FlowLiveData.asFlow() nay tạo callbackFlow thay vì sử dụng phương thức triển khai riêng Channel để đảm bảo độ an toàn cho chuỗi cũng như bảo vệ ngữ cảnh. (I4a8b2, b/200596935)
  • Hàm asLiveData của FlowLiveData giờ đây sẽ giữ nguyên giá trị ban đầu của StateFlow khi tạo đối tượng LiveData mới. (I3f530, b/157380488)
  • Trong Lifecycle 2.5.1: Phương thức triển khai tuỳ chỉnh của AndroidViewModelFactory giờ đây sẽ gọi đúng hàm create(modelClass) khi sử dụng hàm khởi tạo có trạng thái với Lifecycle 2.4 trở lên (I5b315, b/238011621)

Phiên bản 2.6.0-alpha01

Ngày 29 tháng 6 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.6.0-alpha01. Phiên bản 2.6.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm một tiện ích mới vào StateFlowFlow của collectAsStateWithLifecycle thu thập từ các luồng và đại diện cho giá trị mới nhất của trạng thái này dưới dạng Trạng thái trong Compose theo cách nhận biết vòng đời. Luồng được thu thập và truyền phát mới được đặt thành giá trị của Trạng thái khi vòng đời ít nhất là trong một Lifecycle.State nhất định. Khi vòng đời giảm xuống dưới Lifecycle.State đó, quá trình thu thập luồng sẽ dừng lại và giá trị của Trạng thái không được cập nhật. (I1856e, b/230557927)

Phiên bản 2.5

Phiên bản 2.5.1

Ngày 27 tháng 7 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.5.1. Phiên bản 2.5.1 bao gồm các thay đổi sau.

Sửa lỗi

  • Việc triển khai tuỳ chỉnh của AndroidViewModelFactory hiện đã gọi đúng hàm create(modelClass) khi sử dụng hàm khởi tạo AndroidViewModelFactory có trạng thái với Lifecycle 2.4+. (I5b315, b/238011621)

Phiên bản 2.5.0

Ngày 29 tháng 6 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.5.0. Phiên bản 2.5.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 2.4.0

  • SavedStateHandle nay cung cấp một API getStateFlow() trả về một StateFlow của Kotlin để theo dõi các thay đổi về giá trị như một giải pháp thay thế cho việc sử dụng LiveData.

  • ViewModel CreationExtras – khi viết ViewModelProvider.Factory tuỳ chỉnh, bạn không còn cần mở rộng AndroidViewModelFactory hoặc AbstractSavedStateViewModelFactory để có quyền truy cập vào Application hoặc SavedStateHandle tương ứng. Thay vào đó, các trường này được cung cấp cho mọi lớp con ViewModelProvider.Factory dưới dạng CreationExtras thông qua tình trạng quá tải mới của create: create(Class<T>, CreationExtras). Các hoạt động bổ sung này được Hoạt động hoặc Mảnh tự động cung cấp khi bạn sử dụng Hoạt động 1.5.0Mảnh 1.5.0 tương ứng.

    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
        }
    }
    
  • Giờ đây, lifecycle-viewmodel cung cấp một Kotlin DSL viewModelFactory cho phép bạn xác định ViewModelProvider.Factory theo một hoặc nhiều trình khởi tạo lambda, mỗi trình chạy một lớp ViewModel mà nhà máy tuỳ chỉnh của bạn hỗ trợ, sử dụng CreationExtras làm nguồn dữ liệu chính.

    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 hiện cung cấp một API viewModel() lấy nhà máy lambda để tạo thực thể ViewModel mà không cần tạo ViewModelProvider.Factory tuỳ chỉnh.

    // 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)
    }
    
  • Tích hợp Trình tiết kiệm SavedStateHandle Compose – cấu phần phần mềm lifecycle-viewmodel-compose hiện chứa các API thử nghiệm mới trong SavedStateHandle.saveable cho phép rememberSaveable như hành vi được hỗ trợ bởi SavedStateHandle của `ViewModel.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Thêm một API addCloseable() và một hàm khởi tạo mới cho phép bạn thêm một hoặc nhiều đối tượng Closeable vào ViewModel sẽ bị đóng khi ViewModel bị xoá mà không cần thực hiện thao tác thủ công nào trong onCleared().

    Ví dụ: để tạo một phạm vi coroutine mà bạn có thể đưa vào ViewModel, nhưng kiểm soát thông qua chương trình kiểm thử, bạn có thể tạo một CoroutineScope triển khai Closeable:

    class CloseableCoroutineScope(
        context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate
    ) : Closeable, CoroutineScope {
        override val coroutineContext: CoroutineContext = context
        override fun close() {
            coroutineContext.cancel()
       }
    }
    

    Sau đó, bạn có thể dùng hàm này trong hàm khởi tạo ViewModel trong khi vẫn duy trì cùng một thời gian hoạt động như viewModelScope:

    class TestScopeViewModel(
        val customScope: CloseableCoroutineScope = CloseableCoroutineScope()
    ) : ViewModel(customScope) {
        // You can now use customScope in the same way as viewModelScope
    }
    

Thay đổi về hành vi

  • Việc cố gắng di chuyển Lifecycle.State từ INITIALIZED sang DESTROYED giờ đây sẽ luôn gửi một IllegalStateException bất kể Lifecycle có trình quan sát đính kèm hay không.
  • LifecycleRegistry nay sẽ xoá trình quan sát khi trình quan sát đạt trạng thái DESTROYED.

Phiên bản 2.5.0-rc02

Ngày 15 tháng 6 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.5.0-rc02. Phiên bản 2.5.0-rc02 bao gồm các thay đổi sau.

Sửa lỗi

  • ViewModelProvider sẽ không còn gặp sự cố khi kết hợp với phiên bản trước của phần phụ thuộc Vòng đời compileOnly trong các phiên bản 2.5 trở lên. (I81a66, b/230454566)

Phiên bản 2.5.0-rc01

Ngày 11 tháng 5 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.5.0-rc01. Phiên bản 2.5.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • MediatorLiveData.addSource() giờ sẽ gửi một NullPointerException khi chuyển một nguồn null thay vì lan truyền nguồn null tới các đối tượng tiếp nhận dữ liệu.(Ibd0fb, b/123085232)

Phiên bản 2.5.0-beta01

Ngày 20 tháng 4 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.5.0-beta01. Phiên bản 2.5.0-beta01 bao gồm các thay đổi sau.

Thay đổi API

  • Đã thêm uỷ quyền thuộc tính SavedStateHandle.saveable để sử dụng tên thuộc tính làm khoá cho trạng thái liên tục vào SavedStateHandle (I8bb86, b/225014345)

Sửa lỗi

  • Đã khắc phục vấn đề lồng một NavHost vào một NavHost khác trong thẻ điều hướng phụ ở dưới cùng sẽ dẫn đến IllegalStateException khi sử dụng nhiều ngăn xếp lui. (I11bd5, b/228865698)

Phiên bản 2.5.0-alpha06

Ngày 6 tháng 4 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.5.0-alpha06. Phiên bản 2.5.0-alpha06 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm nhiều MutableState thử nghiệm vào SavedStateHandle.saveable cho tương đương với rememberSaveable (I38cfe, b/224565154)

Thay đổi API

  • CreationExtras hiện là lớp trừu tượng thay vì bị đóng kín. (Ib8a7a)

Sửa lỗi

  • Đã khắc phục lỗi IllegalStateException: Already attached to lifecycleOwner do SavedStateHandleController gây ra. (I7ea47, b/215406268)

Phiên bản 2.5.0-alpha05

Ngày 23 tháng 3 năm 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 đã phát hành. Phiên bản 2.5.0-alpha05 bao gồm các thay đổi sau.

Tính năng mới

  • Mô-đun lifecycle-viewmodel-compose hiện cung cấp SavedStateHandleSaver, một API thử nghiệm đảm bảo các giá trị trong SavedStateHandle được tích hợp chính xác với trạng thái bản sao đã lưu mà rememberSaveable sử dụng. (Ia88b7, b/195689777)

Thay đổi API

  • Đã khắc phục vấn đề tương thích với Lifecycle 2.3 và các phiên bản Lifecycle mới hơn trong Java. (I52c8a, b/219545060)

Sửa lỗi

  • SavedStateViewFactory hiện hỗ trợ việc sử dụng CreationExtras ngay cả khi được khởi tạo bằng SavedStateRegistryOwner. Nếu bạn cung cấp thông số bổ sung, các đối số đã khởi tạo sẽ bị bỏ qua. (I6c43b, b/224844583)

Phiên bản 2.5.0-alpha04

Ngày 9 tháng 3 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.5.0-alpha04. Phiên bản 2.5.0-alpha04 bao gồm các thay đổi sau.

Thay đổi API

  • SavedStateHandle nay cung cấp một API getStateFlow() trả về một StateFlow Kotlin để theo dõi các thay đổi về giá trị như một giải pháp thay thế cho việc sử dụng LiveData. (Iad3ab, b/178037961)

Phiên bản 2.5.0-alpha03

Ngày 23 tháng 2 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.5.0-alpha03. Phiên bản 2.5.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm một API addCloseable() và một hàm khởi tạo mới cho phép bạn thêm một hoặc nhiều đối tượng Closeable vào ViewModel sẽ bị đóng khi ViewModel bị xoá mà không cần thực hiện thao tác thủ công nào trong onCleared(). (I55ea0)
  • lifecycle-viewmodel nay cung cấp một InitializerViewModelFactory cho phép bạn thêm lambda để xử lý các lớp ViewModel cụ thể, sử dụng CreationExtras làm nguồn dữ liệu chính. (If58fc, b/216687549)
  • lifecycle-viewmodel-compose nay cung cấp một API viewModel() lấy nhà máy lambda để tạo thực thể ViewModel mà không cần tạo ViewModelProvider.Factory tuỳ chỉnh. (I97fbb, b/216688927)

Thay đổi API

  • Giờ đây, bạn có thể tạo ViewModel với CreationExtras thông qua lifecycle-viewmodel-compose. (I08887, b/216688927)

Thay đổi về hành vi

  • Việc cố gắng di chuyển Lifecycle.State từ INITIALIZED sang DESTROYED giờ đây sẽ luôn cho ra một IllegalStateException bất kể Lifecycle có trình quan sát đính kèm hay không. (I7c390, b/177924329)
  • LifecycleRegistry nay sẽ xoá trình quan sát khi trình quan sát đạt trạng thái DESTROYED. (I4f8dd, b/142925860)

Phiên bản 2.5.0-alpha02

Ngày 9 tháng 2 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.5.0-alpha02. Phiên bản 2.5.0-alpha02 bao gồm các thay đổi sau.

Thay đổi API

  • SavedStateHandleSavedStateViewModelFactory đã được chuyển đổi sang Kotlin. Điều này đã cải thiện tính chất rỗng của các thuộc tính chung trong cả hai lớp. (Ib6ce2, b/216168263, I9647a, b/177667711)
  • Hiện tại, tham số hàm LiveData switchMap có thể có kết quả rỗng. (I40396, b/132923666)
  • Các phần mở rộng LiveData -ktx nay được chú thích bằng @CheckResult để thực thi việc kết quả được dùng khi gọi các hàm này. (Ia0f05, b/207325134)

Thay đổi về hành vi

  • SavedStateHandle nay lưu trữ chính xác giá trị mặc định khi không tồn tại giá trị nào cho khoá đã chỉ định. (I1c6ce, b/178510877)

Sửa lỗi

  • Từ Lifecycle 2.4.1: Cập nhật lifecycle-process để dựa vào Startup 1.1.1 nhằm đảm bảo nội dung sửa đổi ngăn ProcessLifecycleInitializer đưa ra StartupException có sẵn theo mặc định. (Ib01df, b/216490724)
  • Nay đã có một thông báo lỗi được cải thiện khi các lớp AndroidViewModel tuỳ chỉnh có các tham số theo thứ tự không chính xác và cố gắng tạo ViewModel. (I340f7, b/177667711)
  • Giờ đây, bạn có thể tạo mô hình hiển thị thông qua CreationExtras bằng cách sử dụng AndroidViewModelFactory mà không cần cài đặt ứng dụng. (I6ebef, b/217271656)

Phiên bản 2.5.0-alpha01

Ngày 26 tháng 1 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.5.0-alpha01. Phiên bản 2.5.0-alpha01 bao gồm các thay đổi sau.

ViewModel CreationExtras

Với bản phát hành này, chúng tôi đặt nền tảng để tái cấu trúc cách xây dựng ViewModel. Thay vì một tập hợp con các lớp ViewModelProvider.Factory cứng nhắc khi mỗi lớp con sẽ thêm chức năng bổ sung (cho phép tham số hàm khởi tạo Application thông qua AndroidViewModelFactory, cho phép tham số hàm khởi tạo SavedStateHandle thông qua SavedStateViewModelFactoryAbstractSavedStateViewModelFactory, v.v.), chúng tôi sẽ chuyển sang dạng thức nhà máy không có trạng thái (stateless factory) dựa vào một khái niệm mới là CreationExtras. (Ia7343, b/188691010, b/188541057)

Với thay đổi này, ViewModelProvider không còn gọi trực tiếp vào phương thức create(Class<T>) trước đó của ViewModelProvider.Factory. Thay vào đó, nó gọi vào một phần quá tải create mới: create(Class<T>, CreationExtras). Tức là bất kỳ cách triển khai trực tiếp nào của thực thể ViewModelProvider.Factory hiện đều có quyền truy cập vào từng CreationExtras mới sau:

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: String này cung cấp quyền truy cập vào khoá tuỳ chỉnh mà bạn đã chuyển tới ViewModelProvider.get().
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY cung cấp quyền truy cập vào lớp Application.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY cung cấp quyền truy cập vào SavedStateRegistryOwner đang được dùng để tạo ViewModel này.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY cung cấp quyền truy cập vào ViewModelStoreOwner đang được dùng để tạo ViewModel này.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY cung cấp quyền truy cập vào Bundle của các đối số nên được dùng để xây dựng SavedStateHandle.

Các thành phần bổ sung này được cung cấp theo mặc định khi bạn sử dụng Activity 1.5.0-alpha01, Fragment 1.5.0-alpha01Navigation 2.5.0-alpha01. Nếu bạn sử dụng các phiên bản thư viện cũ hơn, CreationExtras của bạn sẽ trống – tất cả lớp con hiện có của ViewModelProvider.Factory đã được viết lại để hỗ trợ cả đường dẫn tạo cũ mà các phiên bản thư viện trước đây sử dụng cũng như đường dẫn CreationExtras sẽ được sử dụng về sau.

CreationExtras này cho phép bạn tạo một ViewModelProvider.Factory chỉ truyền thông tin cần thiết cho mỗi ViewModel mà không cần dựa vào hệ thống phân cấp nghiêm ngặt của lớp con 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
    }
}

Chúng tôi sử dụng hàm mở rộng Kotlin createSavedStateHandle() trên CreationExtras từ SavedStateHandleSupport để tạo SavedStateHandle chỉ cho một ViewModel cần giá trị đó. (Ia6654, b/188541057)

Bạn có thể cung cấp CreationExtras tuỳ chỉnh bằng cách ghi đè getDefaultViewModelCreationExtras() trong ComponentActivity hoặc Fragment, nhờ đó, bạn có thể sử dụng những dữ liệu này cho ViewModelProvider.Factory tuỳ chỉnh dưới dạng nội dung được chèn hỗ trợ. Những thành phần bổ sung này sẽ tự động được cung cấp cho Nhà máy (Factory) tuỳ chỉnh của bạn khi được sử dụng trực tiếp với ViewModelProvider hoặc khi sử dụng phần mở rộng thuộc tính Kotlin của by viewModels()by activityViewModels(). (I79f2b, b/207012584, b/207012585, b/207012490)

Sửa lỗi

  • Khắc phục vấn đề về việc giá trị mặc định được cung cấp cho SavedStateHandle sẽ xuất hiện lại sau khi quá trình chấm dứt và tái tạo, ngay cả khi giá trị đó đã bị xoá khỏi SavedStateHandle. Do đó, SavedStateHandle sẽ không còn hợp nhất các giá trị mặc định và giá trị được khôi phục lại với nhau, thay vào đó chỉ sử dụng các giá trị được khôi phục làm nguồn đáng tin cậy. (I53a4b)

Phiên bản 2.4

Phiên bản 2.4.1

Ngày 9 tháng 2 năm 2022

Phát hành androidx.lifecycle:lifecycle-*:2.4.1. Phiên bản 2.4.1 bao gồm các thay đổi sau.

Sửa lỗi

  • Điều chỉnh Lifecycle 2.5.0-alpha01 cho phiên bản cũ: Khắc phục được vấn đề giá trị mặc định được cung cấp cho một SavedStateHandle sẽ xuất hiện lại sau khi quá trình kết thúc và tái tạo, ngay cả khi giá trị cụ thể đó đã bị xoá khỏi SavedStateHandle. Do đó, SavedStateHandle sẽ không còn hợp nhất các giá trị mặc định và giá trị được khôi phục lại với nhau, thay vào đó chỉ sử dụng các giá trị được khôi phục làm nguồn đáng tin cậy. (I53a4b)
  • lifecycle-process nay phụ thuộc vào Androidx Startup 1.1.1, bản đã khắc phục việc hồi quy trong tình huống sử dụng ProcessLifecycleInitializer sẽ gây ra StartupException. (b/216490724)

Phiên bản 2.4.0

Ngày 27 tháng 10 năm 2021

Phát hành androidx.lifecycle:lifecycle-*:2.4.0. Phiên bản 2.4.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 2.3.0

  • Ngừng sử dụng @OnLifecycleEvent. Bạn nên chuyển sang dùng LifecycleEventObserver hoặc DefaultLifecycleObserver.
  • Thêm thư viện androidx.lifecycle:lifecycle-viewmodel-compose. Thư viện này cung cấp thành phần kết hợp viewModel()LocalViewModelStoreOwner.
    • Thay đổi ngắt nguồn: ViewModelProvider đã được viết lại trong Kotlin. Phương thức ViewModelProvider.Factory.create đã ngừng chấp nhận giá trị chung rỗng.
  • API coroutine mới đã được thêm vào androidx.lifecycle:lifecycle-runtime-ktx:
  • Lifecycle.repeatOnLifecycle, API thực thi một khối mã trong coroutine khi Vòng đời (Lifecycle) ít nhất ở trong một trạng thái nhất định. Khối này sẽ huỷ và khởi chạy lại khi vòng đời di chuyển ra và vào trạng thái mục tiêu;
  • Flow.flowWithLifecycle, API phát ra giá trị từ Luồng (Flow) ở trên khi vòng đời ít nhất ở trong một trạng thái nhất định.
  • Di chuyển DefaultLifecycleObserver từ lifecycle.lifecycle-common-java8 sang lifecycle.lifecycle-common. lifecycle.lifecycle-common-java8 không cung cấp thêm chức năng nào ngoài lifecycle.lifecycle-common, vì vậy bạn có thể thay thế phần phụ thuộc bằng lifecycle.lifecycle-common.
  • API không phải coroutine từ lifecycle-viewmodel-ktx đã được chuyển đến mô-đun lifecycle-viewmodel.
  • lifecycle-process nay sử dụng androidx.startup để khởi chạy ProcessLifecycleOwner.

    Trước đây, việc này do androidx.lifecycle.ProcessLifecycleOwnerInitializer thực hiện.

    Nếu đã sử dụng tools:node="remove" trên ContentProvider đang dùng để khởi chạy vòng đời xử lý trước đây, bạn cần thực hiện các thao tác sau.

     <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>
    

    (hoặc)

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

Phiên bản 2.4.0-rc01

Ngày 29 tháng 9 năm 2021

androidx.lifecycle:lifecycle-*:2.4.0-rc01 được phát hành mà không có thay đổi nào từ Lifecycle 2.4.0-beta01. Phiên bản 2.4.0-rc01 bao gồm các thay đổi sau.

Phiên bản 2.4.0-beta01

Ngày 15 tháng 9 năm 2021

Phát hành androidx.lifecycle:lifecycle-*:2.4.0-beta01. Phiên bản 2.4.0-beta01 bao gồm các thay đổi sau.

Thay đổi API

  • Ngừng sử dụng @OnLifecycleEvent. Bạn nên chuyển sang dùng LifecycleEventObserver hoặc DefaultLifecycleObserver. (I5a8fa)
  • Di chuyển DefaultLifecycleObserver từ androidx.lifecycle.lifecycle-common-java8 sang androidx.lifecycle.lifecycle-common. androidx.lifecycle.lifecycle-common-java8 không cung cấp thêm chức năng nào ngoài androidx.lifecycle.lifecycle-common, vì vậy bạn có thể thay thế phần phụ thuộc bằng androidx.lifecycle.lifecycle-common. (I021aa)
  • Chuyển API không phải coroutine từ lifecycle-viewmodel-ktx sang mô-đun lifecycle-viewmodel. (I6d5b2)

Đóng góp bên ngoài

  • Cảm ơn dmitrilc đã khắc phục một loại trong tài liệu ViewModel! (#221)

Phiên bản 2.4.0-alpha03

Ngày 4 tháng 8 năm 2021

Phát hành androidx.lifecycle:lifecycle-*:2.4.0-alpha03. Phiên bản 2.4.0-alpha03 bao gồm các thay đổi sau.

Thay đổi API

  • Thay đổi ngắt nguồn: ViewModelProvider đã được viết lại trong Kotlin. Phương thức ViewModelProvider.Factory.create đã ngừng chấp nhận giá trị chung rỗng. (I9b9f6)

Thay đổi về hành vi

  • Lifecycle.repeatOnLifecycle: block nay luôn được gọi tuần tự khi thực thi lặp lại. (Ibab33)

Đóng góp bên ngoài

  • Cảm ơn chao2zhang đã chỉnh sửa đoạn mã trong tài liệu repeatOnLifecycle. #205.

Phiên bản 2.4.0-alpha02

Ngày 16 tháng 6 năm 2021

Phát hành androidx.lifecycle:lifecycle-*:2.4.0-alpha02. Phiên bản 2.4.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm một lượt kiểm tra tìm lỗi mã nguồn (lint) RepeatOnLifecycleWrongUsage mới vào lifecycle-runtime-ktx, giúp phát hiện khi sử dụng sai repeateOnLifecycle trong onStart() hoặc onResume(). (706078, b/187887400)

Các thay đổi về API

  • API LifecycleOwner.addRepeatingJob đã bị xoá và thay vào đó là Lifecycle.repeatOnLifecycle phù hợp với chức năng đồng thời có cấu trúc và dễ hiểu hơn. (I4a3a8)
  • Chuyển ProcessLifecycleInitializer sang chế độ công khai để các androidx.startup.Initializer khác có thể sử dụng những phần này làm phần phụ thuộc. (I94c31)

Sửa lỗi

  • Khắc phục lỗi kiểm tra tìm lỗi mã nguồn NullSafeMutableLiveData khi trường có đối tượng sửa đổi. (#147, b/183696616)
  • Khắc phục một vấn đề khác về việc kiểm tra tìm lỗi mã nguồn NullSafeMutableLiveData khi sử dụng thuộc tính chung. (#161, b/184830263)

Đóng góp bên ngoài

  • Cảm ơn maxsav đã cải thiện hoạt động kiểm tra tìm lỗi mã nguồn NullSafeMutableLiveData. (#147, b/183696616)
  • Cảm ơn maxsav đã cải thiện hoạt động kiểm tra tìm lỗi mã nguồn NullSafeMutableLiveData. (#161, b/184830263)

Phiên bản 2.4.0-alpha01

Ngày 24 tháng 3 năm 2021

Phát hành androidx.lifecycle:lifecycle-*:2.4.0-alpha01. Phiên bản 2.4.0-alpha01 bao gồm các thay đổi sau.

Thay đổi về hành vi

  • lifecycle-process nay sử dụng androidx.startup để khởi chạy ProcessLifecycleOwner.

    Trước đây, việc này do androidx.lifecycle.ProcessLifecycleOwnerInitializer thực hiện.

    Nếu đã sử dụng tools:node="remove" trên ContentProvider đang dùng để khởi chạy vòng đời xử lý trước đây, bạn cần thực hiện các thao tác sau.

     <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>
    

    (hoặc)

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

Thay đổi API

  • Thêm một API Flow.flowWithLifecycle phát ra giá trị từ Luồng (Flow) ở trên khi vòng đời ít nhất ở trong một trạng thái nhất định sử dụng API Lifecycle.repeatOnLifecycle. Đây là phiên bản thay thế cho API LifecycleOwner.addRepeatinJob mới. (I0f4cd)

Sửa lỗi

  • Từ Lifecycle 2.3.1: Quy tắc tìm lỗi mã nguồn NonNullableMutableLiveData nay có thể phân biệt đúng cách giữa các biến trường có giá trị rỗng riêng biệt. (b/169249668)

Lifecycle Viewmodel Compose Phiên bản 1.0.0

Phiên bản 1.0.0-alpha07

Ngày 16 tháng 6 năm 2021

Phát hành androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07. Phiên bản 1.0.0-alpha07 bao gồm các thay đổi sau.

Thay đổi về API có thể gây lỗi

  • viewModel() nay lấy một ViewModelStoreOwner không bắt buộc, giúp làm việc với các chủ sở hữu không phải LocalViewModelStoreOwner dễ dàng hơn. Ví dụ: giờ đây bạn có thể sử dụng viewModel(navBackStackEntry) để truy xuất ViewModel được liên kết với một biểu đồ điều hướng cụ thể. (I2628d, b/188693123)

Phiên bản 1.0.0-alpha06

Ngày 2 tháng 6 năm 2021

Phát hành androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06. Phiên bản 1.0.0-alpha06 bao gồm các thay đổi sau.

Cập nhật để tương thích với Compose phiên bản 1.0.0-beta08.

Phiên bản 1.0.0-alpha05

Ngày 18 tháng 5 năm 2021

Phát hành androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05. Phiên bản 1.0.0-alpha05 bao gồm các thay đổi sau.

Tính năng mới

  • Cập nhật để tương thích với Compose phiên bản 1.0.0-beta07.

Sửa lỗi

  • Các tệp AndroidManifest từ ui-test-manifest và ui-tooling-data hiện đã tương thích với Android 12 (I6f9de, b/184718994)

Phiên bản 1.0.0-alpha04

Ngày 7 tháng 4 năm 2021

Phát hành androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04. Phiên bản 1.0.0-alpha04 bao gồm các thay đổi sau.

Thay đổi về phần phụ thuộc

  • Phiên bản này cho phép androidx.hilt:hilt-navigation-composeandroidx.navigation:navigation-compose đồng bộ hoá các phần phụ thuộc trên androidx.compose.compiler:compiler:1.0.0-beta04androidx.compose.runtime:runtime:1.0.0-beta04. Đối với 1.0.0, trình biên dịch và thời gian chạy bắt buộc phải khớp nhau.

Phiên bản 1.0.0-alpha03

Ngày 10 tháng 3 năm 2021

Phát hành androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03. Phiên bản 1.0.0-alpha03 bao gồm các thay đổi sau.

Thay đổi API

  • LocalViewModelStoreOwner.current nay trả về một ViewModelStoreOwner rỗng để xác định xem ViewModelStoreOwner có dùng được trong bản Compose hiện tại hay không. Các API đòi hỏi phải có ViewModelStoreOwner, chẳng hạn như viewModel()NavHost, vẫn sẽ có ngoại lệ nếu bạn không đặt ViewModelStoreOwner. (Idf39a)

Lifecycle-Viewmodel-Compose Phiên bản 1.0.0-alpha02

Ngày 24 tháng 2 năm 2021

Phát hành androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02. Phiên bản 1.0.0-alpha02 bao gồm các thay đổi sau.

Thay đổi API

  • LocalViewModelStoreOwner nay có một hàm provides mà bạn có thể dùng với CompositionLocalProvider, thay thế API asProvidableCompositionLocal(). (I45d24)

Lifecycle-Viewmodel-Compose Phiên bản 1.0.0-alpha01

Ngày 10 tháng 2 năm 2021

Phát hành androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01. Phiên bản 1.0.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • Thành phần kết hợp viewModel()LocalViewModelStoreOwner đã được di chuyển từ androidx.compose.ui.viewinterop sang cấu phần phần mềm này trong gói androidx.lifecycle.viewmodel.compose. (I7a374)

Phiên bản 2.3.1

Lifecycle Phiên bản 2.3.1

Ngày 24 tháng 3 năm 2021

Phát hành androidx.lifecycle:lifecycle-*:2.3.1. Phiên bản 2.3.1 bao gồm các thay đổi sau.

Sửa lỗi

  • Quy tắc tìm lỗi mã nguồn NonNullableMutableLiveData nay có thể phân biệt đúng cách giữa các biến trường có giá trị rỗng riêng biệt. (b/169249668)

Phiên bản 2.3.0

Phiên bản 2.3.0

Ngày 10 tháng 2 năm 2021

Phát hành androidx.lifecycle:lifecycle-*:2.3.0. Phiên bản 2.3.0 bao gồm các thay đổi sau.

Các thay đổi lớn từ phiên bản 2.2.0

  • Hỗ trợ SavedStateHandle cho các lớp không đóng gói được: SavedStateHandle nay hỗ trợ tính năng chuyển đổi tuần tự từng phần bằng cách cho phép bạn gọi setSavedStateProvider() cho một khoá nhất định, cung cấp một SavedStateProvider sẽ nhận lệnh gọi lại saveState() khi SavedStateHandle được yêu cầu lưu trạng thái. Xem nội dung Lưu các lớp không đóng gói được.
  • Thực thi hành vi trong vòng đời:
    • LifecycleRegistry giờ đây thực thi DESTROYED dưới dạng một trạng thái đầu cuối.
    • LifecycleRegistry giờ đây xác minh rằng các phương thức được gọi trên chuỗi chính. Đó luôn là yêu cầu bắt buộc đối với vòng đời của các hoạt động, mảnh, v.v. Việc bổ sung trình quan sát từ các luồng không phải luồng chính dẫn đến việc khó nắm bắt được sự cố trong thời gian chạy. Đối với các đối tượng LifecycleRegistry do các thành phần của riêng bạn sở hữu, bạn có thể chọn không sử dụng một cách rõ ràng bằng cách dùng LifecycleRegistry.createUnsafe(...), nhưng sau đó bạn phải đảm bảo rằng việc đồng bộ hoá phù hợp sẽ được thực hiện khi LifecycleRegistry này được truy cập qua luồng (thread) khác.
  • Trình trợ giúp sự kiện và trạng thái vòng đời: Thêm các phương thức trợ giúp tĩnh downFrom(State), downTo(State), upFrom(State), upTo(State) vào Lifecycle.Event để tạo Event khi có State và hướng chuyển đổi. Thêm phương thức getTargetState() cung cấp State mà Lifecycle hoạt động sẽ chuyển đổi trực tiếp theo Event.
  • withStateAtLeast: Thêm các API Lifecycle.withStateAtLeast chờ trạng thái vòng đời và chạy đồng bộ một khối mã không tạm ngưng tại thời điểm thay đổi trạng thái, sau đó tiếp tục với kết quả đó. Các API này khác với các phương thức when* hiện có vì các API này không cho phép chạy mã tạm ngưng và không sử dụng trình điều phối tuỳ chỉnh. (aosp/1326081)
  • API ViewTree: API ViewTreeLifecycleOwner.get(View)ViewTreeViewModelStoreOwner.get(View) mới cho phép bạn truy xuất LifecycleOwnerViewModelStoreOwner chứa tương ứng, khi có một thực thể View. Bạn phải nâng cấp lên Activity 1.2.0Fragment 1.3.0AppCompat 1.3.0-alpha01 trở lên để thông tin được điền sẵn chính xác. Tiện ích Kotlin của findViewTreeLifecycleOwnerfindViewTreeViewModelStoreOwner lần lượt có sẵn trong lifecycle-runtime-ktxlifecycle-viewmodel-ktx.
  • Ngừng cung cấp tiện ích Kotlin LiveData.observe(): Tiện ích Kotlin LiveData.observe() cần thiết để sử dụng cú pháp lambda nay không được dùng nữa vì không cần thiết khi sử dụng Kotlin 1.4.

Phiên bản 2.3.0-rc01

Ngày 16 tháng 12 năm 2020

Phát hành androidx.lifecycle:lifecycle-*:2.3.0-rc01. Phiên bản 2.3.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • Phương thức keys() của SavedStateHandle hiện đã nhất quán trước và sau khi lưu trạng thái – hiện đã bao gồm các khoá dùng trước đó với setSavedStateProvider() ngoài các khoá dùng với set()getLiveData(). (aosp/1517919, b/174713653)

Đóng góp bên ngoài

Phiên bản 2.3.0-beta01

Ngày 1 tháng 10 năm 2020

Phát hành androidx.lifecycle:lifecycle-*:2.3.0-beta01. Phiên bản 2.3.0-beta01 bao gồm các thay đổi sau.

Thay đổi API

  • Phần mở rộng về Kotlin LiveData.observe() cần thiết để sử dụng cú pháp lambda nay không được dùng nữa vì không cần thiết khi sử dụng Kotlin 1.4. (I40d3f)

Sửa lỗi

Thay đổi về tài liệu

  • Trình tạo liveData và tài liệu asLiveData() đã được cập nhật để cung cấp thông tin chi tiết về việc thay đổi các giá trị thời gian chờ cụ thể. (aosp/1122324)

Phiên bản 2.3.0-alpha07

Ngày 19 tháng 8 năm 2020

Phát hành androidx.lifecycle:lifecycle-*:2.3.0-alpha07. Phiên bản 2.3.0-alpha07 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục sự cố xảy ra trong bước kiểm tra tìm lỗi mã nguồn NullSafeMutableLiveData. (aosp/1395367)

Phiên bản 2.3.0-alpha06

Ngày 22 tháng 7 năm 2020

Phát hành androidx.lifecycle:lifecycle-*:2.3.0-alpha06. Phiên bản 2.3.0-alpha06 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm các phương thức trợ giúp tĩnh của downFrom(State), downTo(State), upFrom(State), upTo(State) vào Lifecycle.Event để tạo Event khi có một State và hướng chuyển đổi. Thêm phương thức getTargetState() cung cấp State mà Lifecycle hoạt động sẽ chuyển đổi trực tiếp theo Event. (I00887)
  • Thêm các API Lifecycle.withStateAtLeast chờ trạng thái vòng đời và chạy đồng bộ một khối mã không tạm ngưng tại thời điểm thay đổi trạng thái, sau đó tiếp tục với kết quả đó. Các API này khác với các phương thức when* hiện có vì các API này không cho phép chạy mã tạm ngưng và không sử dụng trình điều phối tuỳ chỉnh. (aosp/1326081)

Thay đổi về hành vi

  • LifecycleRegistry giờ đây thực thi DESTROYED dưới dạng một trạng thái đầu cuối. (I00887)
  • LifecycleRegistry giờ đây xác minh rằng các phương thức được gọi trên chuỗi chính. Đó luôn là yêu cầu bắt buộc đối với vòng đời của các hoạt động, mảnh, v.v. Việc bổ sung trình quan sát từ các luồng không phải luồng chính dẫn đến việc khó nắm bắt được sự cố trong thời gian chạy. Đối với các đối tượng LifecycleRegistry do các thành phần của riêng bạn sở hữu, bạn có thể chọn không tham gia một cách rõ ràng bằng cách sử dụng LifecycleRegistry.createUnsafe(...), nhưng sau đó bạn phải đảm bảo rằng việc đồng bộ hoá phù hợp sẽ được thực hiện khi LifecycleRegistry này được truy cập từ chuỗi (Ie7280, b/137392809)

Sửa lỗi

  • Khắc phục sự cố trong NullSafeMutableLiveData. (b/159987480)
  • Sửa một ObsoleteLintCustomCheck cho các lượt kiểm tra tìm lỗi mã nguồn đi kèm lifecycle-livedata-core-ktx (và cụ thể là NullSafeMutableLiveData). (b/158699265)

Phiên bản 2.3.0-alpha05

Ngày 24 tháng 6 năm 2020

Phát hành androidx.lifecycle:lifecycle-*:2.3.0-alpha05. Phiên bản 2.3.0-alpha05 bao gồm các thay đổi sau.

Sửa lỗi

  • Giờ đây, LiveData sẽ xử lý các trường hợp tái lập tốt hơn, tránh các lệnh gọi trùng lặp đến onActive() hoặc onInactive(). (b/157840298)
  • Khắc phục vấn đề không kiểm tra tìm lỗi mã nguồn được khi sử dụng Android Studio 4.1 Canary 6 trở lên. (aosp/1331903)

Phiên bản 2.3.0-alpha04

Ngày 10 tháng 6 năm 2020

Phát hành androidx.lifecycle:lifecycle-*:2.3.0-alpha04. Phiên bản 2.3.0-alpha04 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục sự cố xảy ra trong bước kiểm tra tìm lỗi mã nguồn (Lint check) NonNullableMutableLiveData. (b/157294666)
  • Quy trình kiểm tra tìm lỗi mã nguồn NonNullableMutableLiveData hiện bao gồm nhiều trường hợp hơn đáng kể, trong đó giá trị null được đặt trên MutableLiveData có tham số loại không rỗng. (b/156002218)

Phiên bản 2.3.0-alpha03

Ngày 20 tháng 5 năm 2020

Phát hành androidx.lifecycle:lifecycle-*:2.3.0-alpha03. Phiên bản 2.3.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • SavedStateHandle nay hỗ trợ tính năng chuyển đổi tuần tự từng phần bằng cách cho phép bạn gọi setSavedStateProvider() cho một khoá nhất định. Lệnh này cung cấp một SavedStateProvider để gọi lại saveState() khi SavedStateHandle được yêu cầu lưu trạng thái. (b/155106862)
  • API ViewTreeViewModelStoreOwner.get(View) mới cho phép bạn truy xuất ViewModelStoreOwner chứa khi có một thực thể View. Bạn cần nâng cấp lên Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05AppCompat 1.3.0-alpha01 trở lên để thông tin được điền sẵn chính xác. Thêm một tiện ích Kotlin findViewModelStoreOwner() vào lifecycle-viewmodel-ktx. (aosp/1295522)

Sửa lỗi

  • Khắc phục vấn đề khiến tính năng kiểm tra tìm lỗi mã nguồn (lint) MutableLiveData phát hành trong Lifecycle 2.3.0-alpha01 không phát hành được cùng với cấu phần phần mềm lifecycle-livedata-core-ktx. (b/155323109)

Phiên bản 2.3.0-alpha02

Ngày 29 tháng 4 năm 2020

Phát hành androidx.lifecycle:lifecycle-*:2.3.0-alpha02. Phiên bản 2.3.0-alpha02 bao gồm các thay đổi sau.

Thay đổi API

  • Hiện tại, SavedStateViewModelFactory đã cho phép bạn truyền một Application rỗng về hàm khởi tạo để hỗ trợ tốt hơn các trường hợp chưa có sẵn và không cần hỗ trợ AndroidViewModel. (aosp/1285740)

Sửa lỗi

  • Cải thiện hiệu suất khởi động nguội bằng cách tránh lỗi xác minh lớp trên API 28 trở xuống. (aosp/1282118)

Phiên bản 2.3.0-alpha01

Ngày 4 tháng 3 năm 2020

Phát hành androidx.lifecycle:lifecycle-*:2.3.0-alpha01. Phiên bản 2.3.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • API ViewTreeLifecycleOwner.get(View) mới cho phép bạn truy xuất LifecycleOwner chứa khi có một thực thể View. Bạn phải nâng cấp lên Activity 1.2.0-alpha01Fragment 1.3.0-alpha01 để thông tin được điền sẵn chính xác. Tiện ích Kotlin findViewTreeLifecycleOwner có sẵn trong lifecycle-runtime-ktx. (aosp/1182361, aosp/1182956)
  • Thêm một chương trình kiểm tra tìm lỗi mã nguồn (lint) mới để cảnh báo bạn khi đặt giá trị null trên MutableLiveData đã được xác định trong Kotlin là giá trị không rỗng. Có sẵn khi sử dụng cấu phần phần mềm livedata-core-ktx hoặc livedata-ktx. (aosp/1154723, aosp/1159092)
  • Nay có một cấu phần phần mềm lifecycle-runtime-testing mới cung cấp một TestLifecycleOwner triển khai LifecycleOwner và cung cấp một Lifecycle biến đổi được và an toàn cho luồng (thread). (aosp/1242438)

Sửa lỗi

  • Cấu phần phần mềm lifecycle-runtime nay có một tên gói riêng biệt. (aosp/1187196)

Phiên bản 2.2.0

ViewModel-Savedstate Phiên bản 2.2.0

Ngày 5 tháng 2 năm 2020

Phát hành androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0. Phiên bản 2.2.0 bao gồm các thay đổi sau.

Lifecycle ViewModel SavedState nay có cùng phiên bản với các cấu phần phần mềm Lifecycle khác. Hành vi của 2.2.0 giống hệt với hành vi của 1.0.0.

Phiên bản 2.2.0

Ngày 22 tháng 1 năm 2020

Phát hành androidx.lifecycle:lifecycle-*:2.2.0. Phiên bản 2.2.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 2.1.0

  • Tích hợp coroutine Lifecycle: Cấu phần phần mềm lifecycle-runtime-ktx mới bổ sung khả năng tích hợp giữa các nhóm coroutine Lifecycle và Kotlin. lifecycle-livedata-ktx cũng đã được mở rộng để tận dụng các coroutine. Xem nội dung Sử dụng coroutine Kotlin với các Thành phần kiến trúc để biết thêm chi tiết.
  • Không dùng ViewModelProviders.of() nữa: ViewModelProviders.of() không còn được dùng nữa. Bạn có thể truyền Fragment hoặc FragmentActivity tới hàm khởi tạo ViewModelProvider(ViewModelStoreOwner) mới để sử dụng cùng một chức năng khi sử dụng Mảnh 1.2.0.
  • Không dùng cấu phần phần mềm lifecycle-extensions nữa: Với việc ngừng sử dụng ViewModelProviders.of() nói trên, bản phát hành này đánh dấu việc ngừng sử dụng API cuối cùng trong lifecycle-extensions và cấu phần phần mềm này hiện sẽ được coi là đã ngừng hoạt động. Bạn nên dựa vào các cấu phần phần mềm trong Lifecycle cụ thể mà bạn cần (chẳng hạn như lifecycle-service nếu bạn đang sử dụng LifecycleServicelifecycle-process nếu đang sử dụng ProcessLifecycleOwner) thay vì lifecycle-extensions vì sau này sẽ không còn bản phát hành 2.3.0 cho lifecycle-extensions nữa.
  • Trình xử lý chú giải gia tăng Gradle (Gradle Incremental Annotation Processor): Trình xử lý chú giải của Lifecycle được tăng dần theo mặc định. Nếu ứng dụng của bạn được viết bằng ngôn ngữ lập trình Java 8, bạn có thể sử dụng DefautLifecycleObserver; và nếu ứng dụng đó được viết bằng ngôn ngữ lập trình Java 7, bạn có thể sử dụng LifecycleEventObserver.

Phiên bản 2.2.0-rc03

Ngày 4 tháng 12 năm 2019

Phát hành androidx.lifecycle:lifecycle-*:2.2.0-rc03. Phiên bản 2.2.0-rc03 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi xảy ra khi một ViewModel mô phỏng được lưu trữ trong ViewModelStore và được truy vấn sau đó bằng nhà máy mặc định.
  • Khắc phục việc sử dụng Dispatchers.Main.immediate trong launchWhenCreated và các phương thức tương tự để được gọi đồng bộ trong sự kiện tương ứng trong vòng đời. (aosp/1156203)

Đóng góp bên ngoài

  • Cảm ơn Anders Järleber đã đóng góp nội dung sửa lỗi! (aosp/1156203)
  • Cảm ơn Vsevolod Tolstopyatov của Jetbrains đã xem xét việc triển khai biện pháp thực thi cùng dòng.

Thay đổi về phần phụ thuộc

  • Tiện ích cho vòng đời (lifecycle) nay phụ thuộc vào mảnh (fragment) 1.2.0-rc03.

Phiên bản 2.2.0-rc02

Ngày 7 tháng 11 năm 2019

Phát hành androidx.lifecycle:lifecycle-*:2.2.0-rc02. Phiên bản 2.2.0-rc02 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi trong phần thiết lập Proguard của thư viện đã ảnh hưởng đến các thiết bị chạy API 28 trở lên nếu API mục tiêu dưới 29. (b/142778206)

Phiên bản 2.2.0-rc01

Ngày 23 tháng 10 năm 2019

Phát hành androidx.lifecycle:lifecycle-*:2.2.0-rc01. Phiên bản 2.2.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề launchWhenCreated và các phương thức liên quan sẽ chạy một khung muộn hơn phương thức liên kết trong vòng đời do sử dụng Dispatchers.Main thay vì Dispatchers.Main.immediate. (aosp/1145596)

Đóng góp bên ngoài

  • Cảm ơn Nicklas Ansman đã đóng góp nội dung sửa lỗi! (aosp/1145596)

Phiên bản 2.2.0-beta01

Ngày 9 tháng 10 năm 2019

Phát hành androidx.lifecycle:lifecycle-*:2.2.0-beta01. Phiên bản 2.2.0-beta01 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục một phiên hồi quy ra mắt trong Lifecycle 2.2.0-alpha05 theo thứ tự ProcessLifecycleOwnerLifecycleOwner của hoạt động chuyển sang bắt đầu và tiếp tục trên thiết bị Android 10. (aosp/1128132)
  • Khắc phục một phiên hồi quy ra mắt trong Lifecycle 2.2.0-alpha05 sẽ gây ra NullPointerException khi sử dụng phiên bản 2.0.0 hoặc 2.1.0 của lifecycle-process. (b/141536990)

Phiên bản 2.2.0-alpha05

Ngày 18 tháng 9 năm 2019

Phát hành androidx.lifecycle:lifecycle-*:2.2.0-alpha05. Phiên bản 2.2.0-alpha05 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục một tình huống tương tranh trong trình tạo dữ liệu trực tiếp coroutine. b/140249349

Phiên bản 2.2.0-alpha04

Ngày 5 tháng 9 năm 2019

Phát hành androidx.lifecycle:lifecycle-*:2.2.0-alpha04. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • lifecycleScope, whenCreated, whenStarted, whenResumed, viewModelScope và hoạt động triển khai cơ bản của liveData nay sử dụng Dispatchers.Main.immediate thay vì Dispatchers.Main. (b/139740492)

Đóng góp bên ngoài

  • Cảm ơn Nicklas Ansman đã đóng góp vào việc chuyển sang Dispatchers.Main.immediate! (aosp/1106073)

Phiên bản 2.2.0-alpha03

Ngày 7 tháng 8 năm 2019

Phát hành androidx.lifecycle:lifecycle-*:2.2.0-alpha03. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

Thay đổi về API

  • Ngừng sử dụng ViewModelProviders.of(). Bạn có thể truyền Fragment hoặc FragmentActivity tới hàm khởi tạo ViewModelProvider(ViewModelStoreOwner) mới để sử dụng cùng một chức năng. (aosp/1009889)

Phiên bản 2.2.0-alpha02

Ngày 2 tháng 7 năm 2019

Phát hành androidx.lifecycle:*:2.2.0-alpha02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Thay đổi về API

  • Thay thế LiveDataScope.initialValue bằng LiveDataScope.latestValue, giúp theo dõi giá trị phát ra hiện tại của khối liveData.
  • Thêm quá tải (overload) mới vào trình tạo liveData nhận được tham số timeout dưới dạng Duration

Phiên bản 2.2.0-alpha01

Ngày 7 tháng 5 năm 2019

Phát hành androidx.lifecycle:*:2.2.0-alpha01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Bản phát hành này bổ sung các tính năng mới hỗ trợ thêm các coroutine Kotlin cho Lifecycle và LiveData. Bạn có thể xem tài liệu chi tiết tại đây.

ViewModel-SavedState Phiên bản 1.0.0

Phiên bản 1.0.0

Ngày 22 tháng 1 năm 2020

Phát hành androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0. Phiên bản 1.0.0 bao gồm các thay đổi sau.

Tính năng quan trọng trong phiên bản 1.0.0

  • Thêm lớp SavedStateHandle mới. Chính sách này cho phép các lớp ViewModel của bạn truy cập và đóng góp vào trạng thái đã lưu. Đối tượng này có thể được nhận trong hàm khởi tạo của lớp ViewModel và nhà máy do các mảnh cung cấp theo mặc định. AppCompatActivity sẽ tự động chèn SavedStateHandle.
  • Thêm AbstractSavedStateViewModelFactory. Thuộc tính này cho phép bạn tạo nhà máy tuỳ chỉnh cho ViewModel cũng như cấp quyền truy cập vào SavedStateHandle.

ViewModel-Savedstate Phiên bản 1.0.0-rc03

Ngày 4 tháng 12 năm 2019

Phát hành androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03. Phiên bản 1.0.0-rc03 bao gồm các thay đổi sau.

Thay đổi về phần phụ thuộc

  • Lifecycle ViewModel SavedState nay tuỳ thuộc vào Lifecycle 2.2.0-rc03.

Viewmodel-Savedstate Phiên bản 1.0.0-rc02

Ngày 7 tháng 11 năm 2019

Phát hành androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02. Phiên bản 1.0.0-rc02 bao gồm các thay đổi sau.

Thay đổi về phần phụ thuộc

  • Nay phụ thuộc vào vòng đời của 2.2.0-rc02.

XemModel-SavedState Phiên bản 1.0.0-rc01s

Ngày 23 tháng 10 năm 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 được phát hành mà không có thay đổi nào từ 1.0.0-beta01. Phiên bản 1.0.0-rc01 bao gồm các thay đổi sau.

ViewModel-Savedstate Phiên bản 1.0.0-beta01

Ngày 9 tháng 10 năm 2019

Phát hành androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01. Phiên bản 1.0.0-beta01 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề truy cập vào SavedState ViewModel đã lưu lần đầu tiên trong Activity.onActivityResult() sẽ dẫn đến IllegalStateException. (b/139093676)
  • Khắc phục IllegalStateException khi sử dụng AbstractSavedStateViewModelFactory. (b/141225984)

ViewModel-SavedState Phiên bản 1.0.0-alpha05

Ngày 18 tháng 9 năm 2019

Phát hành androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05. Phiên bản 1.0.0-alpha05 bao gồm các thay đổi sau.

Thay đổi về API

  • SavedStateViewModelFactory không còn mở rộng AbstractSavedStateViewModelFactorySavedStateHandle chỉ được tạo cho các ViewModel đã yêu cầu (aosp/1113593)

ViewModel-SavedState Phiên bản 1.0.0-alpha03

Ngày 7 tháng 8 năm 2019

Phát hành androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Thay đổi có thể gây lỗi

  • lifecycle-viewmodel-savedstate không còn phụ thuộc vào fragment, đồng thời các hàm khởi tạo SavedStateViewModelFactory(Fragment)SavedStateViewModelFactory(FragmentActivity) liên quan đã bị xoá. Thay vào đó, SavedStateViewModelFactory nay là trạng thái ban đầu của Activity 1.1.0-alpha02, Fragment 1.2.0-alpha02Navigation 2.2.0-alpha01. (b/135716331)

ViewModel-SavedState Phiên bản 1.0.0-alpha02

Ngày 2 tháng 7 năm 2019

Phát hành androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Thêm quá tải (overload) SavedStateHandle.getLiveData() chấp nhận một giá trị mặc định.

Thay đổi API

  • Đổi tên SavedStateVMFactory thành SavedStateViewModelFactory.
  • Đổi tên AbstractSavedStateVMFactory thành AbstractSavedStateViewModelFactory.

ViewModel-Savedstate Phiên bản 1.0.0-alpha01

Ngày 13 tháng 3 năm 2019

Phát hành androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01. Bạn có thể xem toàn bộ nhật ký thay đổi trong bản phát hành ban đầu này tại đây.

Tính năng mới

  • Bây giờ, ViewModels có thể đóng góp vào savedstate. Để làm điều đó, hãy sử dụng giá trị SavedStateVMFactory mới của nhà máy của viewmodel và ViewModel phải có một hàm khởi tạo nhận đối tượng SavedStateHandle dưới dạng tham số.

Phiên bản 2.1.0

Thay đổi quan trọng kể từ phiên bản 2.0.0

  • Thêm LifecycleEventObserver cho các trường hợp cần có luồng sự kiện trong vòng đời. Đây là một API công khai thay vì một lớp GenericLifecycleObserver ẩn.
  • Thêm tiện ích ktx cho các phương thức LiveData.observe và phương thức Transformations.*.
  • Thêm Transformations.distinctUntilChanged để tạo một đối tượng LiveData mới không phát ra giá trị cho đến khi giá trị nguồn LiveData được thay đổi.
  • Thêm tuỳ chọn hỗ trợ coroutine trong ViewModel bằng cách thêm thuộc tính tiện ích ViewModel.viewModelScope.

Phiên bản 2.1.0

Ngày 5 tháng 9 năm 2019

Phát hành androidx.lifecycle:lifecycle-*:2.1.0. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Phiên bản 2.1.0-rc01

Ngày 2 tháng 7 năm 2019

androidx.lifecycle:*:2.1.0-rc01 được phát hành mà không có thay đổi nào từ androidx.lifecycle:*:2.1.0-beta01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Phiên bản 2.1.0-beta01

Ngày 7 tháng 5 năm 2019

Phát hành androidx.lifecycle:*:2.1.0-beta01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Vòng đời được chuyển dần sang giai đoạn beta: api được giới thiệu trong các phiên bản alpha trước đó như chức năng mở rộng liveData để chuyển đổi và quan sát, khởi chạy ViewModel với tính năng uỷ quyền, đồng thời các tính năng khác đã ổn định và sẽ không thay đổi.

Phiên bản 2.1.0-alpha04

Ngày 3 tháng 4 năm 2019

Phát hành androidx.lifecycle:*:2.1.0-alpha04. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Thay đổi về API

  • Thay đổi có thể gây lỗi: API cơ sở đằng sau by viewModels()by activityViewModels() đã được thay đổi để hỗ trợ trực tiếp ViewModelStore, thay vì chỉ một ViewModelStoreOwner. (aosp/932932)

Phiên bản 2.1.0-alpha03

Ngày 13 tháng 3 năm 2019

Phát hành androidx.lifecycle:*:2.1.0-alpha03. Bạn có thể xem danh sách đầy đủ các thay đổi trong phiên bản này tại đây.

Thay đổi về API

  • Xoá ViewModelProvider.KeyedFactory. Giao diện thứ hai ngoài ViewModelProvider.Factory không thiết lập tốt bằng các tính năng mới dưới dạng uỷ quyền thuộc tính trong Kotlin by viewmodels {}. (aosp/914133)

Phiên bản 2.1.0-alpha02

Ngày 30 tháng 1 năm 2019

Phát hành androidx.lifecycle 2.1.0-alpha02.

Thay đổi về API

  • LifecycleRegistry nay chứa phương thức setCurrentState() thay thế phương thức setState() hiện không được dùng nữa. (aosp/880715)

Sửa lỗi

  • Khắc phục sự cố thực thể ViewModel mô phỏng sẽ gặp sự cố khi ViewModelStore chứa bị xoá. b/122273087

Phiên bản 2.1.0-alpha01

Ngày 17 tháng 12 năm 2018

Phát hành androidx.lifecycle 2.1.0-alpha01.

Tính năng mới

  • Thêm LifecycleEventObserver cho các trường hợp cần có luồng sự kiện trong vòng đời. Đây là một API công khai thay vì một lớp GenericLifecycleObserver ẩn.
  • Thêm tiện ích ktx cho các phương thức LiveData.observe và phương thức Transformations.*.
  • Thêm phương thức Transformations.distinctUntilChanged. Phương thức này tạo một đối tượng LiveData mới không phát ra giá trị cho đến khi thay đổi giá trị LiveData nguồn.
  • Hỗ trợ Coroutine trong ViewModels: thêm thuộc tính tiện ích ViewModel.viewModelScope.
  • Thêm ViewModelProvider.KeyedFactory, một nhà máy cho ViewModels nhận keyClass trong phương thức create.

Phiên bản 2.0.0

Phiên bản 2.0.0

Ngày 21 tháng 9 năm 2018

Lifecycle 2.0.0 được phát hành kèm theo một nội dung sửa lỗi từ 2.0.0-rc01 trong ViewModel.

Sửa lỗi

  • Khắc phục quy tắc bảo vệ ViewModel đã xoá không chính xác các hàm khởi tạo b/112230489

Phiên bản 2.0.0-beta01

Ngày 2 tháng 7 năm 2018

Sửa lỗi

  • Khắc phục quy tắc bảo vệ LifecycleObserver proguard để chỉ giữ một phương thức triển khai, chứ không phải giao diện phụ b/71389427
  • Khắc phục các quy tắc bảo vệ ViewModel để cho phép làm rối và rút gọn

Phiên bản trước AndroidX

Đối với các phiên bản trước AndroidX của Vòng đời (Lifecycle), hãy thêm các phần phụ thuộc sau:

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"
}

Phiên bản 1.1.1

Ngày 21 tháng 3 năm 2018

Chỉ có một thay đổi nhỏ: chuyển android.arch.core.util.Function từ arch:runtime sang arch:common. Điều này cho phép bạn sử dụng tiện ích này mà không cần phần phụ thuộc thời gian chạy, ví dụ: trong paging:common dưới đây.

lifecycle:common là phần phụ thuộc của lifecycle:runtime, vì vậy sự thay đổi này không ảnh hưởng trực tiếp đến lifecycle:runtime, mà chỉ ảnh hưởng đến các mô-đun phụ thuộc trực tiếp vào lifecycle:common, như trong cấu phần Paging (Phân trang).

Phiên bản 1.1.0

Ngày 22 tháng 1 năm 2018

Thay đổi về cách đóng gói

Hiện đã có các phần phụ thuộc mới nhỏ hơn nhiều:

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

Thay đổi API

  • LifecycleActivityLifecycleFragment không dùng nữa hiện đã bị xoá – vui lòng sử dụng FragmentActivity, AppCompatActivity hoặc hỗ trợ Fragment.
  • Thêm chú thích @NonNull vào ViewModelProvidersViewModelStores
  • Ngừng sử dụng hàm khởi tạo ViewModelProviders – vui lòng sử dụng trực tiếp các phương thức tĩnh
  • ViewModelProviders.DefaultFactory không còn được dùng nữa. Vui lòng sử dụng ViewModelProvider.AndroidViewModelFactory
  • Phương thức ViewModelProvider.AndroidViewModelFactory.getInstance(Application) tĩnh được thêm vào để truy xuất Factory tĩnh thích hợp cho việc tạo các phiên bản ViewModelAndroidViewModel.