Vòng đời
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.4 | - | - | 2.9.0-alpha01 |
lifecycle-viewmodel-compose | 2.8.4 | - | - | 2.9.0-alpha01 |
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.4" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.4" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Java
Groovy
dependencies { def lifecycle_version = "2.8.4" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.4" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Để 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.
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.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
LiveData.asFlow()
nay 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ênLiveData
(ví dụ: khi sử dụngtake(1)
). (I9c566)- Quá trình hoàn thành
Lifecycle*Effect
hiện không thay đổi (tức là nếuonStopOrDispose
được gọi do Vòng đời bị dừng, thì vòng đời này sẽ không được gọi lần thứ hai khi xử lý, trừ phi Vòng đời quay lạiSTARTED
lần nữa). (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ở xuống. 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 có cách giải quyết nào. (aosp/3105647, b/336842920) ViewModelProvider
sẽ không còn gặp sự cố khi kết hợp các phiên bản trước của phần phụ thuộc Vòng đờicompileOnly
với các phiên bản 2.8 trở lên, khắc phục vấn đề liên quan đến 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 phổ biến trêncompose-runtime
, xoá phần phụ thuộc chung của nó trêncompose-ui
. Cấu phần phần mềm Android giữ lạicompose-ui
để tương thích. (aosp/3079334, b/339562627)- Giờ đây, quá trình tích hợp
saveable
củaViewModel
bằng cách sử dụng uỷ quyền thuộc tính sẽ sử dụng tên lớp như một phần của khoá được tạo tự động, giúp tránh xung đột nếu nhiều lớp sử dụng cùng mộtSavedStateHandle
. (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 di chuyển từ giao diện người dùng Compose sanglifecycle-runtime-compose
để bạn 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 APIdropUnlessResumed
vàdropUnlessStarted
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 khiLifecycleOwner
giảm xuống dưới mứcLifecycle.State
đã cho. Ví dụ: bạn có thể dùng tính năng này với Navigation Compose (Thành phần điều hướng 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) }
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ụngbackgroundScope
có sẵn trongrunTest
. (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ụngAutoClosable
thay vìCloseable
. Giờ đây, bạn có thể thêm các đối tượngAutoCloseable
bằngkey
cho phép truy xuất các đối tượng đó quagetCloseable()
.Việc gọi
LifecycleStartEffect
vàLifecycleResumeEffect
mà không có khoá hiện là lỗi, tuân theo quy ước tương tự như APIDisposableEffect
mà các API này phản chiếu.Ngừng sử dụng
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
và thay bằngLiveData.toPublisher(lifecycleOwner)
.Các phần mở rộng Kotlin của
lifecycle-livedata-core-ktx
hiện đã được chuyển sang mô-đunlifecycle-livedata-core
.NullSafeMutableLiveData
đã được tái cấu trúc để tránh nhiều cảnh báo nhầm.
Khả năng tương thích với đa nền tảng trong vòng đời Kotlin
Các API Lifecycle chính trong Lifecycle
, LifecycleOwner
, LifecycleObserver
, Lifecycle.State
, Lifecycle.Event
và LifecycleRegistry
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ấu phần phần mềm bị ảnh hưởng:
lifecycle-common
chuyển hầu hết các API sangcommon
, đồng thời hỗ trợ jvm và iOS ngoài Android.lifecycle-runtime
chuyển hầu hết các API sangcommon
, đồng thời hỗ trợ jvm và iOS ngoài Android.lifecycle-runtime-ktx
hiện đang trống và tất cả API đã được chuyển vàolifecycle-runtime
.lifecycle-runtime-compose
di chuyển tất cả API sangcommon
và gửi 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ủaandroidx.compose
.
Khả năng tương thích đa nền tảng của ViewModel Kotlin
Cấu phần phần mềm lifecycle-viewmodel
và các API như ViewModel
, ViewModelStore
, ViewModelStoreOwner
và ViewModelProvider
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
sử dụng 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 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 nền tảng API Android với nền tảng API chung:
- 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ứcViewModelProvider.create()
thay vì gọi trực tiếp hàm khởi tạo của thực thể đó. ViewModelProvider.NewInstanceFactory
vàViewModelProvider.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ứccreate
để lấyCreationExtras
hoặc sử dụng Kotlin DSLviewModelFactory
.
- Bạn nên mở rộng Nhà máy tuỳ chỉnh từ
- 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à JVM sẽ dẫn đếnUnsupportedOperationException
. 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 nhà máy tuỳ chỉnh không được cung cấp. viewModelScope
sẽ dự phòng choEmptyCoroutineContext
trong các nền tảng không cóDispatchers.Main
(ví dụ: Linux).
Cấu phần phần mềm bị ảnh hưởng:
lifecycle-viewmodel
chuyển hầu hết các API sangcommon
, đồng thời hỗ trợ jvm và iOS ngoài Android.lifecycle-viewmodel-ktx
hiện đang trống và tất cả API đã được chuyển vàolifecycle-viewmodel
.lifecycle-viewmodel-compose
di chuyển tất cả API sangcommon
và gửi 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ủaandroidx.compose
.
Thay đổi về hành vi
- Giờ đây,
InitializerViewModelFactory
(bao gồm cả hàm tạoviewModelFactory
) sẽ gửi mộtIllegalArgumentException
nếu mộtinitializer
có cùngclazz: KClass<VM : ViewModel>
đã được thêm vào. (Ic3a36)
Lỗi đã biết
lifecycle-*:2.8.0
yêu cầu phiên bản Compose tối thiểu là 1.7.0-alpha05 (b/336842920).
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 lượt chuyển đổi này hiện đã được đóng gói trong AARlifecycle-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ới 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
đối với môi trường Máy tính gốc và 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 chuỗi 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
nay tương thích với Kotlin Multiplatform, di chuyển mã của nó sangcommon
và gửi 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 choandroidx.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
nay tương thích với Kotlin Multiplatform, chuyển mã sangcommon
và gửi 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ủaandroidx.compose
. Để thích ứng với thay đổi này, phương thứcviewModel
thành phần kết hợp hiện chấp nhậnKClass
ngoàijava.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ụngbackgroundScope
có sẵn trongrunTest
. (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
, ViewModelStoreOwner
và ViewModelProvider
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
sử dụng 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 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 nền tảng API Android với nền tảng API chung:
- 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ứcViewModelProvider.create()
thay vì gọi trực tiếp hàm khởi tạo của thực thể đó. ViewModelProvider.NewInstanceFactory
vàViewModelProvider.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ứccreate
để lấyCreationExtras
hoặc sử dụng Kotlin DSLviewModelFactory
.
- Bạn nên mở rộng Nhà máy tuỳ chỉnh từ
- 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à JVM sẽ dẫn đếnUnsupportedOperationException
. 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 nhà máy tuỳ chỉnh không được cung cấp. viewModelScope
sẽ dự phòng choEmptyCoroutineContext
trong các nền tảng không cóDispatchers.Main
(ví dụ: Linux).
Thay đổi về hành vi
- Giờ đây,
InitializerViewModelFactory
(bao gồm cả hàm tạoviewModelFactory
) sẽ gửi mộtIllegalArgumentException
nếu mộtinitializer
có cùngclazz: KClass<VM : ViewModel>
đã được thêm vào. (Ic3a36)
Sửa lỗi
ViewModel.getCloseable
nay xử lý các khoá trùng lặp: nếukey
đã liên kết với một tài nguyênAutoCloseable
thì tài nguyên cũ sẽ bị thay thế và đóng ngay lập tức. (Ibeb67)- Hiện tại, hoạt động truy cập vào
viewModelScope
củaViewModel
sẽ an toàn cho 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 vòng đời-thời gian chạy-compose để bạn 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
- API
dropUnlessResumed
vàdropUnlessStarted
đã được thêm vào để 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 khiLifecycleOwner
giảm xuống dướiLifecycle.State
đã cho. Ví dụ: bạn có thể sử dụng tính năng này với Navigation Compose (Thành phần điều hướng 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 chính trong
Lifecycle
,LifecycleOwner
,LifecycleObserver
,Lifecycle.State
,Lifecycle.Event
vàLifecycleRegistry
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
- Việc gọi
LifecycleStartEffect
vàLifecycleResumeEffect
mà không có khoá hiện là lỗi, tuân theo quy ước tương tự như APIDisposableEffect
mà các API này phản chiếu. (Ib0e0c, b/323518079) ViewModel
hiện sử dụngAutoCloseable
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ằngLiveData.toPublisher(lifecycleOwner)
. (Iabe29, b/262623005)
Đóng góp bên ngoài
- Cảm ơn Ivan Matkov thuộc Jetbrains đã giúp di 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ượngCloseable
bằngkey
cho phép truy xuất các đối tượng đó quagetCloseable()
. (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ưngsetCurrentState()
để đảm bảo việc thay đổi trạng thái và tất cả các lệnh gọi lạiLifecycleObserver
đều hoàn tất trước khi quay lại. Đáng chú ý là không giống như việc thiết lập trực tiếp thuộc tínhcurrentState
, thuộc tính này không sử dụngrunBlocking
, giúp bạn sử dụng an toàn trong coroutine, chẳng hạn như coroutine dorunTest
cung cấp.- Giờ đây, các phần mở rộng
LiveData
củamap
vàswitchMap
phản ánh hành vi củadistinctUntilChanged
– nếuLiveData
có tập hợpvalue
, thì hàmmap
/switchMap
sẽ được gọi ngay lập tức để điền vàovalue
củaLiveData
được trả về. Điều này đảm bảo rằng giá trị ban đầu sẽ được thiết lập như một phần của cấu trúc đầu tiên (khi được dùng vớiobserveAsState()
) nhưng không thay đổi hành vi quan sát – việc cập nhật các giá trị từ nguồnLiveData
sẽ vẫn chỉ áp dụng sau khi bạn bắt đầu quan sátLiveData
. - 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ớpParcelable
tuỳ chỉnh sau khi quá trình bị buộc tắt và tái tạo. Do thông tin về kiểu bị khung Android làm mất, các mảng của Parcelable tuỳ chỉnh cần phải thực hiện thêm thao tác (tạo mảng đã nhập đúng kiểu theo cách thủ công) và tài liệu trênget
,getLiveData
vàgetStateFlow
nay gọi riêng giới hạn này. - Đã xoá các quy tắc lưu giữ Proguard liên kết với
LifecycleObserver
. Tức là mã được bảo vệ muốn sử dụng API thông qua cơ chế 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ẽ 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átFlow
củaLifecycle.Event
thông qua phương thức mở rộngLifecycle.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ênLifecycle.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
LifecycleStartEffect
vàLifecycleResumeEffect
để xử lý các cặp sự kiện – lần lượt bắt đầu dừng và tiếp tục để tạm dừng. API này phản ánh API có trongDisposableEffect
và phù hợp với trường hợp thay đổi được thực hiện khi trạng thái tăng lên cần đảo ngược khi quay 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
- Bạn hiện có thể quan sát
Lifecycle.State
hiện tại thông qua thuộc tínhLifecycle.currentStateFlow
. Thuộc tính này trả vềStateFlow
trong đóvalue
làLifecycle.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ếpLifecycle.State
dưới dạngState
Compose. Mã này tương đương (và là một giải pháp thay thế ngắn hơn) vớilifecycle.currentStateFlow.collectAsState()
.
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 đề
SavedStateHandle
không khôi phục đúng cách các lớpParcelable
tuỳ chỉnh sau khi quá trình bị buộc tắt và tái tạo. Do thông tin về kiểu bị khung Android làm mất, các mảng của Parcelable tuỳ chỉnh cần phải thực hiện thêm thao tác (tạo mảng đã nhập đúng kiểu theo cách thủ công) và tài liệu trênget
,getLiveData
vàgetStateFlow
nay gọi riêng 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
- Giờ đây,
LifecycleStartEffect
vàLifecycleResumeEffect
sẽ loại bỏ đúng cách và tạo lại khối hiệu ứng nếuLifecycleOwner
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 thử nghiệm tăng lên, 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 quy trình kiểm tra tìm lỗi mã nguồn mới để tránh việc thiết lậpLifecycle.State
củaTestLifecycleOwner
bằng cách sử dụng trườngcurrentState
khi ở bên trong coroutine. Giờ đây, quy trình kiểm tra tìm lỗi mã nguồn sẽ đề xuất việc tạm ngưngsetCurrentState
, cho phép đặtLifecycle.State
mà không cần 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
cả trong 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
nay bao gồm hàm tạm ngưngsetCurrentState()
để cho phép người dùng sử dụngTestLifecycleOwner
ngay trong coroutine, chẳng hạn như hàm dorunTest
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 sang mô-đunlifecycle-livedata
chính. (I10c6f, b/274800183)
Thay đổi về hành vi
- Giờ đây, các tiện ích
LiveData.map()
vàLiveData.switchMap()
sẽ đặtvalue
củaLiveData
được trả về nếuLiveData
trước đó đã có một giá trị được thiết lập, đả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 với cấu trúc ban đầu. (I91d2b, b/269479952) - Giờ đây,
addCloseable()
củaViewModel
sẽ đóngCloseable
ngay lập tức nếuViewModel
đã nhận được lệnh gọi đếnonCleared()
. (I4712e, b/280294730)
Sửa lỗi
- Từ Lifecycle
2.6.2
: Khắc phục vấn đềSavedStateHandle
không được khôi phục chính xác sau 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 trongSavedStateRegistry
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ữarememberSaveable
vàNavHost
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 quaLifecycle.currentStateFlow
, trả vềStateFlow
trong đóvalue
làLifecycle.State
hiện tại. (Ib212d, b/209684871)- Bạn hiện có thể quan sát
Lifecycle.Event
dưới dạngFlow
bằngLifecycle.asFlow().
(If2c0f, b/176311030) - Thêm API
LifecycleResumeEffect
để chạy cácSideEffect
Compose dựa trên cả lệnh gọi lại sự kiệnLifecycle.Event.ON_RESUME
vàLifecycle.Event.ON_PAUSE
. (I60386, b/235529345) - Thêm API
LifecycleStartEffect
để chạy cácSideEffect
Compose dựa trên lệnh gọi lại sự kiệnLifecycle.Event.ON_START
vàLifecycle.Event.ON_STOP
. (I5a8d1, b/235529345) - Thêm API
LifecycleEventEffect
để chạy các ComposeSideEffect
dựa trênLifecycle.Event
. (Ic9794, b/235529345) - Tiện ích
Lifecycle.collectAsState()
đã được thêm để hiển thị trực tiếpLifecycle.State
dưới dạngState
Compose. Mã này tương đương (và là một giải pháp thay thế ngắn hơn) vớilifecycle.currentStateFlow.collectAsState()
. (I11015, b/235529345)
Sửa lỗi
- Tiện ích
LiveData.distinctUntilChanged()
hiện đặtvalue
củaLiveData
được trả về nếuLiveData
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ồnLiveData
sẽ vẫn chỉ áp dụng sau khi bạn bắt đầu quan sátLiveData
được trả về từdistinctUntilChanged()
. (Ib482f) - Đã xoá các quy tắc lưu giữ Proguard liên kết với
LifecycleObserver
. Tức là mã được bảo vệ muốn sử dụng API thông qua tính năng phản chiếu sẽ phải cung cấp 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 trongSavedStateRegistry
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ữarememberSaveable
vàNavHost
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
lifecycle-viewmodel-savedstate
hiện phụ thuộc vào SavedState1.2.1
. (cd7251)- Vòng đời hiện phụ thuộc vào ProfileInstaller
1.3.0
. (f9d30b)
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ínhisInitialized
mới cho biết đã có giá trị rõ ràng được đặt trênLiveData
hay chưa, nhờ đó giúp bạn phân biệt giữa các trường hợpliveData.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
StateFlow
vàFlow
củacollectAsStateWithLifecycle()
thu thập từ các luồng và thể hiện giá trị mới nhất của trạng thái này dưới dạng Trạng thái Compose theo cách nhận biết vòng đời. - Phương thức
Lifecycle.launchWhenX
và phương thứcLifecycle.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ùngLifecycle.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 về lý do khiến công việc này vốn đã không an toàn. - Chuyển đổi Kotlin – Một số lượng lớn các lớp Lifecycle đã được chuyển đổi sang Kotlin. Tất cả các lớp đã chuyển đổi vẫn giữ nguyên 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ó những thay đổi không tương thích với nguồn đối với những lớp được viết bằng Kotlin:
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
Bảng dưới đây 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ủaObserver
đượ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ốnObserver.onChanged()
chấp nhận một loại rỗng, bạn phải tạo thực thể choObserver
bằng một 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
,ServiceLifecycleDispatcher
vàProcessLifecycleOwner
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 đặtvalue
củaLiveData
được trả về nếuLiveData
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ồnLiveData
sẽ vẫn chỉ áp dụng sau khi bạn bắt đầu quan sátLiveData
đượ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ínhlifecycle
thay vì triển khai hàmgetLifecycle()
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ínhviewModelStore
thay vì triển khai hàmgetViewModelStore()
trước. (I86409, b/240298691)- Phần mở rộng Kotlin trong
LifecycleOwner
cung cấp trườnglifecycleScope
đã được chuyển sang cấu phần phần mềmlifecycle-common
từlifecycle-runtime-ktx
. (I41d78, b/240298691) - Phần mở rộng Kotlin trong
Lifecycle
cung cấp trườngcoroutineScope
đã được chuyển sang cấu phần phần mềmlifecycle-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ứcandroidx.arch.core.util.Function
mà thay thế bằng phiên bản dùngFunction1
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ênView
củaandroidx.lifecycle.setViewTreeViewModelStoreOwner
vàandroidx.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ínhdefaultViewModelProviderFactory
vàdefaultViewModelCreationExtras
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ứconChanged()
của mẫu này hiện dùngvalue
tên cho tham số. (Iffef2, I4995e, b/240298691) - Giờ đây,
AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
vàProcessLifecycleOwner
đượ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ínhisInitialized
mới cho biết đã có giá trị rõ ràng được đặt trênLiveData
hay chưa, nhờ đó giúp bạn phân biệt giữa các trường hợpliveData.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ủalifecycle-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ứcLifecycle.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ùngLifecycle.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ênView
củaandroidx.lifecycle.setViewTreeLifecycleOwner
vàandroidx.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 đó tronglifecycle-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 tronglifecycle-reactivestreams-ktx
đã được chuyển sang mô-đunlifecycle-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
,LifecycleObserver
vàViewModelStore
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ỗiClassCastException
khi gọiget()
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ạocallbackFlow
thay vì sử dụng phương thức triển khai riêngChannel
để đả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ủaFlowLiveData
giờ đây sẽ giữ nguyên giá trị ban đầu củaStateFlow
khi tạo đối tượngLiveData
mới. (I3f530, b/157380488) - Trong Lifecycle
2.5.1
: Phương thức triển khai tuỳ chỉnh củaAndroidViewModelFactory
giờ đây sẽ gọi đúng hàmcreate(modelClass)
khi sử dụng hàm khởi tạo có trạng thái vớiLifecycle
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
StateFlow
vàFlow
củacollectAsStateWithLifecycle
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ộtLifecycle.State
nhất định. Khi vòng đời giảm xuống dướiLifecycle.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àmcreate(modelClass)
khi sử dụng hàm khởi tạoAndroidViewModelFactory
có trạng thái vớiLifecycle
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 APIgetStateFlow()
trả về mộtStateFlow
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ụngLiveData
.ViewModel CreationExtras – khi viết
ViewModelProvider.Factory
tuỳ chỉnh, bạn không còn cần mở rộngAndroidViewModelFactory
hoặcAbstractSavedStateViewModelFactory
để có quyền truy cập vàoApplication
hoặcSavedStateHandle
tương ứng. Thay vào đó, các trường này được cung cấp cho mọi lớp conViewModelProvider.Factory
dưới dạngCreationExtras
thông qua tình trạng quá tải mới củacreate
: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 động1.5.0
và Mảnh1.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 DSLviewModelFactory
cho phép bạn xác địnhViewModelProvider.Factory
theo một hoặc nhiều trình khởi tạo lambda, mỗi trình chạy một lớpViewModel
mà nhà máy tuỳ chỉnh của bạn hỗ trợ, sử dụngCreationExtras
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 APIviewModel()
lấy nhà máy lambda để tạo thực thểViewModel
mà không cần tạoViewModelProvider.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 trongSavedStateHandle.saveable
cho phéprememberSaveable
như hành vi được hỗ trợ bởiSavedStateHandle
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ượngCloseable
vàoViewModel
sẽ bị đóng khiViewModel
bị xoá mà không cần thực hiện thao tác thủ công nào trongonCleared()
.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 khaiCloseable
: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
sangDESTROYED
giờ đây sẽ luôn gửi mộtIllegalStateException
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áiDESTROYED
.
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ộtNullPointerException
khi chuyển một nguồnnull
thay vì lan truyền nguồnnull
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àoSavedStateHandle
(I8bb86, b/225014345)
Sửa lỗi
- Đã khắc phục vấn đề lồng một
NavHost
vào mộtNavHost
khác trong thẻ điều hướng phụ ở dưới cùng sẽ dẫn đếnIllegalStateException
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àoSavedStateHandle.saveable
cho tương đương vớirememberSaveable
(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
doSavedStateHandleController
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ấpSavedStateHandleSaver
, một API thử nghiệm đảm bảo các giá trị trongSavedStateHandle
đượ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ụngCreationExtras
ngay cả khi được khởi tạo bằngSavedStateRegistryOwner
. 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 APIgetStateFlow()
trả về mộtStateFlow
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ụngLiveData
. (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ượngCloseable
vàoViewModel
sẽ bị đóng khiViewModel
bị xoá mà không cần thực hiện thao tác thủ công nào trongonCleared()
. (I55ea0) lifecycle-viewmodel
nay cung cấp mộtInitializerViewModelFactory
cho phép bạn thêm lambda để xử lý các lớpViewModel
cụ thể, sử dụngCreationExtras
làm nguồn dữ liệu chính. (If58fc, b/216687549)lifecycle-viewmodel-compose
nay cung cấp một APIviewModel()
lấy nhà máy lambda để tạo thực thểViewModel
mà không cần tạoViewModelProvider.Factory
tuỳ chỉnh. (I97fbb, b/216688927)
Thay đổi API
- Giờ đây, bạn có thể tạo
ViewModel
vớiCreationExtras
thông qualifecycle-viewmodel-compose
. (I08887, b/216688927)
Thay đổi về hành vi
- Việc cố gắng di chuyển
Lifecycle.State
từINITIALIZED
sangDESTROYED
giờ đây sẽ luôn cho ra mộtIllegalStateException
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áiDESTROYED
. (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
SavedStateHandle
vàSavedStateViewModelFactory
đã đượ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ậtlifecycle-process
để dựa vào Startup 1.1.1 nhằm đảm bảo nội dung sửa đổi ngănProcessLifecycleInitializer
đưa raStartupException
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ạoViewModel
. (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ụngAndroidViewModelFactory
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 SavedStateViewModelFactory
và AbstractSavedStateViewModelFactory
, 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ớiViewModelProvider.get()
.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
cung cấp quyền truy cập vào lớpApplication
.SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
cung cấp quyền truy cập vàoSavedStateRegistryOwner
đang được dùng để tạo ViewModel này.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
cung cấp quyền truy cập vàoViewModelStoreOwner
đang được dùng để tạo ViewModel này.SavedStateHandleSupport.DEFAULT_ARGS_KEY
cung cấp quyền truy cập vàoBundle
của các đối số nên được dùng để xây dựngSavedStateHandle
.
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-alpha01
và Navigation 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()
và 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ỏiSavedStateHandle
. 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ộtSavedStateHandle
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ỏiSavedStateHandle
. 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ụngProcessLifecycleInitializer
sẽ gây raStartupException
. (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ùngLifecycleEventObserver
hoặcDefaultLifecycleObserver
. - 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ợpviewModel()
vàLocalViewModelStoreOwner
.- Thay đổi ngắt nguồn:
ViewModelProvider
đã được viết lại trong Kotlin. Phương thứcViewModelProvider.Factory.create
đã ngừng chấp nhận giá trị chung rỗng.
- Thay đổi ngắt nguồn:
- 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
sanglifecycle.lifecycle-common
.lifecycle.lifecycle-common-java8
không cung cấp thêm chức năng nào ngoàilifecycle.lifecycle-common
, vì vậy bạn có thể thay thế phần phụ thuộc bằnglifecycle.lifecycle-common
. - API không phải coroutine từ
lifecycle-viewmodel-ktx
đã được chuyển đến mô-đunlifecycle-viewmodel
. lifecycle-process
nay sử dụngandroidx.startup
để khởi chạyProcessLifecycleOwner
.Trước đây, việc này do
androidx.lifecycle.ProcessLifecycleOwnerInitializer
thực hiện.Nếu đã sử dụng
tools:node="remove"
trênContentProvider
đ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ùngLifecycleEventObserver
hoặcDefaultLifecycleObserver
. (I5a8fa) - Di chuyển DefaultLifecycleObserver từ
androidx.lifecycle.lifecycle-common-java8
sangandroidx.lifecycle.lifecycle-common
.androidx.lifecycle.lifecycle-common-java8
không cung cấp thêm chức năng nào ngoàiandroidx.lifecycle.lifecycle-common
, vì vậy bạn có thể thay thế phần phụ thuộc bằngandroidx.lifecycle.lifecycle-common
. (I021aa) - Chuyển API không phải coroutine từ
lifecycle-viewmodel-ktx
sang mô-đunlifecycle-viewmodel
. (I6d5b2)
Đóng góp bên ngoài
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àolifecycle-runtime-ktx
, giúp phát hiện khi sử dụng sairepeateOnLifecycle
trongonStart()
hoặconResume()
. (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ácandroidx.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ụngandroidx.startup
để khởi chạyProcessLifecycleOwner
.Trước đây, việc này do
androidx.lifecycle.ProcessLifecycleOwnerInitializer
thực hiện.Nếu đã sử dụng
tools:node="remove"
trênContentProvider
đ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 APILifecycle.repeatOnLifecycle
. Đây là phiên bản thay thế cho APILifecycleOwner.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ộtViewModelStoreOwner
không bắt buộc, giúp làm việc với các chủ sở hữu không phảiLocalViewModelStoreOwner
dễ dàng hơn. Ví dụ: giờ đây bạn có thể sử dụngviewModel(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-compose
vàandroidx.navigation:navigation-compose
đồng bộ hoá các phần phụ thuộc trênandroidx.compose.compiler:compiler:1.0.0-beta04
vàandroidx.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ộtViewModelStoreOwner
rỗng để xác định xemViewModelStoreOwner
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()
vàNavHost
, vẫn sẽ có ngoại lệ nếu bạn không đặtViewModelStoreOwner
. (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àmprovides
mà bạn có thể dùng vớiCompositionLocalProvider
, thay thế APIasProvidableCompositionLocal()
. (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()
vàLocalViewModelStoreOwner
đã được di chuyển từandroidx.compose.ui.viewinterop
sang cấu phần phần mềm này trong góiandroidx.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ọisetSavedStateProvider()
cho một khoá nhất định, cung cấp mộtSavedStateProvider
sẽ nhận lệnh gọi lạisaveState()
khiSavedStateHandle
đượ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ượngLifecycleRegistry
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ùngLifecycleRegistry.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 khiLifecycleRegistry
này được truy cập qua luồng (thread) khác.
- LifecycleRegistry giờ đây thực thi
- 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àoLifecycle.Event
để tạoEvent
khi cóState
và hướng chuyển đổi. Thêm phương thứcgetTargetState()
cung cấpState
mà Lifecycle hoạt động sẽ chuyển đổi trực tiếp theoEvent
. withStateAtLeast
: Thêm các APILifecycle.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ứcwhen*
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
: APIViewTreeLifecycleOwner.get(View)
vàViewTreeViewModelStoreOwner.get(View)
mới cho phép bạn truy xuấtLifecycleOwner
vàViewModelStoreOwner
chứa tương ứng, khi có một thực thểView
. Bạn phải nâng cấp lên Activity1.2.0
và Fragment1.3.0
và AppCompat 1.3.0-alpha01 trở lên để thông tin được điền sẵn chính xác. Tiện ích Kotlin củafindViewTreeLifecycleOwner
vàfindViewTreeViewModelStoreOwner
lần lượt có sẵn tronglifecycle-runtime-ktx
vàlifecycle-viewmodel-ktx
. - Ngừng cung cấp tiện ích Kotlin
LiveData.observe()
: Tiện ích KotlinLiveData.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ủaSavedStateHandle
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ớisetSavedStateProvider()
ngoài các khoá dùng vớiset()
vàgetLiveData()
. (aosp/1517919, b/174713653)
Đóng góp bên ngoài
- Các API dùng để tạm ngưng các coroutine nhận biết được vòng đời hiện xử lý các lệnh gọi tới
yield()
hiệu quả hơn. Cảm ơn Nicklas Ansman Giertz! (aosp/1430830, b/168777346)
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
- Nâng cấp androidx để sử dụng Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Thay đổi về tài liệu
- Trình tạo
liveData
và tài liệuasLiveData()
đã đượ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àoLifecycle.Event
để tạoEvent
khi có mộtState
và hướng chuyển đổi. Thêm phương thứcgetTargetState()
cung cấpState
mà Lifecycle hoạt động sẽ chuyển đổi trực tiếp theoEvent
. (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ứcwhen*
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ượngLifecycleRegistry
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ụngLifecycleRegistry.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 khiLifecycleRegistry
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èmlifecycle-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 đếnonActive()
hoặconInactive()
. (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ênMutableLiveData
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ọisetSavedStateProvider()
cho một khoá nhất định. Lệnh này cung cấp mộtSavedStateProvider
để gọi lạisaveState()
khiSavedStateHandle
đượ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ấtViewModelStoreOwner
chứa khi có một thực thểView
. Bạn cần nâng cấp lên Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
và AppCompat1.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 KotlinfindViewModelStoreOwner()
vàolifecycle-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 Lifecycle2.3.0-alpha01
không phát hành được cùng với cấu phần phần mềmlifecycle-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ộtApplication
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ấtLifecycleOwner
chứa khi có một thực thểView
. Bạn phải nâng cấp lên Activity1.2.0-alpha01
và Fragment1.3.0-alpha01
để thông tin được điền sẵn chính xác. Tiện ích KotlinfindViewTreeLifecycleOwner
có sẵn tronglifecycle-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ênMutableLiveData
đã đượ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ềmlivedata-core-ktx
hoặclivedata-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ộtTestLifecycleOwner
triển khaiLifecycleOwner
và cung cấp mộtLifecycle
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ềnFragment
hoặcFragmentActivity
tới hàm khởi tạoViewModelProvider(ViewModelStoreOwner)
mới để sử dụng cùng một chức năng khi sử dụng Mảnh1.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ụngViewModelProviders.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 tronglifecycle-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ụngLifecycleService
vàlifecycle-process
nếu đang sử dụngProcessLifecycleOwner
) thay vìlifecycle-extensions
vì sau này sẽ không còn bản phát hành2.3.0
cholifecycle-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ụngLifecycleEventObserver
.
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ữ trongViewModelStore
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
tronglaunchWhenCreated
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ụngDispatchers.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ự
ProcessLifecycleOwner
vàLifecycleOwner
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 raNullPointerException
khi sử dụng phiên bản2.0.0
hoặc2.1.0
củalifecycle-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ủaliveData
nay sử dụngDispatchers.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
- Giờ đây, việc triển khai
ViewModelStoreOwner
có thể tuỳ chọn triển khaiHasDefaultViewModelProviderFactory
để cung cấpViewModelProvider.Factory
mặc định. Chúng tôi đã thực hiện việc này cho Activity1.1.0-alpha02
, Fragment1.2.0-alpha02
và Navigation2.2.0-alpha01
. (aosp/1092370, b/135716331)
Thay đổi về API
- Ngừng sử dụng
ViewModelProviders.of()
. Bạn có thể truyềnFragment
hoặcFragmentActivity
tới hàm khởi tạoViewModelProvider(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ằngLiveDataScope.latestValue
, giúp theo dõi giá trị phát ra hiện tại của khốiliveData
. - Thêm quá tải (overload) mới vào trình tạo
liveData
nhận được tham sốtimeout
dưới dạngDuration
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ớpViewModel
và nhà máy do các mảnh cung cấp theo mặc định. AppCompatActivity sẽ tự động chènSavedStateHandle
. - 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àoSavedStateHandle
.
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 đếnIllegalStateException
. (b/139093676) - Khắc phục
IllegalStateException
khi sử dụngAbstractSavedStateViewModelFactory
. (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ộngAbstractSavedStateViewModelFactory
vàSavedStateHandle
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àofragment
, đồng thời các hàm khởi tạoSavedStateViewModelFactory(Fragment)
vàSavedStateViewModelFactory(FragmentActivity)
liên quan đã bị xoá. Thay vào đó,SavedStateViewModelFactory
nay là trạng thái ban đầu của Activity1.1.0-alpha02
, Fragment1.2.0-alpha02
và Navigation2.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ànhSavedStateViewModelFactory
. - Đổi tên
AbstractSavedStateVMFactory
thànhAbstractSavedStateViewModelFactory
.
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ượngSavedStateHandle
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ớpGenericLifecycleObserver
ẩn. - Thêm tiện ích ktx cho các phương thức
LiveData.observe
và phương thứcTransformations.*
. - 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ồnLiveData
đượ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ạyViewModel
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()
vàby activityViewModels()
đã được thay đổi để hỗ trợ trực tiếpViewModelStore
, thay vì chỉ mộtViewModelStoreOwner
. (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àiViewModelProvider.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 Kotlinby 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ứcsetCurrentState()
thay thế phương thứcsetState()
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ố khiViewModelStore
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ớpGenericLifecycleObserver
ẩn. - Thêm tiện ích ktx cho các phương thức
LiveData.observe
và phương thứcTransformations.*
. - Thêm phương thức
Transformations.distinctUntilChanged
. Phương thức này tạo một đối tượngLiveData
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ậnkey
vàClass
trong phương thứccreate
.
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
LifecycleActivity
vàLifecycleFragment
không dùng nữa hiện đã bị xoá – vui lòng sử dụngFragmentActivity
,AppCompatActivity
hoặc hỗ trợFragment
.- Thêm chú thích
@NonNull
vàoViewModelProviders
vàViewModelStores
- 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ụngViewModelProvider.AndroidViewModelFactory
- Phương thức
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
tĩnh được thêm vào để truy xuấtFactory
tĩnh thích hợp cho việc tạo các phiên bảnViewModel
vàAndroidViewModel
.