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.7.0 2.8.0-rc01 - -
lifecycle-viewmodel-compose 2.7.0 2.8.0-rc01 - -
Lần gần nhất cập nhật thư viện này: ngày 1 tháng 5 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.7.0"
        def arch_version = "2.2.0"

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

Java

Groovy

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

Để 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.8

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

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

  • Cảm ơn Victor Kropp đã cải thiện việc kiểm tra luồng chính trên Máy tính để bàn JVM. (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. Việc 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, phù hợp với khả 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. Việc này sẽ 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, phù hợp với khả năng hỗ trợ đa nền tảng của androidx.compose. Để thích ứng với thay đổi này, phương thức viewModel có thể 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 cảnh báo nhầm. (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.
  • Vòng đời 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à 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 đa nền tảng của Kotlin

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)

Để thích ứng 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> nay có một phương thức tương đương để lấy kotlin.reflect.KClass<T>.

Khả năng tương thích 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 nền tảng 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ỉ dùng đượ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 Kotlin DSL 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 là máy ảo Java sẽ dẫn đến UnsupportedOperationException. Trên các nền tảng JVM, khả năng tương thích được giữ nguyên bằng cách sử dụng hàm khởi tạo ViewModel không đối số nếu không cung cấp nhà máy tuỳ chỉnh.
  • viewModelScope sẽ dự phòng một EmptyCoroutineContext trong 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 tạo viewModelFactory) giờ đây sẽ gửi IllegalArgumentException nếu bạn đã thêm một initializer có cùng clazz: KClass<VM : ViewModel>. (Ic3a36)

Sửa lỗi

  • ViewModel.getCloseable nay xử lý các khoá trùng lặp: nếu key đã liên kết với một tài nguyên AutoCloseable, thì tài nguyên cũ sẽ bị thay thế và đóng ngay lập tức. (Ibeb67)
  • Việc truy cập vào viewModelScope của ViewModel hiện an toàn với chuỗi. (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 vì đã đó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

  • Thêm các API dropUnlessResumeddropUnlessStarted, cho phép bạn bỏ 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ể dùng tính năng này cùng 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ột 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 đa nền tảng của Kotlin

  • Các API Lifecycle 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)

Các thay đổi về API

  • Việc gọi LifecycleStartEffectLifecycleResumeEffect mà không có khoá giờ đây là một lỗi, theo cùng quy ước với API DisposableEffect mà các API này phản chiếu. (Ib0e0c, b/323518079)
  • ViewModel nay sử dụng AutoCloseable thay vì Closeable. Đó là 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 vào đó là LiveData.toPublisher(lifecycleOwner). (Iabe29, b/262623005)

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

  • Cảm ơn Ivan Matkov từ 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 nay 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 đó 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 nay bao gồm một hàm tạm ngưng setCurrentState(). Hàm này đảm bảo việc 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 quay lại. Đáng chú ý, không giống như việc trực tiếp thiết lập thuộc tính currentState, phương thức này không sử dụng runBlocking, nên 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.
  • Phần mở rộng LiveData của mapswitchMap nay phản ánh hành vi của distinctUntilChanged – nếu LiveDatavalue được đặt, hàm map/switchMap sẽ được ngay lập tức gọi để điền sẵ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 cấu trúc đầu tiên (khi được dùng với observeAsState()) nhưng không thay đổi hành vi quan sát. Việc cập nhật các giá trị 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 vấn đề SavedStateHandle không khôi phục đúng cách các lớp Parcelable tuỳ chỉnh sau khi quá trình bị buộc tắt và tạo lại. Do thông tin về loại bị mất trong khung Android, nên các mảng Parcelable tuỳ chỉnh cần phải thực hiện thêm thao tác (tạo một mảng đúng loại theo cách thủ công) và tài liệu về get, getLiveDatagetStateFlow hiện đã nêu cụ thể giới hạn này.
  • Đã xoá các quy tắc lưu giữ Proguard liên kết với LifecycleObserver. Điều này có nghĩa là mã được bảo vệ muốn sử dụng API thông qua hoạt độ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 phải cung cấp các quy tắc lưu giữ riêng cho trường hợp sử dụng cụ thể.

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().
  • Người dùng Jetpack Compose hiện 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ặp sự kiện – lần lượt bắt đầu dừng và tiếp tục thành tạm dừng. API này phản ánh API có trong DisposableEffect và phù hợp với các trường hợp thay đổi được thực hiện khi trạng thái tăng lên cần phải được đảo ngược khi quay trở lại.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

Hãy xem bài viết 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 sẽ trả về 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 State của Compose. Giá trị này tương đương (và là giải pháp thay thế ngắn hơn) với lifecycle.currentStateFlow.collectAsState().

Hãy xem phần Thu thập trạng thái vòng đời với 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 vấn đề trong đó SavedStateHandle không khôi phục đúng cách các lớp Parcelable tuỳ chỉnh sau khi quá trình bị buộc tắt và tạo lại. Do thông tin về loại bị mất trong khung Android, nên các mảng Parcelable tuỳ chỉnh cần phải thực hiện thêm thao tác (tạo một mảng đúng loại theo cách thủ công) và tài liệu về get, getLiveDatagetStateFlow hiện đã nêu 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 huỷ bỏ và tạo lại khối hiệu ứng đúng cách 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.

  • Phiên bản beta tăng trưởng, 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 nay chứa một lượt 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 coroutine. Giờ đây, quy trình kiểm tra tìm lỗi mã nguồn sẽ đề xuất setCurrentState tạm ngưng cho phép đặt Lifecycle.State mà không chặn. (Icf728, b/297880630)

Sửa lỗi

  • Khắc phục vấn đề xảy ra với LiveData.switchMap, trong đó việc trả về cùng một thực thể LiveData trong cả lệnh gọi ban đầu lẫn lệnh gọi tiếp theo sẽ ngăn không cho thêm thực thể LiveData dưới dạng 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 nay bao gồm hàm tạm ngưng setCurrentState() để cho phép người dùng sử dụng TestLifecycleOwner ngay trong coroutine, chẳng hạn như coroutine do runTest cung cấp. (I329de, b/259344129)

Các thay đổi về API

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

Thay đổi về hành vi

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

Sửa lỗi

  • Từ Lifecycle 2.6.2: Khắc phục sự cố SavedStateHandle không được khôi phục chính xác sau khi trạng thái bị buộc tắt 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.

Các thay đổi về API

  • Lifecycle.State hiện có thể quan sát được bằng Compose qua Lifecycle.currentStateFlow, trả về StateFlow trong đó valueLifecycle.State hiện tại. (Ib212d, b/209684871)
  • Giờ đây, bạn có thể quan sát thấy Lifecycle.Event dưới dạng Flow bằng Lifecycle.asFlow(). (If2c0f, b/176311030)
  • Thêm API LifecycleResumeEffect để chạy các 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 các 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 các SideEffect Compose dựa trên Lifecycle.Event. (Ic9794, b/235529345)
  • Tiện ích Lifecycle.collectAsState() đã được thêm vào để hiển thị trực tiếp Lifecycle.State dưới dạng State Compose. Giá trị này tương đương (và là giải pháp thay thế 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)
  • Đã xoá các quy tắc lưu giữ Proguard liên kết với LifecycleObserver. Điều này có nghĩa là mã được bảo vệ muốn sử dụng API thông qua phản chiếu sẽ cần phải cung cấp các quy tắc lưu giữ 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 để biết lý do vốn đã không an toàn cho công việc này.
  • Chuyển đổi Kotlin – Một số lượng lớn các lớp Vòng đời (Lifecycle) đã được chuyển đổi sang Kotlin. Tất cả các lớp đã chuyển đổi vẫn giữ 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 có thay đổi về không tương thích với nguồn đối với 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.

Vòng đời 2.5 Lifecycle 2.5 (KTX) Vòng đời 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 nay 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 có thể chứa giá trị rỗng, bạn phải tạo thực thể cho Observer với loại có thể có giá trị 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.

Các thay đổi về 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)

Các thay đổi về 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

Phát hành androidx.lifecycle:lifecycle-*:2.5.0-alpha05. 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)

Các thay đổi về 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.

Các thay đổi về 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)

Các thay đổi về 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.

Các thay đổi về 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.

Các thay đổi về 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.

Các thay đổi về 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.

Các thay đổi về 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.

Các thay đổi về 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.

Các thay đổi về 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.

Các thay đổi về 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

Các thay đổi về 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.