Thời gian chạy Compose
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(Xem tài liệu tham khảo về API cho tất cả các gói Compose)
Cập nhật mới nhất | 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 |
---|---|---|---|---|
Ngày 7 tháng 8 năm 2024 | 1.6.8 | - | 1.7.0-beta07 | - |
Cấu trúc
Compose là sự kết hợp của 7 mã nhận dạng Nhóm Maven (Maven Group Id) trong androidx
. Mỗi Nhóm chứa một tập con chức năng mục tiêu và mỗi tập con có một tập hợp ghi chú phát hành riêng.
Bảng này giải thích các nhóm và đưa ra đường liên kết đến từng tập hợp ghi chú phát hành.
Nhóm | Mô tả |
---|---|
compose.animation | Tạo ảnh động trong các ứng dụng Jetpack Compose để làm phong phú trải nghiệm người dùng. |
compose.compiler | Biến đổi các hàm @Composable và hỗ trợ hoạt động tối ưu hoá bằng trình biên dịch bổ trợ Kotlin. |
compose.foundation | Viết ứng dụng Jetpack Compose bằng các khối dựng có sẵn, cũng như mở rộng nền tảng để xây dựng các thành phần của hệ thống thiết kế của riêng bạn. |
compose.material | Xây dựng các giao diện người dùng Jetpack Compose bằng các thành phần Material Design có sẵn. Đây là điểm truy cập cấp cao hơn của Compose, được thiết kế nhằm cung cấp các thành phần theo như mô tả trên trang web www.material.io. |
compose.material3 | Xây dựng giao diện người dùng Jetpack Compose bằng các thành phần Material Design 3, phiên bản cải tiến tiếp theo của Material Design. Material 3 có khả năng tuỳ chỉnh giao diện cập nhật, cũng như các thành phần và tính năng cá nhân hoá Material You, chẳng hạn như màu động. Công cụ này được thiết kế để phù hợp với phong cách đồ hoạ và giao diện người dùng hệ thống mới trên Android 12. |
compose.runtime | Các khối dựng cơ bản cho mô hình lập trình và tính năng quản lý trạng thái của Compose, đồng thời là thời gian chạy cốt lõi để trình biên dịch bổ trợ Compose nhắm đến. |
compose.ui | Các thành phần cơ bản của giao diện người dùng Compose cần thiết để tương tác với thiết bị, bao gồm cả bố cục, bản vẽ và phương thức nhập. |
Khai báo phần phụ thuộc
Để thêm một phần phụ thuộc trên Compose, bạn phải thêm kho lưu trữ Maven của Google 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:
Groovy
dependencies { implementation "androidx.compose.runtime:runtime:1.6.8" implementation "androidx.compose.runtime:runtime-livedata:1.6.8" implementation "androidx.compose.runtime:runtime-rxjava2:1.6.8" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.6.8") implementation("androidx.compose.runtime:runtime-livedata:1.6.8") implementation("androidx.compose.runtime:runtime-rxjava2:1.6.8") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Để biết thêm thông tin về các phần phụ thuộc, hãy xem bài viết Thêm phần phụ thuộc vào 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.
Công cụ Runtime Tracing (theo dõi thời gian chạy) phiên bản 1.0
Phiên bản 1.0.0-beta01
Ngày 29 tháng 11 năm 2023
Phát hành androidx.compose.runtime:runtime-tracing:1.0.0-beta01
. Phiên bản 1.0.0-beta01 bao gồm các thay đổi sau.
Phiên bản 1.0.0-alpha05
Ngày 15 tháng 11 năm 2023
Phát hành androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
. Phiên bản 1.0.0-alpha05 bao gồm các thay đổi sau.
Sửa lỗi
- Đã ghim các phần phụ thuộc vào các phiên bản ổn định thấp nhất được hỗ trợ (ví dụ: compose-runtime và trace-perfetto) – khắc phục sự cố trong đó tính năng compose-runtime-tracing sẽ đưa phiên bản compose-runtime mới vào ứng dụng.
Phiên bản 1.0.0-alpha04
Ngày 23 tháng 8 năm 2023
Phát hành androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
. Phiên bản 1.0.0-alpha04 bao gồm các thay đổi sau.
Tính năng mới
- Tương thích với các phiên bản mới nhất của tính năng Đo điểm chuẩn và Theo dõi Perfetto, cho phép hỗ trợ tính năng Theo dõi thành phần khi khởi động ứng dụng (khởi động nguội), ví dụ: trong AndroidX Benchmark và Android Studio (kể từ Hedgehog Beta 2).
Thay đổi về API
- Đổi tên
androidx.tracing.perfetto.Trace
thànhandroidx.tracing.perfetto.PerfettoSdkTrace
. (I44af8) - Đảm bảo các API SDK Perfetto theo dõi nhất quán với
android.os.Trace
. (I73ba0, b/282199917) - Điều kiện tiên quyết để theo dõi khi khởi động ứng dụng. (Iad890)
- Các tệp API thử nghiệm và công khai được hợp nhất (I0f2e1, b/278769092)
Phiên bản 1.0.0-alpha02
Ngày 8 tháng 2 năm 2023
Phát hành androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
. Phiên bản 1.0.0-alpha02 bao gồm những thay đổi sau.
Tính năng mới
- Không có thay đổi về chức năng. Nhiều điểm tối ưu hoá hiệu suất trong phần phụ thuộc
androidx.tracing:tracing-perfetto*
ở hạ nguồn.
Phiên bản 1.0.0-alpha01
Ngày 7 tháng 9 năm 2022
Phát hành androidx.compose.runtime:runtime-tracing: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
androidx.compose.runtime:runtime-tracing
là một thư viện, trong đó có cung cấp dịch vụ hỗ trợ về công cụ (sắp ra mắt), giúp theo dõi ở phạm vi rộng trong ứng dụng Compose. Bản phát hành đầu tiên này là phiên bản 1.0.0-alpha01.
Phiên bản 1.7
Phiên bản 1.7.0-beta07
Ngày 7 tháng 8 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-beta07
. Phiên bản 1.7.0-beta07 bao gồm các thay đổi sau.
Phiên bản 1.7.0-beta06
Ngày 24 tháng 7 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-beta06
. Phiên bản 1.7.0-beta06 bao gồm các thay đổi sau.
Phiên bản 1.7.0-beta05
Ngày 10 tháng 7 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-beta05
. Phiên bản 1.7.0-beta05 bao gồm các thay đổi sau.
Phiên bản 1.7.0-beta04
Ngày 26 tháng 6 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-beta04
. Phiên bản 1.7.0-beta04 bao gồm các thay đổi sau.
Phiên bản 1.7.0-beta03
Ngày 12 tháng 6 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-beta03
. Phiên bản 1.7.0-beta03 bao gồm các thay đổi sau.
Phiên bản 1.7.0-beta02
Ngày 29 tháng 5 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-beta02
. Phiên bản 1.7.0-beta02 bao gồm các thay đổi sau.
Phiên bản 1.7.0-beta01
Ngày 14 tháng 5 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-beta01
. Phiên bản 1.7.0-beta01 bao gồm các thay đổi sau.
Phiên bản 1.7.0-alpha08
Ngày 1 tháng 5 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-alpha08
. Phiên bản 1.7.0-alpha08 bao gồm các thay đổi sau.
Phiên bản 1.7.0-alpha07
Ngày 17 tháng 4 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-alpha07
. Phiên bản 1.7.0-alpha07 bao gồm các thay đổi sau.
Tính năng mới
- Thêm khả năng cung cấp thành phần kết hợp cục bộ được tính toán dựa trên giá trị của thành phần kết hợp cục bộ khác theo mặc định, sử dụng
compositionLocalWithComputedDefault()
hoặc cung cấp hàm lambda để tính toán giá trị bằng cách sử dụngprovidesComputed
thay vìprovides
. - Bạn có thể lấy giá trị của thành phần kết hợp cục bộ bằng cách sử dụng thuộc tính
currentValue
của thành phần kết hợp cục bộ có thể truy cập được từ trong hàm lambda tính giá trị. Hàm này được dùng thay chocurrent
(chỉ có thể truy cập trong các hàm@Composable
). (Iadbc0)
Thay đổi về API
- Bạn có thể truy cập ngay các đối tượng trạng thái mới tạo qua các bản tổng quan nhanh khác (bao gồm cả ảnh chụp nhanh toàn cục) với trạng thái ban đầu. Mọi nội dung sửa đổi tiếp theo sẽ không hiển thị cho đến khi áp dụng ảnh chụp nhanh mà đối tượng được tạo.
- Trạng thái ban đầu của
mutableStateOf()
cũng như các phiên bản gốc của chúng là giá trị được truyền dưới dạng tham số vàomutableStateOf()
. Trạng thái ban đầu củamutableStateListOf()
vàmutableStateMapOf()
là trống. - Thêm
Snapshot.isInSnapshot
vàSnapshot.PreexistingSnapshotId
dùng để cho phép đối tượng trạng thái hỗ trợ truy cập ngay lập tức từ ảnh chụp nhanh chung khi tạo. - Đối tượng trạng thái tuỳ chỉnh có thể hỗ trợ việc truy cập ngay lập tức bằng cách tuân theo mẫu thay đổi được thực hiện đối với đối tượng tổng quan nhanh tích hợp sẵn. (I84a17)
Sửa lỗi
- Khắc phục việc hợp nhất
readObserver
trong các ảnh chụp nhanh lồng nhau. Điều này khiến các trạng thái dẫn xuất lồng nhau bị vô hiệu hoá kém khi được sử dụng trongsnapshotFlow
. (Idf138)
Phiên bản 1.7.0-alpha06
Ngày 3 tháng 4 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-alpha06
. Phiên bản 1.7.0-alpha06 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục việc cung cấp các giá trị đơn lẻ xử lý
providesDefault
(538f45) - Tránh tình trạng tắc nghẽn trong Trình kết hợp lại khi truy cập vào đồng hồ khung (07e5c6)
Phiên bản 1.7.0-alpha05
Ngày 20 tháng 3 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-alpha05
. Phiên bản 1.7.0-alpha05 bao gồm các thay đổi sau.
Sửa lỗi
- Xoá những thay đổi muộn đối với cấu trúc đã huỷ kích hoạt (5950bc)
Phiên bản 1.7.0-alpha04
Ngày 6 tháng 3 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-alpha04
. Phiên bản 1.7.0-alpha04 bao gồm các thay đổi sau.
Cải thiện hiệu suất
- Gọi
Snapshot.current
một lần cho mỗi lần đánh giá trạng thái phát sinh (ee7daf) - Đọc
currentRecord
một lần cho mỗi lần quan sát trong cấu trúc (b882b2) - Xoá quy trình phân bổ biến lặp không chủ ý trong
snapshotFlow
(231e56) - Bật
nonSkippingGroupOptimization
cho các thư viện Compose. Điều này khiến mã được tạo cho tất cả hàm có khả năng kết hợp không khởi động lại trong androidx trở nên hiệu quả hơn. Trong tương lai, chúng tôi dự định bật tính năng này theo mặc định. Tôi(acbc08)
Phiên bản 1.7.0-alpha03
Ngày 21 tháng 2 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-alpha03
. Phiên bản 1.7.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
- Ra mắt một nhóm thay thế để cải thiện khả năng phát hiện các thay đổi (0941b5)
Cải thiện hiệu suất
- Cải thiện quá trình phân bổ bộ nhớ khi phát hiện các thay đổi (53e7fd)
- Khắc phục sự cố rò rỉ bộ nhớ trong trình soạn thảo (0e097d)
- Sử dụng
ScopeMap
để chuyển các trường hợp không hợp lệ khi kết hợp lại (e19a7e) - Tối ưu hoá bản đồ không hợp lệ để chỉ giữ lại các trạng thái phát sinh (f11c44)
- Thay thế các trường hợp sử dụng
IdentityArraySet
bằngScatterSet
(db572e) - Tối ưu hoá
removeScope
trongScopeMap
(bb0530)
Phiên bản 1.7.0-alpha02
Ngày 7 tháng 2 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-alpha02
. Phiên bản 1.7.0-alpha02 bao gồm các thay đổi sau.
Sửa lỗi
- Vô hiệu hoá các biểu thức lambda của thành phần kết hợp trong các lần kết hợp phụ trên cùng một khung. (98301c)
- Gọi lệnh gọi lại
onRelease
theo cùng thứ tự nhưonForgotten
. (2cd790) - Bộ lọc đã thay đổi trạng thái không được ghi nhận trong
snapshotFlow
. (796b80)
Cải thiện hiệu suất
- Sửa đổi trình quan sát ảnh chụp nhanh tại chỗ khi ảnh đã trong suốt. (f60f30)
- Tối ưu hoá
SnapshotIdSet.lowest()
. (7ae149) - Sử dụng
fold()
không phân bổ trongSnapshotIdSet
. (532b7d) - Xoá quy trình phân bổ biến lặp (83f96b)
Phiên bản 1.7.0-alpha01
Ngày 24 tháng 1 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.7.0-alpha01
. Phiên bản 1.7.0-alpha01 bao gồm các thay đổi sau.
Tối ưu hoá hiệu suất
- Thêm khả năng tạo ô sau khi thêm một nhóm con (b5960c)
- Tối ưu hoá việc sửa đổi bản ghi trạng thái tổng quan nhanh (28c3fe)
- Bật chế độ bỏ qua mạnh (ed1766)
Sửa lỗi
- Tính đến meta tham số mặc định trong bộ nhớ hàm nội tại (096665)
- Đặt
currentCompoundHashKey
thành duy nhất trong nhiều trường hợp hơn (d4a872) - Nhận dạng nhóm khi thoát khỏi lệnh gọi hàm cùng dòng (2a90fc)
Phiên bản 1.6
Phiên bản 1.6.8
Ngày 12 tháng 6 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.6.8
. Phiên bản 1.6.8 bao gồm các thay đổi sau.
Phiên bản 1.6.7
Ngày 1 tháng 5 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.6.7
. Phiên bản 1.6.7 bao gồm các thay đổi sau.
Phiên bản 1.6.6
Ngày 17 tháng 4 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.6.6
. Không có thay đổi nào kể từ bản phát hành gần đây nhất.
Phiên bản 1.6.5
Ngày 3 tháng 4 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.6.5
. Phiên bản 1.6.5 bao gồm các thay đổi sau.
Phiên bản 1.6.4
Ngày 20 tháng 3 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.6.4
. Phiên bản 1.6.4 bao gồm các thay đổi sau.
Phiên bản 1.6.3
Ngày 6 tháng 3 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.6.3
. Phiên bản 1.6.3 bao gồm các thay đổi sau.
Phiên bản 1.6.2
Ngày 21 tháng 2 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.6.2
. Phiên bản 1.6.2 bao gồm các thay đổi sau.
Phiên bản 1.6.1
Ngày 7 tháng 2 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.6.1
. Phiên bản 1.6.1 bao gồm các thay đổi sau.
Sửa lỗi
- Gọi lệnh gọi lại
onRelease
theo cùng thứ tự nhưonForgotten
. (2cd790) - Bộ lọc đã thay đổi trạng thái không được ghi nhận trong
snapshotFlow
. (796b80)
Phiên bản 1.6.0
Ngày 24 tháng 1 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.6.0
. Phiên bản 1.6.0 bao gồm các thay đổi sau.
Các thay đổi quan trọng kể từ phiên bản 1.5.0
Tính năng mới
- Gửi lại các ngoại lệ được chấp nhận trong vòng lặp kết hợp lại (4dff9a)
Tối ưu hoá hiệu suất
- Tối ưu hoá việc sửa đổi bản ghi trạng thái tổng quan nhanh (28c3fe)
- Tối ưu hoá
rememberSaveable
(f01d79) - Hoãn đọc lại các trạng thái phát sinh cho đến khi các thay đổi được ghi lại (f38099)
- Cải thiện việc cung cấp giá trị cục bộ của thành phần (a337ea)
Sửa lỗi
- Khắc phục sự cố rò rỉ bộ nhớ bảng vị trí (73fcfe)
- Bỏ qua việc kết hợp lại các lần kết hợp phụ sẽ bị xoá. (Ieeb99, b/254645321)
- Chỉ kích hoạt vòng đời
RememberObserver
khi vòng đời được lưu trữ trong phép tính ghi nhớ. (f6b4dc) - Hạn chế chụp
$dirty
đối với các hàm lambda cùng dòng. (acfca0) - Sửa lỗi nội dung có thể di chuyển đôi khi nhận được thành phần kết hợp cục bộ không chính xác. (035cd6)
Phiên bản 1.6.0-rc01
Ngày 10 tháng 1 năm 2024
Phát hành androidx.compose.runtime:runtime-*:1.6.0-rc01
. Phiên bản 1.6.0-rc01 bao gồm các thay đổi sau.
Phiên bản 1.6.0-beta03
Ngày 13 tháng 12 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-beta03
. Phiên bản 1.6.0-beta03 bao gồm các thay đổi sau.
Phiên bản 1.6.0-beta02
Ngày 29 tháng 11 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-beta02
. Phiên bản 1.6.0-beta02 bao gồm các thay đổi sau.
Phiên bản 1.6.0-beta01
Ngày 15 tháng 11 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-beta01
. Phiên bản 1.6.0-beta01 bao gồm các thay đổi sau.
Thay đổi về API
- Áp dụng các giá trị ổn định nhất định trong chú thích. (274a4c)
Sửa lỗi
- Sử dụng chính sách tham chiếu cho trạng thái phạm vi cục bộ của cấu trúc trong ngữ cảnh. (83361c)
- Hạn chế chụp $dirty đối với các hàm lambda cùng dòng. (acfca0)
- Sửa lỗi nội dung có thể di chuyển đôi khi nhận được thành phần kết hợp cục bộ không chính xác. (035cd6)
- Sử dụng hàm băm không phân bổ nhanh hơn trong
RecomposeScopeImpl
. (d79494) - Sử dụng
ObjectIntMap
trongDerivedState
. (21862e) - Sử dụng
IntRef
cho số nguyênSnapshotThreadLocal
trongDerivedState
. (04eaf4)
Phiên bản 1.6.0-alpha08
Ngày 18 tháng 10 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-alpha08
. Phiên bản 1.6.0-alpha08 bao gồm các thay đổi sau.
Sửa lỗi
- Chỉ kích hoạt vòng đời
RememberObserver
khi vòng đời được lưu trữ trong phép tính ghi nhớ. (f6b4dc) - Cải thiện mức phân bổ trong việc sắp xếp danh sách không hợp lệ. (954d63)
- Sử dụng bản đồ mới không phân bổ trong
SnapshotStateObserver
. (4303ce) - Xoá giá trị không hợp lệ khi cấu trúc bị huỷ kích hoạt. (e001be)
Phiên bản 1.6.0-alpha07
Ngày 4 tháng 10 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-alpha07
. Phiên bản 1.6.0-alpha07 bao gồm các thay đổi sau.
Thay đổi về API
SnapshotStateList
hiện được đánh dấu làRandomAccess
để cho phép sử dụng phiên bản lập chỉ mục trực tiếp của trình trợ giúp danh sách. (I5210c, b/219554654)
Phiên bản 1.6.0-alpha06
Ngày 20 tháng 9 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-alpha06
. Phiên bản 1.6.0-alpha06 bao gồm các thay đổi sau.
Phiên bản 1.6.0-alpha05
Ngày 6 tháng 9 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-alpha05
. Phiên bản 1.6.0-alpha05 bao gồm các thay đổi sau.
Phiên bản 1.6.0-alpha04
Ngày 23 tháng 8 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-alpha04
. Phiên bản 1.6.0-alpha04 bao gồm các thay đổi sau.
Tính năng mới
- Gửi lại các ngoại lệ được chấp nhận trong vòng lặp kết hợp lại (4dff9a)
Thay đổi về API
- Thêm phương thức để vô hiệu hoá
ReusableComposition
, xoá quan sát nhưng vẫn giữ nguyên các nút. Bạn có thể kích hoạt lại cấu trúc đã huỷ kích hoạt bằng cách gọisetContent
. (Ib7f31) - Thêm giao diện
ReusableComposition
để quản lý vòng đời và sử dụng lại các lần kết hợp phụ. (I812d1, b/252846775)
Phiên bản 1.6.0-alpha03
Ngày 9 tháng 8 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-alpha03
. Phiên bản 1.6.0-alpha03 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục lỗi tối ưu hoá
CompositionLocalProvider
mới (3118e88) - Sửa cách tháo rời các nút nội dung có thể di chuyển. (5e3d59b)
Phiên bản 1.6.0-alpha02
Ngày 26 tháng 7 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-alpha02
. Phiên bản 1.6.0-alpha02 bao gồm các thay đổi sau.
Tính năng mới và Các tính năng nâng cao về hiệu suất
- Tối ưu hoá
rememberSaveable
(f01d79) - Hoãn đọc lại các trạng thái phát sinh cho đến khi các thay đổi được ghi lại (f38099)
- Cải thiện việc cung cấp giá trị cục bộ của thành phần (a337ea)
SideEffect
được đánh dấu là@ExplicitGroupsComposable
để tránh tạo nhóm. (I74815)- Tránh so sánh bản đồ cục bộ của thành phần khi sử dụng lại (782071)
Thay đổi về API
- Thêm phương thức nạp chồng trường hợp đặc biệt cho
CompositionLocalProviders
nhằm tránh hao tổn tài nguyên được dùng để cung cấp nhiều giá trị nhanh hơn nhưng lại gây hao tổn khi cung cấp một giá trị duy nhất. (I6d640, b/288169379)
Sửa lỗi
- Khắc phục sự cố rò rỉ bộ nhớ bảng vị trí (73fcfe)
- Sửa cách chúng tôi khôi phục
rememberSaveable
khistateSaver
trả về giá trị rỗng (90748c)
Phiên bản 1.6.0-alpha01
Ngày 21 tháng 6 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.6.0-alpha01
. Phiên bản 1.6.0-alpha01 bao gồm các thay đổi sau.
Sửa lỗi
- Bỏ qua việc kết hợp lại các lần kết hợp phụ sẽ bị xoá. (Ieeb99, b/254645321)
- Giảm mức phân bổ khi áp dụng bản tổng quan nhanh. (I65c09)
- Tránh tính toán
readableHash
trongDerivedState
nếu ảnh chụp nhanh không được sửa đổi (68c565)
Phiên bản 1.5
Phiên bản 1.5.4
Ngày 18 tháng 10 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.4
. Phiên bản 1.5.4 bao gồm các thay đổi sau.
Phiên bản 1.5.3
Ngày 4 tháng 10 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.3
. Phiên bản 1.5.3 bao gồm các thay đổi sau.
Phiên bản 1.5.2
Ngày 27 tháng 9 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.2
. Phiên bản 1.5.2 bao gồm các thay đổi sau.
Phiên bản 1.5.1
Ngày 6 tháng 9 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.1
. Phiên bản 1.5.1 bao gồm các thay đổi sau.
Phiên bản 1.5.0
Ngày 9 tháng 8 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.0
. Phiên bản 1.5.0 bao gồm các thay đổi sau.
Thay đổi về API
- Xoá các cơ cấu phân bổ trong thành phần kết hợp lại, ảnh động màu và
AndroidComposeView
. (Ib2bfa) - Thêm chú giải
@StateFactoryMarker
để đánh dấu các hàm tạo trạng thái và phải được gói trong lệnh gọiremember
. (I64550) - Thêm các phiên bản gốc của Trạng thái và
MutableState
(fb3d89) - Thêm
Snapshot.isApplyObserverNotificationPending
(I672a5) - Thêm các phiên bản gốc của API
State
, cho phép theo dõi các giá trị Int, Long, Float và Double trong đối tượngState
mà không phát sinh hình phạt khi hộp tự động phát. Hãy sử dụng các phương thức ban đầu mớimutableIntState(Int)
,mutableFloatStateOf(Float)
, v.v. để sử dụng các phương thức này. (I48e43)
Sửa lỗi
- Bỏ qua việc kết hợp lại các lần kết hợp phụ sẽ bị xoá. (Ieeb99, b/254645321)
- Không giữ lại tệp tham chiếu ảnh chụp nhanh trong
ComposerImpl
(0206f7) - Không áp dụng thành phần hai lần (f5791b)
- Đảm bảo vô hiệu hoá các giá trị trạng thái phát sinh không được khởi tạo (aa2a92)
- Gọi
onEndChanges
trong khi loại bỏ thành phần. (62cc8c) - Khắc phục việc chuyển nội dung vào một thành phần phụ (4beb41)
- Khắc phục các tắc nghẽn có thể xảy ra (c1a425 và 8edce0)
- Giờ đây, trình kết hợp lại được tạo cho một cửa sổ Android sẽ chỉ chặn các lệnh gọi đến
withFrameNanos
thay vì toàn bộ quá trình kết hợp khi nhận được thông báo ON_STOP. Tức là các cửa sổ liên kết với các hoạt động bị dừng sẽ tiếp tục kết hợp lại khi có thay đổi về dữ liệu nhưng ảnh động hoặc bất kỳ phương thức gọi nào khác củawithFrameNanos
sẽ chặn. (Id9e7f, b/240975572) - Thực thi các lệnh gọi lại huỷ kích hoạt cho
LayoutNode
trước khi loại bỏ hiệu ứng 3784073 - Khắc phục cờ đã thay đổi cho hàm lambda được khởi động lại ea81df9
- Khắc phục hồi quy chỉnh sửa trực tiếp cho Thành phần kết hợp bằng các nút 73fd4d8
- ON_STOP sẽ tạm dừng truyền phát đồng hồ khung hình thay vì kết hợp ae276f1
- Vô hiệu hoá phạm vi
SnapshotStateObserver
cho các trạng thái phái sinh không thay đổi 84d9b1c - Khắc phục tình trạng tắc nghẽn tiềm ẩn khi loại bỏ cấu trúc 28761fc
- Khắc phục việc di chuyển nội dung vào thành phần phụ 92d4156
- Khắc phục cờ đã thay đổi cho lambda được khởi động lại (8a03e9)
- Thực thi các lệnh gọi lại huỷ kích hoạt cho
LayoutNode
trước khi loại bỏ các hiệu ứng (8b0fa4) - Sửa
endToMarker()
khi kết thúc các nhóm nút. (d71d980) - Sử dụng nhóm
SlotWriter
hiện tại để kiểm tra việc huỷ kích hoạt (a0b518b) - Xoá
fill
trongSlotTable.moveSlotGapTo()
rồi di chuyển nó để đóng (81f9935) - Khắc phục trường hợp không hợp lệ bị thiếu khi nội dung có thể di chuyển đang di chuyển (1d7c024)
- Khắc phục tình trạng mất hiệu lực ngay lập tức cho nội dung có thể di chuyển đã được di chuyển (8676618)
Cải thiện hiệu suất
- Tránh tính toán
readableHash
trongDerivedState
nếu ảnh chụp nhanh không được sửa đổi. (307102) - Giảm mức phân bổ (I65c09, d7ea77, 727974 và 445808 )
- Huỷ nhanh thao tác soạn thư
CoroutineScopes
(a55362 và bd382f) - Ghi đè bản ghi của đối tượng trạng thái bằng bản ghi trạng thái không thể truy cập (c986960)
- Sử dụng trình soạn thảo ở đúng phạm vi khi nhận ra các nhóm (9a5e5b6)
- Sử dụng
IdentityArraySet
để lưu trữ các ảnh chụp nhanh không hợp lệ (7f60cca) - Giảm mức phân bổ cho các hoạt động quan sát tổng quan nhanh (5bc535f)
Phiên bản 1.5.0-rc01
Ngày 26 tháng 7 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.0-rc01
. Phiên bản 1.5.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
Hoãn đọc lại các trạng thái phát sinh cho đến khi các thay đổi được ghi lại (f38099)
Bạn có thể kiểm tra dữ liệu gốc (không bắt buộc) để đề xuất di chuyển lệnh gọi
mutableStateOf()
sang kiểu chuyên biệt tương ứng. Mã tìm lỗi mã nguồn của lớp này làAutoboxingStateCreation
. Trước đây, tính năng kiểm tra này được bật theo mặc định cho tất cả dự án. Để xem cảnh báo này trong trình chỉnh sửa của Android Studio và kết quả tìm lỗi mã nguồn của dự án, hãy thay đổi mức độ nghiêm trọng của cảnh báo từ thông tin thành cảnh báo (hoặc cao hơn) bằng cách khai báowarning "AutoboxingStateCreation"
bên trong cấu hình build.gradle hoặc build.gradle.kts của mô-đun như minh hoạ (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
Phiên bản 1.5.0-beta03
Ngày 28 tháng 6 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.0-beta03
. Phiên bản 1.5.0-beta03 bao gồm các thay đổi sau.
Sửa lỗi
- Bỏ qua việc kết hợp lại các lần kết hợp phụ sẽ bị xoá. (Ieeb99, b/254645321)
Phiên bản 1.5.0-beta02
Ngày 7 tháng 6 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.0-beta02
. Phiên bản 1.5.0-beta02 bao gồm các thay đổi sau.
Cải thiện hiệu suất
- Tránh tính toán
readableHash
trongDerivedState
nếu ảnh chụp nhanh không được sửa đổi. (307102)
Phiên bản 1.5.0-beta01
Ngày 24 tháng 5 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.0-beta01
. Phiên bản beta 1.5.0 bao gồm các thay đổi sau.
Thay đổi về API
- Xoá các cơ cấu phân bổ trong quá trình kết hợp lại, ảnh động màu và
AndroidComposeView
(Ib2bfa) - Thêm chú giải
@StateFactoryMarker
để đánh dấu các hàm tạo trạng thái và phải được gói trong lệnh gọiremember
. (I64550) - Thêm các phiên bản gốc của Trạng thái và
MutableState
(fb3d89) - Thêm
Snapshot.isApplyObserverNotificationPending
(I672a5)
Sửa lỗi
- Giảm mức phân bổ (I65c09, d7ea77, 727974 và 445808 )
- Không giữ lại tệp tham chiếu ảnh chụp nhanh trong
ComposerImpl
(0206f7) - Huỷ nhanh thao tác soạn thư
CoroutineScopes
(a55362 và bd382f) - Không áp dụng thành phần hai lần (f5791b)
- Đảm bảo vô hiệu hoá các giá trị trạng thái phát sinh không được khởi tạo (aa2a92)
- Gọi
onEndChanges
trong khi loại bỏ thành phần. (62cc8c) - Khắc phục việc chuyển nội dung vào một thành phần phụ (4beb41)
- Khắc phục các tắc nghẽn có thể xảy ra (c1a425
- ON_STOP nên tạm dừng truyền phát đồng hồ khung hình thay vì kết hợp (f4a2d1)
- Khắc phục cờ đã thay đổi cho lambda được khởi động lại (8a03e9)
- Thực thi các lệnh gọi lại huỷ kích hoạt cho
LayoutNode
trước khi loại bỏ các hiệu ứng (8b0fa4)
Đóng góp bên ngoài
- Thêm
Snapshot.isApplyObserverNotificationPending
(I672a5)
Phiên bản 1.5.0-alpha04
Ngày 10 tháng 5 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.0-alpha04
. Phiên bản 1.5.0-alpha04 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm các phiên bản gốc của API
State
, cho phép theo dõi các giá trị Int, Long, Float và Double trong đối tượngState
mà không phát sinh hình phạt khi hộp tự động phát. Hãy sử dụng các phương thức ban đầu mớimutableIntState(Int)
,mutableFloatStateOf(Float)
, v.v. để sử dụng các phương thức này. (I48e43)
Sửa lỗi
Gọi
onEndChanges
trong khi loại bỏ thành phần. Các nút tiêu điểm bị xoá trongComposition.dispose
đang đăng kýonEndChanges
để đặt lại tiêu điểm.(03d4a47)Đảm bảo vô hiệu hoá đối với các giá trị trạng thái phát sinh không được khởi tạo. Mỗi trạng thái phát sinh được liên kết với một danh sách các phần phụ thuộc tương ứng trong
SnapshotStateObserver
, dùng để vô hiệu hoá các phạm vi liên kết với trạng thái phát sinh bất cứ khi nào phần phụ thuộc thay đổi. Thay đổi về phần phụ thuộc được đăng ký khi tiến hành tổng quan nhanh, có thể xảy ra sau khi trạng thái phái sinh được đọc (do lệnh gọi đếnSnapshot.notifyObjectsInitialized()
).Logic quan sát trạng thái phát sinh trước đó trong
SnapshotStateObserver
đang dọn dẹp các phần phụ thuộc cũ, sau đó đọc giá trị mới. Điều này dẫn đến một tình huống tương tranh có trường hợp vô hiệu hoá xảy ra ở trạng thái đã dọn dẹp, trong đó việc vô hiệu hoá phần phụ thuộc không được đăng ký.Thay đổi này sẽ sắp xếp lại việc đọc trạng thái phát sinh và dọn dẹp phần phụ thuộc, đảm bảo rằng việc vô hiệu hoá luôn xảy ra ở trạng thái hợp lệ. (c472be6)
Phiên bản 1.5.0-alpha03
Ngày 19 tháng 4 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.0-alpha03
. Phiên bản 1.5.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
- Giờ đây, trình kết hợp lại được tạo cho một cửa sổ Android sẽ chỉ chặn các lệnh gọi đến
withFrameNanos
thay vì toàn bộ quá trình kết hợp khi nhận được thông báo ON_STOP. Tức là các cửa sổ liên kết với các hoạt động bị dừng sẽ tiếp tục kết hợp lại khi có thay đổi về dữ liệu nhưng ảnh động hoặc bất kỳ phương thức gọi nào khác củawithFrameNanos
sẽ chặn. (Id9e7f, b/240975572)
Sửa lỗi
- Khắc phục tình trạng tắc nghẽn tiềm ẩn trong danh sách ảnh chụp nhanh và ánh xạ 5c1a425
- Thực thi các lệnh gọi lại huỷ kích hoạt cho
LayoutNode
trước khi loại bỏ hiệu ứng 3784073 - Khắc phục cờ đã thay đổi cho hàm lambda được khởi động lại ea81df9
- Khắc phục hồi quy chỉnh sửa trực tiếp cho Thành phần kết hợp bằng các nút 73fd4d8
- ON_STOP sẽ tạm dừng truyền phát đồng hồ khung hình thay vì kết hợp ae276f1
- Vô hiệu hoá phạm vi
SnapshotStateObserver
cho các trạng thái phái sinh không thay đổi 84d9b1c - Khắc phục tình trạng tắc nghẽn tiềm ẩn khi loại bỏ cấu trúc 28761fc
- Khắc phục việc di chuyển nội dung vào thành phần phụ 92d4156
Phiên bản 1.5.0-alpha02
Ngày 5 tháng 4 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.0-alpha02
. Phiên bản 1.5.0-alpha02 bao gồm các thay đổi sau.
Tính năng mới
- Toán tử
getValue
của Kotlin giờ đây có thể là thành phần kết hợp (f174f6e)
Sửa lỗi, cải thiện hiệu suất
- Ghi đè bản ghi của đối tượng trạng thái bằng bản ghi trạng thái không thể truy cập (c986960)
- Sử dụng trình soạn thảo ở đúng phạm vi khi nhận ra các nhóm (9a5e5b6)
- Sửa
endToMarker()
khi kết thúc các nhóm nút. (d71d980) - Sử dụng nhóm
SlotWriter
hiện tại để kiểm tra việc huỷ kích hoạt (a0b518b) - Sử dụng
IdentityArraySet
để lưu trữ các ảnh chụp nhanh không hợp lệ (7f60cca) - Xoá
fill
trongSlotTable.moveSlotGapTo()
rồi di chuyển nó để đóng (81f9935) - Khắc phục trường hợp không hợp lệ bị thiếu khi nội dung có thể di chuyển đang di chuyển (1d7c024)
- Khắc phục tình trạng mất hiệu lực ngay lập tức cho nội dung có thể di chuyển đã được di chuyển (8676618)
- Giảm mức phân bổ cho các hoạt động quan sát tổng quan nhanh (5bc535f)
Phiên bản 1.5.0-alpha01
Ngày 22 tháng 3 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.5.0-alpha01
. Phiên bản 1.5.0-alpha01 bao gồm các thay đổi sau.
Tính năng mới
- Thêm
Modifier.Node#coroutineScope
để cho phépModifier.Nodes
khởi chạy coroutine (I76ef9) - Cho phép
Modifier.Nodes
đọcCompositionLocals
bằng cách triển khai giao diệnCompositionLocalConsumerModifierNode
. (Ib44df)
Phiên bản 1.4
Phiên bản 1.4.3
Ngày 3 tháng 5 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.4.3
mà không có thay đổi nào.
Phiên bản 1.4.2
Ngày 19 tháng 4 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.4.2
. Phiên bản 1.4.2 bao gồm các thay đổi sau.
Sửa lỗi
Khắc phục tình trạng tắc nghẽn tiềm ẩn trong danh sách ảnh chụp nhanh và ánh xạ 2eb6570
Việc thêm nội dung vào
SnapshotStateList
hoặcSnapshotStateMap
có thể gặp phải tắc nghẽn nếu việc sửa đổi đồng thời với việc ghi trực tiếp vào bản ghi trạng thái. Điều này khiến chúng tôi dễ gặp phải những thay đổi do 93fcae828b đưa ra, trong đó sử dụng tính năng ghi trực tiếp để giải phóng các bản ghi không dùng đến.Các khoá hiện được sắp xếp theo thứ tự là không bao giờ cố gắng thực hiện khoá chụp nhanh khi giữ bản đồ hoặc khoá danh sách.
Phiên bản 1.4.1
Ngày 5 tháng 4 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.4.1
. Phiên bản 1.4.1 bao gồm các thay đổi sau.
Sửa lỗi
- Sửa
endToMarker()
khi kết thúc các nhóm nút. d71d980
Phiên bản 1.4.0
Ngày 22 tháng 3 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.4.0
. Phiên bản 1.4.0 bao gồm các thay đổi sau.
Thay đổi quan trọng kể từ phiên bản 1.3.0
- Sử dụng giá trị khởi tạo từ
LiveData
cho cấu trúc đầu tiên 3680e25 - Thêm
ComposeNodeLifecycleCallback
để quan sát vòng đời của các nút Compose. 8b6a258 - Thêm thuộc tính
parameterTypes
vàoComposableMethod
7b6c7ad
Sửa lỗi và Cải thiện hiệu suất
- Xoá cả hai chỉ mục phạm vi trong
SnapshotStateObserver
29f4a3e - Thêm các nhóm cần thiết vào phần nội dung của hàm lambda không thể bỏ qua 7d06752
- Cải thiện các đặc điểm tham chiếu bộ nhớ của trạng thái Tổng quan nhanh 93fcae8
- Xoá hộp thoại trong bảng tra cứu cục bộ về thành phần kết hợp 0875717
- Sử dụng khoá chính xác cho các nhóm nút không thể sử dụng lại 6388d8d
- Bảo vệ
SnapshotStateObserver
khỏi các lượt áp dụng đệ quy và đồng thời 98cb6ba - Thêm tính năng kiểm tra giới hạn chỉ mục trong
IdentityArraySet
"get" phương thức 35a77d3 - Cập nhật mô-đun Compose để sử dụng tiện ích
ViewTreeLifecycleOwner
21c2122 - Gửi thông báo áp dụng sau khi Trình kết hợp lại hoàn tất khung. 98f2641
- Khắc phục sự cố chỉ mục vượt quá giới hạn khi huỷ Trình kết hợp lại 8f8656f
- Luôn buộc kết hợp lại nếu các trình cung cấp mẹ của Composition đã thay đổi 9526fcc
- Dung sai của trình kết hợp lại đối với các Công việc bị huỷ a55f7ed
- Cải thiện khả năng xử lý các trường hợp không hợp lệ cho nhiều nhà soạn nhạc 9b7ed67
- Khắc phục việc tạo nhóm đóng cho các trường hợp trả về không phải cục bộ b6f590c
Phiên bản 1.4.0-rc01
Ngày 8 tháng 3 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.4.0-rc01
. Phiên bản 1.4.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
Phiên bản 1.4.0-beta02
Ngày 22 tháng 2 năm 2023
Phát hành androidx.compose.runtime:runtime:1.4.0-beta02
và androidx.compose.runtime:runtime-saveable:1.4.0-beta02
. Phiên bản 1.4.0-beta02 bao gồm các thay đổi sau.
Phiên bản 1.4.0-beta01
Ngày 8 tháng 2 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.4.0-beta01
. Phiên bản 1.4.0-beta01 bao gồm các thay đổi sau.
Các thay đổi về API
- Thêm
ComposeNodeLifecycleCallback
, cho phép quan sát vòng đời của các nút Compose (I3731b) - Thêm
@TestOnly
vàoComposer.disableSourceInformation()
vì hàm này chỉ an toàn khi gọi trong bài kiểm thử. (I896c8)
Sửa lỗi
- Xoá tính năng boxing (chuyển đổi kiểu dữ liệu từ căn bản thành đối tượng) trong bảng tra cứu cục bộ của thành phần kết hợp (62f66a)
- Cải thiện các đặc điểm tham chiếu bộ nhớ của trạng thái Tổng quan nhanh (dfb451)
Phiên bản 1.4.0-alpha05
Ngày 25 tháng 1 năm 2023
Phát hành androidx.compose.runtime:runtime:1.4.0-alpha05
và androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
. Phiên bản 1.4.0-alpha05 bao gồm các thay đổi sau.
Thay đổi về API
- Loại/tính chất rỗng khác của hàm cùng dòng/ẩn không dùng nữa (I24f91)
Phiên bản 1.4.0-alpha04
Ngày 11 tháng 1 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.4.0-alpha04
. Phiên bản 1.4.0-alpha04 bao gồm các thay đổi sau.
Thay đổi về API
TestMonotonicFrameClock
hiện sử dụng chú giải thử nghiệm chính xác. (I95c9e)
Sửa lỗi
- Bảo vệ
SnapshotStateObserver
khỏi lượt áp dụng đệ quy và đồng thời (d902fb)
Phiên bản 1.4.0-alpha03
Ngày 7 tháng 12 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.4.0-alpha03
. Phiên bản 1.4.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm một phương thức công khai mới vào lớp
ComposableMethod
tương tự nhưjava.lang.reflect.Method#getParameterTypes()
(Iab0c3)
Sửa lỗi
- Hệ thống hiện sẽ gửi thông báo áp dụng ảnh chụp nhanh sau khi
Recomposer
hoàn tất việc áp dụng các thay đổi. (Iad6c0, b/222093277)
Phiên bản 1.4.0-alpha02
Ngày 9 tháng 11 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.4.0-alpha02
. Phiên bản 1.4.0-alpha02 bao gồm các thay đổi sau.
Phiên bản 1.4.0-alpha01
Ngày 24 tháng 10 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.4.0-alpha01
. Phiên bản 1.4.0-alpha01 bao gồm các thay đổi sau.
Thay đổi về API
SnapshotStateList
hiện có phương thức triển khai rõ ràngtoList()
, cònSnapshotStateMap
hiện có phương thức triển khai rõ ràngtoMap()
. Bằng cách trả về dữ liệu bất biến nội bộ được dùng để lưu trữ nội dung, các phương thức này trả về nội dung hiện tại của đối tượng mà không sao chép. Bạn có thể sử dụng giá trị này, chẳng hạn, để tạo luồng giá trị bằng cách sử dụngsnapshotFlow
mà không yêu cầu sao chép dữ liệu. (Ica2bd)
Phiên bản 1.3
Phiên bản 1.3.3
Ngày 11 tháng 1 năm 2023
Phát hành androidx.compose.runtime:runtime-*:1.3.3
. Phiên bản 1.3.3 bao gồm các thay đổi sau.
- Không có thay đổi nào từ 1.3.2
Phiên bản 1.3.2
Ngày 7 tháng 12 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.3.2
. Phiên bản 1.3.2 bao gồm các thay đổi sau.
Sửa lỗi
- Cập nhật để hỗ trợ androidx.compose.ui 1.3.2
Phiên bản 1.3.1
Ngày 9 tháng 11 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.3.1
. Phiên bản 1.3.1 bao gồm các thay đổi sau.
Phiên bản 1.3.0
Ngày 24 tháng 10 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.3.0
. Phiên bản 1.3.0 bao gồm các thay đổi sau.
Những thay đổi quan trọng kể từ phiên bản 1.2.0
Xử lý trường hợp ngoại lệ/Hỗ trợ chỉnh sửa trực tiếp
- Để hỗ trợ tốt hơn cho việc chỉnh sửa trực tiếp, chúng tôi đã thêm các API để cho phép xử lý các trường hợp ngoại lệ trong quá trình kết hợp
- Xử lý lỗi kết hợp để tự động tải lại
- Xử lý lỗi chỉnh sửa trực tiếp khi lưu/khôi phục
Theo dõi quá trình hợp thành
- Thêm các API truy vết thời gian chạy để hỗ trợ công cụ truy vết quá trình kết hợp mới
- Tạo lệnh gọi bắt đầu/kết thúc sự kiện truy vết thành phần kết hợp
- Thêm lại ComposerKt.traceEventStart(Int, String)
API phản chiếu thành phần kết hợp
- Thêm API
ComposableMethod
mới để cho phép gọi các API thành phần kết hợp dựa trên phản chiếu một cách ổn định hơn. - Di chuyển invokeComposable đến thời gian chạy Compose
- Sửa đổi API để gọi phương thức thành phần kết hợp
Sửa lỗi thời gian chạy
- Khắc phục quy trình kiểm tra phạm vi bị lỗi để kiểm tra bảng vị trí cho điểm đánh dấu
- Cho phép nội dung có thể di chuyển vào và ra khỏi SubcomposeLayout
- Sửa lỗi di chuyển nội dung sang nội dung mới của một cấu trúc phụ
Hệ thống ảnh chụp nhanh
- Hệ thống ảnh chụp nhanh có nhiều điểm cải tiến về tính năng quản lý bộ nhớ, hiệu suất và độ chính xác.
- Tối ưu hoá quy trình xoá phạm vi trong SnapshotStateObserver
- Loại bỏ ảnh chụp nhanh lồng nhau được tạo từ ảnh chụp nhanh trong suốt
- Cố định điều kiện thực hiện khi đọc trạng thái từ ảnh chụp nhanh toàn cục
- Hỗ trợ DerivedState trong SnapshotStateObserver
- Ngăn chặn việc xoá trạng thái phát sinh khỏi cấu trúc khi được đọc trong các phạm vi khác
- Sử dụng IdentityArrayMap thay vì HashMap bên trong DerivedState
- Cập nhật để trình quan sát trạng thái phát sinh sử dụng vectơ thay đổi được
- Cập nhật quy trình dọn dẹp trạng thái SnapshotStateObserver
- Thay thế SnapshotStateObserver.invalidated bằng ArraySet
- Cố định điều kiện thực hiện khi đọc trạng thái từ ảnh chụp nhanh toàn cục
- Sửa lỗi sử dụng bản ghi cũ trong tính toán hàm băm DerivedState
- Khắc phục tình trạng tương tranh khi cải tiến ảnh chụp nhanh toàn cục
- Tăng tốc độ dọn dẹp phạm vi quan sát trong SnapshotStateObserver
Phiên bản 1.3.0-rc01
Ngày 5 tháng 10 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.3.0-rc01
. Phiên bản 1.3.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục
ArrayIndexOutOfBoundsException
trong bảng vị trí (b/249076084)
Phiên bản 1.3.0-beta03
Ngày 21 tháng 9 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.3.0-beta03
. Phiên bản 1.3.0-beta03 bao gồm các thay đổi sau.
Thay đổi có thể gây lỗi về hành vi
- Tham số
remember
vàrememberCoroutineScope
, thay đổi thànhcrossinline
. Việc này sẽ báo cáo lỗi đối với trường hợp trả về sớm thay vì cho phép trả về sớm, từ đó dẫn đến lỗi nội bộ sau đó được báo cáo. - Thay đổi này có thể dẫn đến lỗi trình biên dịch mới được báo cáo, yêu cầu xoá các lệnh trả về không phải cục bộ khỏi lambda được truyền vào các hàm này. (Ibea62)
Phiên bản 1.3.0-beta02
Ngày 7 tháng 9 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.3.0-beta02
. Phiên bản 1.3.0-beta02 bao gồm các thay đổi sau.
Sửa lỗi
- Cập nhật API (I64ca0)
Phiên bản 1.3.0-beta01
Ngày 24 tháng 8 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.3.0-beta01
. Phiên bản 1.3.0-beta01 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm phương thức
find
vàoCompositionData
nhằm giúp các công cụ cho nhà phát triển có thể dùng API này để nhanh chóng tìm thấy một nhóm cấu trúc phụ dựa trên thông tin nhận dạng. (I5794f)
Phiên bản 1.3.0-alpha03
Ngày 10 tháng 8 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.3.0-alpha03
. Phiên bản 1.3.0-alpha03 bao gồm các thay đổi sau.
Phiên bản 1.3.0-alpha02
Ngày 27 tháng 7 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.3.0-alpha02
. Phiên bản 1.3.0-alpha02 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm lại
ComposerKt.traceEventStart(Int, String)
để có thể tương thích ngược (I6e6de)
Phiên bản 1.3.0-alpha01
Ngày 29 tháng 6 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.3.0-alpha01
. Phiên bản 1.3.0-alpha01 bao gồm các thay đổi sau.
Thay đổi về API
- Di chuyển chức năng tiện ích sang thời gian chạy (I4f729)
Phiên bản 1.2
Phiên bản 1.2.1
Ngày 10 tháng 8 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.1
. Phiên bản 1.2.1 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố rò rỉ bộ nhớ: loại bỏ các ảnh chụp nhanh lồng nhau được tạo từ các ảnh chụp nhanh trong suốt b/239603305
Phiên bản 1.2.0
Ngày 27 tháng 7 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0
. Phiên bản 1.2.0 bao gồm các thay đổi sau.
Thay đổi quan trọng kể từ phiên bản 1.1.0
Compose Runtime có một số tính năng được giới thiệu trong phiên bản 1.2.0, cùng với nhiều bản sửa lỗi ổn định. Tính năng mới quan trọng nhất là sự ra mắt của
movableContentOf
API, có thể dùng để hỗ trợ trải nghiệm người dùng phức tạp, chẳng hạn như chuyển tiếp thành phần dùng chung. ThêmmovableContentOf
chuyển đổi lambda có thể kết hợp thành một lambda di chuyển trạng thái và các nút tương ứng, sang bất kỳ vị trí mới nào mà nó được gọi. Khi lệnh gọi trước rời khỏi cấu trúc, trạng thái sẽ được lưu giữ tạm thời và nếu một lệnh gọi mới đến lambda nhập vào cấu trúc thì trạng thái và các Nút liên quan sẽ được chuyển đến vị trí của lệnh gọi mới. Nếu không có lệnh gọi mới nào được thêm, trạng thái sẽ bị xoá vĩnh viễn và RememberObserver sẽ được thông báo.Nếu hệ thống gọi lambda
movableContentOf
nhiều lần trong cùng một cấu trúc, thì trạng thái mới và các nút sẽ được tạo cho mỗi lệnh gọi. Khi các lệnh gọi rời khỏi cấu trúc và các lệnh gọi mới nhập vào, trạng thái đó sẽ được chuyển từ lệnh gọi rời đi đầu tiên đến lệnh gọi nhập vào theo thứ tự chúng được gọi. Tất cả trạng thái không được xác nhận quyền sở hữu bởi các cuộc gọi mới sẽ bị xoá vĩnh viễn.Ngoài tính năng này và một vài tính năng mới khác, chúng tôi đã dành nhiều thời gian để ổn định thời gian chạy và hệ thống trạng thái của ảnh chụp nhanh. Nhiều trường hợp rò rỉ bộ nhớ đã được xử lý và tối ưu hoá các đường dẫn mã.
Bạn có thể xem danh sách tóm tắt các thay đổi dưới đây:
Các tính năng mới trong 1.2
- Thêm tính năng ảnh chụp nhanh thử nghiệm ở trạng thái unsafeEnter/Leave
- Thêm API thử nghiệm Snapshot.asContextElement
- Giới thiệu Snapshot.withoutReadObservation
- Cho phép trạng thái di chuyển trong thành phần cấu tạo
- Truy vết quá trình kết hợp lại trong Compose
Hiệu suất trong 1.2
Các lỗi sửa trong 1.2
- Xoá thông tin theo dõi khỏi phạm vi kết hợp lại bản phát hành
- Ngăn chặn việc xoá trạng thái phát sinh khỏi cấu trúc khi được đọc trong các phạm vi khác
- Sử dụng hàm removeScope() hiệu quả hơn trong SnapshotStateObserver
- Xoá các phần phụ thuộc trạng thái phát sinh trong thành phần cấu tạo
- Khắc phục sự cố thay đổi currentCompositeKeyHash sau khi kết hợp lại bên trong nội dung có thể di chuyển
- Xoá các cấu trúc không hợp lệ trong quá trình loại bỏ
- Khắc phục sự cố trạng thái phát sinh được đọc trong quá trình kết hợp lại
- Khắc phục sự cố rò rỉ bộ nhớ khi quan sát các đối tượng trạng thái phát sinh
- Cố định khoá băm tổng hợp movableContent nhằm đảm bảo tính nhất quán
- Khắc phục một phần trường hợp thành phần kết hợp gặp sự cố
- Đảm bảo quá trình kết hợp lại nhóm bị buộc vô hiệu hoá
- Khắc phục lỗi khi rememberSaveable với dữ liệu đầu vào được khôi phục theo thứ tự không chính xác
Phiên bản 1.2.0-rc03
Ngày 29 tháng 6 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-rc03
. Phiên bản 1.2.0-rc03 bao gồm các thay đổi sau.
Sửa lỗi
- Xoá các quan sát về trạng thái phát sinh trước đó khỏi phạm vi tổng hợp và cấu trúc cùng nhau một cách vô điều kiện. Điều này phá vỡ các phạm vi khác có thể vẫn quan sát được trạng thái phát sinh. Thay đổi này chỉ loại bỏ các thực thể trạng thái phát sinh nếu không còn quan sát các phạm vi khác. (b/236618362)
Phiên bản 1.2.0-rc02
Ngày 22 tháng 6 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-rc02
. Phiên bản 1.2.0-rc02 bao gồm các thay đổi sau.
Phiên bản 1.2.0-rc01
Ngày 15 tháng 6 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-rc01
. Phiên bản 1.2.0-rc01 bao gồm bao gồm các thay đổi sau.
Các thay đổi về API
- Các giao diện trong thư viện Compose hiện được xây dựng bằng phương thức giao diện mặc định jdk8 (I5bcf1)
Phiên bản 1.2.0-beta03
Ngày 2 tháng 6 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-beta03
. Phiên bản 1.2.0-beta03 bao gồm các thay đổi sau.
Phiên bản 1.2.0-beta02
Ngày 18 tháng 5 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-beta02
. Phiên bản 1.2.0-beta02 bao gồm các thay đổi sau.
Phiên bản 1.2.0-beta01
Ngày 11 tháng 5 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-beta01
. Phiên bản 1.2.0-beta01 bao gồm các thay đổi sau.
Tính năng mới
- Đây là bản phát hành beta 1.2 đầu tiên!
Thay đổi về API
- Đã thêm thử nghiệm
Snapshot.unsafeEnter/unsafeLeave
(I108f3) - Đã thêm API
Snapshot.asContextElement()
thử nghiệm (Iff072) - Bạn hiện có thể dùng chú giải
@ComposableTarget
và chú giải được đánh dấu bằng@ComposableTargetMarker
trong phạm vi tệp bằng cách sử dụng tiền tố@file
. Việc sử dụng chú giải mục tiêu ở phạm vi tệp sẽ khiến trình biên dịch giả định tất cả các hàm có khả năng kết hợp trong tệp đều hướng mục tiêu đến trình áp dụng liên kết. Ví dụ: việc sử dụng@file:UiComposable
sẽ khai báo rằng tất cả các hàm@Composable
đều nhắm mục tiêu đến ứng dụng Giao diện người dùng trong Compose. Một hàm khi nhắm mục tiêu đến ứng dụng khác phải cung cấp rõ ràng chú thích điểm đánh dấu mục tiêu mà ứng dụng mong muốn. (I40804)
Phiên bản 1.2.0-alpha08
Ngày 20 tháng 4 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-alpha08
. Phiên bản 1.2.0-alpha08 bao gồm các thay đổi sau.
Thay đổi về API
- Đã thêm
TracingInProgress
vào giao diệnCompositionTracer
. (Ic6f12) - Thêm
recomposeScopeIdentity
vào Composer (I0c873) - Các API theo dõi bị hạn chế (Composer.setTracer) với
OptIn(InternalComposeTracingApi)
. (I9187f) - Thêm
ResuableContentHost
cho phép kiểm soát tốt hơn thời gian tồn tại của trạng thái được tạo cho nội dung có thể sử dụng lại. Ví dụ: nếu một thành phần phụ tạm thời không được sử dụng, thì nội dung có thể bị vô hiệu hoá khiến mọi trạng thái đã nhớ trong thành phần bị xoá, kích hoạt tất cả hiệu ứng sẵn có, chẳng hạn như vậy. (I2c0f2, b/220322704)
Phiên bản 1.2.0-alpha07
Ngày 6 tháng 4 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-alpha07
. Phiên bản 1.2.0-alpha07 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm hàm mới
Snapshot.withoutReadObservation { ... }
. Tính năng này cho phép người dùng chạy hàm lambda đã truyền mà không cần phải đăng ký các thay đổi về giá trị trạng thái đã đọc trong khối này. Điều này hữu ích trong các trường hợp sử dụng khi bạn muốn hưởng lợi từ việc đọc/ghi an toàn theo chuỗi ảnh chụp nhanh, nhưng cũng muốn đọc được giá trị này mà không cần quá trình tái cấu trúc hoặc đo lường lại không cần thiết. (I9f365, b/214054486)
Phiên bản 1.2.0-alpha06
Ngày 23 tháng 3 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-alpha06
. Phiên bản 1.2.0-alpha06 bao gồm các thay đổi sau.
Phiên bản 1.2.0-alpha05
Ngày 9 tháng 3 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-alpha05
. Phiên bản 1.2.0-alpha05 bao gồm các thay đổi sau.
Đóng góp bên ngoài
- Cập nhật để sử dụng các coroutine Kotlinx 1.6.0 (I3366d)
Phiên bản 1.2.0-alpha04
Ngày 23 tháng 2 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-alpha04
. Phiên bản 1.2.0-alpha04 bao gồm các thay đổi sau.
Thay đổi về API
Thêm
ComposableTarget
,ComposableTargetMarker
vàComposableOpenTarget
cho phép báo cáo thời gian biên dịch khi gọi một hàm có khả năng kết hợp nhắm đến một trình áp dụng mà nó không được thiết kế để sử dụng.Trong hầu hết các trường hợp, trình bổ trợ trình biên dịch Compose có thể suy ra các chú giải. Do đó, các chú giải này hiếm khi được sử dụng trực tiếp. Có những trường hợp không thể dự đoán được như việc tạo và sử dụng các hàm trừu tượng có khả năng kết hợp, trình áp dụng tuỳ chỉnh (chẳng hạn như phương thức giao diện), các trường hoặc biến toàn cục là các biểu thức lambda có khả năng kết hợp (biến và tham số cục bộ được suy đoán), hoặc khi sử dụng
ComposeNode
hoặc hàm có khả năng kết hợp liên quan.Đối với các trình áp dụng tuỳ chỉnh, những hàm có khả năng kết hợp gọi
ComposeNode
hoặcReusableComposeNode
cần thêm chú giảiCompoableTarget
cho hàm đó và mọi loại tham số lambda có khả năng kết hợp. Tuy nhiên, bạn nên tạo chú giải được chú thích bằngComposableTargetMarker
, sau đó trực tiếp sử dụng chú giải được đánh dấu thay choComposableTarget
. Một chú giải của thành phần kết hợp được đánh dấu bằngComposableTargetMarker
sẽ tương đương vớiComposbleTarget
có tên đủ điều kiện của lớp thuộc tính dưới dạng tham số của trình áp dụng. Để biết ví dụ về cách sử dụngComposableTargetMarker
, vui lòng xemanroidx.compose.ui.UiComposable
. (I38f11)
Phiên bản 1.2.0-alpha03
Ngày 9 tháng 2 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.2.0-alpha03
. Phiên bản 1.2.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
Đã thêm
movableContentOf
chuyển đổi Lambda có thể kết hợp thành một Lambda di chuyển trạng thái và các nút tương ứng, sang bất kỳ vị trí mới nào mà nó được gọi. Khi lệnh gọi trước rời khỏi cấu trúc, trạng thái sẽ được lưu giữ tạm thời và nếu một lệnh gọi mới đến lambda nhập vào cấu trúc, thì trạng thái và các nút liên quan sẽ được chuyển đến vị trí của lệnh gọi mới. Nếu không có lệnh gọi mới nào được thêm, trạng thái sẽ bị xoá vĩnh viễn và nhớ là các trình quan sát được thông báo.Nếu hệ thống gọi lambda
movableContentOf
nhiều lần trong cùng một cấu trúc, thì trạng thái mới và các nút sẽ được tạo cho mỗi lệnh gọi. Khi các lệnh gọi rời khỏi cấu trúc và các lệnh gọi mới nhập vào, trạng thái đó sẽ được chuyển từ lệnh gọi rời đi đầu tiên đến lệnh gọi nhập vào theo thứ tự chúng được gọi. Tất cả trạng thái không được xác nhận quyền sở hữu bởi các cuộc gọi mới sẽ bị xoá vĩnh viễn. (Ib4850)Thêm API truy vết vào cấu trúc để hỗ trợ các công cụ cung cấp dữ liệu truy vết chi tiết hơn về các hàm có khả năng kết hợp. Trình biên dịch hiện tạo các lệnh gọi đến API truy vết, trong đó có thông tin nguồn. (Ib0eb5)
Để xoá các lệnh gọi này và thông tin nguồn liên quan khỏi bản phát hành, hãy thêm quy tắc Proguard sau:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
Thêm
InternalComposeScope
để các công cụ có thể xác định thành phần có thể kết hợp trong quá trình kết hợp lại. (I07a3f)
Phiên bản 1.2.0-alpha02
Ngày 26 tháng 1 năm 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha02
đã được phát hành. Phiên bản 1.2.0-alpha02 bao gồm các thay đổi sau.
Phiên bản 1.2.0-alpha01
Ngày 12 tháng 1 năm 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha01
đã được phát hành. Phiên bản 1.2.0-alpha01 bao gồm các thay đổi sau.
Thay đổi về API
- Đã thêm trường
identity
vàoCompositionData
để tạo mã nhận dạng bất biến (invariant ids) trong Layout Inspector. (Ic116e)
Thông tin cập nhật về phần phụ thuộc
- Hiện phụ thuộc vào Kotlin
1.6.10
.
Phiên bản 1.1
Phiên bản 1.1.1
Ngày 23 tháng 2 năm 2022
androidx.compose.runtime:runtime-*:1.1.1
đã được phát hành. Phiên bản 1.1.1 bao gồm các thay đổi sau.
Sửa lỗi
- Sửa
NullPointerException
tạiandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462) - Khắc phục sự cố do nội dung trong bảng nhớ tạm gây ra khi đọc từ bảng nhớ tạm trên Android. (I06020, b/197769306)
- Sửa RTL ở
LazyVerticalGrid
(aosp/1931080, b/207510535)
Phiên bản 1.1.0
Ngày 9 tháng 2 năm 2022
Phát hành androidx.compose.runtime:runtime-*:1.1.0
. Phiên bản 1.1.0 bao gồm các thay đổi sau.
Thay đổi quan trọng kể từ phiên bản 1.0.0
- Hỗ trợ ổn định cho hiệu ứng Cuộn quá mức của Android 12
- Những cải tiến đối với kích thước đích chạm
- Lưu ý rằng đối với phiên bản Compose 1.0, các thành phần Material sẽ mở rộng không gian bố cục để đáp ứng các nguyên tắc hỗ trợ tiếp cận của Material cho kích thước đích chạm. Ví dụ: mục tiêu cảm ứng của nút sẽ mở rộng đến kích thước tối thiểu là
48x48dp
, ngay cả khi bạn đặt kích thước Nút nhỏ hơn. Nhờ vậy, Compose Material được điều chỉnh phù hợp với hành vi tương ứng của các Thành phần Material Design, tạo ra hành vi nhất quán khi kết hợp Khung hiển thị và Compose. Sự thay đổi này cũng đảm bảo rằng khi bạn tạo giao diện người dùng bằng các thành phần Compose Material, những yêu cầu tối thiểu về hỗ trợ tiếp cận đích chạm sẽ được đáp ứng. - Hỗ trợ ổn định cho Dải điều hướng (Navigation Rail)
- Ổn định một số API thử nghiệm trước đây
- Hỗ trợ các phiên bản Kotlin mới hơn
Phiên bản 1.1.0-rc03
Ngày 26 tháng 1 năm 2022
androidx.compose.runtime:runtime-*:1.1.0-rc03
đã được phát hành. Phiên bản 1.1.0-rc03 bao gồm các thay đổi sau.
Sửa lỗi
- Cập nhật để hỗ trợ Compose Material
1.1.0-rc03
Phiên bản 1.1.0-rc01
Ngày 15 tháng 12 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-rc01
đã được phát hành. Phiên bản 1.1.0-rc01 bao gồm các thay đổi sau.
Phiên bản 1.1.0-beta04
Ngày 1 tháng 12 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-beta04
đã được phát hành. Phiên bản 1.1.0-beta04 bao gồm các thay đổi sau.
Tính năng mới
- Cập nhật để tương thích với
1.6.0
Kotlin
Phiên bản 1.1.0-beta03
Ngày 17 tháng 11 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-beta03
đã được phát hành. Phiên bản 1.1.0-beta03 bao gồm các thay đổi sau.
Phiên bản 1.1.0-beta02
Ngày 3 tháng 11 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-beta02
đã được phát hành. Phiên bản 1.1.0-beta02 bao gồm các thay đổi sau.
Thay đổi về API
- Mã ảnh chụp nhanh được chia thành nhiều tệp, nhưng tất cả vẫn tồn tại trong cùng một loại VM. (Ic6c98)
Phiên bản 1.1.0-beta01
Ngày 27 tháng 10 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-beta01
đã được phát hành. Phiên bản 1.1.0-beta01 bao gồm các thay đổi sau.
Phiên bản 1.1.0-alpha06
Ngày 13 tháng 10 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha06
đã được phát hành. Phiên bản 1.1.0-alpha06 bao gồm các thay đổi sau.
Thay đổi về API
- Đã xoá
InternalCompilerApi
khỏi các Phương thức soạn bắt buộc phải được gọi mô-đun chéo (I1aa0b) - Ngừng sử dụng
Recomposer.state
và thay bằngRecomposer.currentState
để thay đổi loại mã thành StateFlow (Ic2ab3, b/197773820)
Phiên bản 1.1.0-alpha05
Ngày 29 tháng 9 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha05
đã được phát hành. Phiên bản 1.1.0-alpha05 bao gồm các thay đổi sau.
Phiên bản 1.1.0-alpha04
Ngày 15 tháng 9 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha04
đã được phát hành. Phiên bản 1.1.0-alpha04 bao gồm các thay đổi sau.
Phiên bản 1.1.0-alpha03
Ngày 1 tháng 9 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha03
đã được phát hành. Phiên bản 1.1.0-alpha03 bao gồm các thay đổi sau.
Tính năng mới
- Trình biên dịch Compose hiện hỗ trợ các phiên bản Compose Runtime (1.0). Trước đó, Trình biên dịch Compose chỉ tương thích với Compose Runtime của cùng phiên bản trở lên. Sau khi có sự thay đổi này, Trình biên dịch Compose tương thích với phiên bản cũ hơn của Compose Runtime (1.0). (aosp/1796968)
- Cập nhật
1.1.0-alpha03
của Compose để phụ thuộc vào Kotlin1.5.30
. (I74545)
Phiên bản 1.1.0-alpha02
Ngày 18 tháng 8 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha02
đã được phát hành. Phiên bản 1.1.0-alpha02 bao gồm các thay đổi sau.
Phiên bản 1.1.0-alpha01
Ngày 4 tháng 8 năm 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha01
đã được phát hành. Phiên bản 1.1.0-alpha01 bao gồm các thay đổi sau.
Phiên bản 1.0
Phiên bản 1.0.5
Ngày 3 tháng 11 năm 2021
androidx.compose.runtime:runtime-*:1.0.5
đã được phát hành. Phiên bản 1.0.5 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố theo dõi các thực thể derivedStateOf. (aosp/1792247)
Phiên bản 1.0.4
Ngày 13 tháng 10 năm 2021
androidx.compose.runtime:runtime-*:1.0.4
đã được phát hành. Phiên bản 1.0.4 bao gồm các thay đổi sau.
Thông tin cập nhật về phần phụ thuộc
- Cập nhật để phụ thuộc vào Kotlin
1.5.31
Phiên bản 1.0.3
Ngày 29 tháng 9 năm 2021
androidx.compose.runtime:runtime-*:1.0.3
đã được phát hành. Phiên bản 1.0.3 bao gồm các thay đổi sau.
Thông tin cập nhật về phần phụ thuộc
- Cập nhật để phụ thuộc vào Kotlin
1.5.30
Phiên bản 1.0.2
Ngày 1 tháng 9 năm 2021
Phát hành androidx.compose.runtime:runtime-*:1.0.2
. Phiên bản 1.0.2 bao gồm các thay đổi sau.
Cập nhật để hỗ trợ bản phát hành Compose 1.0.2
. Compose 1.0.2
vẫn tương thích với Kotlin 1.5.21
.
Phiên bản 1.0.1
Ngày 4 tháng 8 năm 2021
androidx.compose.runtime:runtime-*:1.0.1
đã được phát hành. Phiên bản 1.0.1 bao gồm các thay đổi sau.
Thông tin cập nhật về phần phụ thuộc
- Cập nhật để phụ thuộc vào Kotlin
1.5.21
.
Phiên bản 1.0.0
Ngày 28 tháng 7 năm 2021
androidx.compose.runtime:runtime-*:1.0.0
đã được phát hành. Phiên bản 1.0.0 bao gồm các thay đổi sau.
Các tính năng chính của phiên bản 1.0.0
Đây là bản phát hành chính thức đầu tiên của ứng dụng Compose. Vui lòng xem blog về Bản phát hành Compose chính thức để biết thêm thông tin chi tiết!
Lỗi đã biết
Nếu đang sử dụng Android Studio Bumblebee Canary 4 hoặc AGP
7.1.0-alpha04
/7.1.0-alpha05
, bạn có thể gặp sự cố sau đây:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Để khắc phục, hãy tạm thời tăng giá trị minSdkVersion lên 24 trở lên trong tệp
build.gradle
. Sự cố này sẽ được khắc phục trong phiên bản tiếp theo của Android Studio Bumblebee và AGP7.1
. (b/194289155)
Phiên bản 1.0.0-rc02
Ngày 14 tháng 7 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-rc02
đã được phát hành. Phiên bản 1.0.0-rc02 bao gồm các thay đổi sau.
- Khắc phục tình trạng tương tranh (race condition) trong SnapshotStateObserver gây ra NullPointerExceptions rời rạc. (aosp/1763445, aosp/1758105, b/192677711)
- Khắc phục vấn đề liên quan đến ảnh chụp nhanh thời gian chạy gây ra sự cố
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
. (b/193006595, b/192570897)
Phiên bản 1.0.0-rc01
Ngày 1 tháng 7 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-rc01
đã được phát hành. Phiên bản 1.0.0-rc01 bao gồm các thay đổi sau.
Phiên bản 1.0.0-beta09
Ngày 16 tháng 6 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-beta09
đã được phát hành. Phiên bản 1.0.0-beta09 bao gồm các thay đổi sau.
Bổ sung quy tắc hồ sơ
Bản phát hành này bổ sung các quy tắc hồ sơ cho những mô-đun Compose sau (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
Quy tắc hồ sơ là gì?
Quy tắc hồ sơ cho thư viện được chỉ định trong tệp văn bản
baseline-prof.txt
nằm trongsrc/main
hoặc thư mục tương đương. Tệp này chỉ định quy tắc trên mỗi dòng, trong đó quy tắc trong trường hợp này là mẫu để khớp với phương thức hoặc lớp trong thư viện. Cú pháp cho các quy tắc này là tập mẹ của định dạng hồ sơ ART mà con người có thể đọc được, được dùng khi sử dụngadb shell profman --dump-classes-and-methods ...
. Các quy tắc này dùng một trong hai biểu mẫu để nhắm mục tiêu vào phương thức hoặc lớp.Quy tắc phương thức sẽ có mẫu sau:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Và quy tắc lớp sẽ có mẫu sau:
<CLASS_DESCRIPTOR>
Ở đây,
<FLAGS>
là một hoặc nhiều ký tự trong số các ký tựH
,S
vàP
để cho biết có cần gắn cờ "Hot", "Startup" hoặc "Post Startup" cho phương thức này hay không.<CLASS_DESCRIPTOR>
là phần mô tả cho lớp chứa phương thức được nhắm mục tiêu. Ví dụ: lớpandroidx.compose.runtime.SlotTable
sẽ có phần mô tả làLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
là chữ ký của phương thức và bao gồm tên, loại thông số và loại dữ liệu trả về của phương thức. Ví dụ: phương thứcfun isPlaced(): Boolean
trênLayoutNode
có chữ kýisPlaced()Z
.Những mẫu này có thể có ký tự đại diện (
**
,*
và?
) để có một quy tắc duy nhất bao gồm nhiều lớp hoặc phương thức.
Những quy tắc này có chức năng gì?
Phương thức có cờ
H
cho biết rằng phương thức này là một phương thức "khởi động nóng" và phải được biên dịch trước.Phương thức có cờ
S
cho biết đây là phương thức được gọi khi khởi động và phải được biên dịch trước khi thực thi để tránh chi phí biên dịch và diễn giải phương thức này tại thời điểm khởi động.Phương thức có cờ
P
cho biết đây là phương thức được gọi sau khi khởi động.Một lớp có trong tệp này cho biết rằng lớp này được dùng trong khi khởi động và cần được phân bổ trước trong vùng nhớ khối xếp để tránh chi phí tải lớp.
Cơ chế này hoạt động như thế nào?
- Thư viện có thể xác định những quy tắc sẽ được đóng gói trong cấu phần phần mềm AAR. Khi một ứng dụng được tạo bao gồm các cấu phần phần mềm này, các quy tắc này được hợp nhất với nhau và các quy tắc hợp nhất được dùng để tạo ra một hồ sơ ART nhị phân nhỏ gọn dành riêng cho ứng dụng. Sau đó, ART có thể tận dụng hồ sơ này khi ứng dụng được cài đặt trên thiết bị để biên dịch trước một tập hợp con cụ thể của ứng dụng nhằm cải thiện hiệu suất của ứng dụng, đặc biệt là lần chạy đầu tiên. Lưu ý rằng việc này sẽ không ảnh hưởng đến các ứng dụng có thể gỡ lỗi.
Phiên bản 1.0.0-beta08
Ngày 2 tháng 6 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-beta08
đã được phát hành. Phiên bản 1.0.0-beta08 bao gồm các thay đổi sau.
Thay đổi về API
State<T>
hiện làState<out T>
(I69049)- Thay đổi về API
ControlledComposition
cho phép kết hợp lại các thay đổi trong một lần kết hợp lại duy nhất. (Iaafd1, b/184173932)
Phiên bản 1.0.0-beta07
Ngày 18 tháng 5 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-beta07
đã được phát hành. Phiên bản 1.0.0-beta07 bao gồm các thay đổi sau.
Thay đổi về API
- Bổ sung API trình biên dịch Compose mới cho phép xoá thông tin nguồn do trình biên dịch tạo trong quá trình giảm kích thước nguồn. (Ia34e6)
Ra mắt
ReusableContent
sẽ cố gắng sử dụng lại các nút trong nội dung thay vì thay thế những nút này khi khoá thay đổi. Khi khoá thay đổi, các giá trị trước đó trong bảng vị trí cho nội dung sẽ bị bỏ qua ngoại trừ những nút đã được tạo và các giá trị dùng để cập nhật nút.Ra mắt
ReusableComposeNode
sẽ sử dụng lại nút đã phát hành thay vì thay thế nút này như đã thực hiện choComposeNode
. (I1dd86)@ComposeCompilerApi
không còn@RequiresOptIn
(Iab690)
Sửa lỗi
- Giờ đây, LazyColumn/Row sẽ giữ trạng thái đang hoạt động (chưa bị loại bỏ) cho tối đa 2 mục hiển thị trước đó, ngay cả khi các mục đã bị cuộn ra ngoài. Điều này cho phép thành phần đó sử dụng lại các cấu trúc phụ đang hoạt động khi chúng ta cần kết hợp một mục mới để cải thiện hiệu suất của tính năng cuộn. (Ie5555)
Phiên bản 1.0.0-beta06
Ngày 5 tháng 5 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-beta06
đã được phát hành. Phiên bản 1.0.0-beta06 bao gồm các thay đổi sau.
Thay đổi về API
@ComposeCompilerApi
không còn@RequiresOptIn
(Iab690)
Phiên bản 1.0.0-beta05
Ngày 21 tháng 4 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-beta05
đã được phát hành. Phiên bản 1.0.0-beta05 bao gồm các thay đổi sau.
Thay đổi về API
- Xoá
@InternalComposeApi
để ghi và đọc bản ghi nhanh (Id134d)
Sửa lỗi
- Các tệp AndroidManifest của 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-beta04
Ngày 7 tháng 4 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-beta04
đã được phát hành. Phiên bản 1.0.0-beta04 bao gồm các thay đổi sau.
Sửa lỗi
Trước khi có sự thay đổi này, có thể bỏ qua các hàm có khả năng kết hợp cục bộ dựa trên tham số của chúng. Sau khi có sự thay đổi này, các hàm có khả năng kết hợp cục bộ sẽ không bỏ qua. Sự thay đổi này là do các hàm cục bộ thường nắm bắt các tham số từ cấp độ gốc và việc bỏ qua chúng là một nguồn lỗi phổ biến.
Để tóm tắt, hãy xem ví dụ:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
Trước khi có sự thay đổi này, hàm có khả năng kết hợp
ShowCount
luôn bỏ qua ngay cả sau khi tham sốcount
được cập nhật. Hiện đã có một số thay đổi. (I5648a)Khắc phục vấn đề
rememberSaveable()
khôi phục giá trị cũ khi được dùng với các tham số đầu vào (I1b110, b/182403380)
Phiên bản 1.0.0-beta03
Ngày 24 tháng 3 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-beta03
đã được phát hành. Phiên bản 1.0.0-beta03 bao gồm các thay đổi sau.
Thay đổi về API
- Ngừng sử dụng
DefaultMonotonicFrameClock
. Giờ đây, việc gọiwithFrameNanos
hoặcRecomposer.runRecomposeAndApplyChanges
mà không cóMonotonicFrameClock
sẽ gửiIllegalStateException
. (I4eb0d)
Phiên bản 1.0.0-beta02
Ngày 10 tháng 3 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-beta02
đã được phát hành. Phiên bản 1.0.0-beta02 bao gồm các thay đổi sau.
Sửa lỗi
- Thực thi các hạn chế về việc sử dụng công khai API thử nghiệm (I6aa29, b/174531520)
- Sửa lỗi
rememberSaveable { mutableStateOf(0) }
bị hỏng khi được dùng bên trong một đích đến của navigation-compose. (I1312b, b/180042685, b/180701630)
Phiên bản 1.0.0-beta01
Ngày 24 tháng 2 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-beta01
đã được phát hành. Phiên bản 1.0.0-beta01 bao gồm các thay đổi sau.
Đây là bản phát hành đầu tiên của Compose 1.0.0 Beta.
Thay đổi về API
- Thêm API thử nghiệm
Recomposer.runRecomposeConcurrentlyAndApplyChanges
để kết hợp lại các cấu trúc đã hết hiệu lực ngoài vòng lặp khung chính. (I342d0) - Giờ đây, mọi thành phần kết hợp được đánh dấu bằng @ReadOnlyComposable đều được xác thực tại thời điểm biên dịch để đảm bảo rằng chúng chỉ thực hiện lệnh gọi đến các @ReadOnlyComposables (I58961) khác
Giờ đây, bạn bắt buộc phải sử dụng
defaultFactory
chocompositionLocalOf
vàstaticCompositionLocalOf
.Sự thay đổi này sẽ loại bỏ lỗi tiềm ẩn về loại đối với các loại không thể có giá trị rỗng nếu bạn chưa cung cấp nhà máy mặc định ban đầu. Trước đây điều này sẽ cung cấp một tham chiếu rỗng cho loại không thể rỗng.
Đối với các loại giá trị rỗng, bạn nên cung cấp
{ null }
làm nhà máy (factory) mặc định.Bạn không nên sử dụng các thành phần cục bộ có loại không thể rỗng, trừ phi có thể cung cấp giá trị mặc định hợp lý. Nếu không có giá trị mặc định hợp lý, hàm lambda
defaultFactory
sẽ tạo ngoại lệ. Tuy nhiên việc loại bỏ một trường hợp ngoại lệ có nghĩa là người dùng thành phần cục bộ sẽ có phần phụ thuộc ngầm định được cung cấp mà không được hệ thống loại này thực thi. (Ifbd2a)Xoá các biểu tượng không dùng nữa khỏi thời gian chạy Compose (I3252c)
Xoá
emptyContent()
không dùng nữa. Thay vào đó, hãy sử dụng{}
. (Idb33f, b/179432510)Nhà cung cấp đã được đổi tên thành CompositionLocalProvider
- Hàm khởi tạo Composition (Cấu trúc) không còn chấp nhận một tham số chính và không được dùng nữa.
- Chuyển currentCompositeKeyHash thuộc tính cấp cao nhất của thành phần kết hợp thay vì hàm cấp cao nhất của thành phần kết hợp.
- CompositionData và CompositionGroup được chuyển sang không gian tên androidx.compose.runtime.tooling
- ComposableLambda đã được đặt thành một giao diện thay vì loại cụ thể, và không còn có các thông số loại nữa.
- Đặt ComposableLambdaN thành giao diện thay vì loại cụ thể và không còn có tham số loại.
- Di chuyển hàm snapshotFlow sang không gian tên androidx.compose.runtime
- Phương thức hợp nhất của SnapshotMutationPolicy không còn ở giai đoạn thử nghiệm
- Xoá hàm @TestOnly clearRoots cấp cao nhất. Dữ liệu này không còn cần thiết nữa.
- Xoá hàm keySourceInfoOf và resetSourceInfo. Các dữ liệu này không còn cần thiết nữa.
- Xoá Composer.collectKeySourceInformation. Dữ liệu này không còn cần thiết nữa.
- Xoá phương thức isJoinedKey, joinedKeyLeft và joinedKeyRight. Các dữ liệu này không còn cần thiết nữa.
- Di chuyển nhiều API cấp cao nhất và sắp xếp lại thành các tệp khác nhau. Do ngữ nghĩa lớp tệp của Kotlin, khả năng tương thích nhị phân sẽ bị phá vỡ chứ không phải khả năng tương thích nguồn. Do đó, đây không phải là vấn đề đối với hầu hết người dùng.
- (I99b7d, b/177245490)
SnapshotStateObserver không còn ở giai đoạn Thử nghiệm (Id2e6a)
Xoá một số API không dùng nữa (Ice5da, b/178633932)
Thực hiện các thay đổi sau với Material API:
- Thêm tham số contentPadding vào Top/BottomAppBar để cho phép tuỳ chỉnh khoảng đệm mặc định.
- Sắp xếp lại tham số trong BackdropScaffold để tuân thủ các nguyên tắc về API đối với tham số bắt buộc đứng trước tham số không bắt buộc.
- Di chuyển tham số
icon
trong BottomNavigationItem ra phía sauselected
vàonClick
. - Đã đổi tên thông số
alwaysShowLabels
trong NavigationNavigationItem thànhalwaysShowLabel
. - Đã đổi tên thông số
bodyContent
trong một vài thành phần thành chỉcontent
. - Sắp xếp lại các thông số trong
ButtonDefaults.buttonColors()
. Vui lòng lưu ý rằng vì kiểu tham số này không thay đổi, mã của bạn sẽ không gặp lỗi. Hãy đảm bảo bạn đang sử dụng các tham số có tên hoặc cập nhật thứ tự theo cách thủ công, nếu không thì mã của bạn sẽ không hoạt động được như trước. - Thêm tham số
secondaryVariant
vàodarkColors()
. Thường thì màu này giống với màusecondary
trong giao diện tối, nhưng thêm màu này để tăng cường tính nhất quán và khả năng tuỳ chỉnh. - Xoá ElevationDefaults và animateElevation() trên giao diện API công khai vì chúng không được sử dụng phổ biến/hữu ích.
- Đổi tên
onValueChangeEnd
trongSlider
thànhonValueChangeFinished
và đặt là có giá trị rỗng. - Đã đổi tên thông số
text
trongSnackbar
thànhcontent
để đảm bảo tính nhất quán. - Thêm tham số
contentPadding
vàoDropdownMenuItem
để cho phép tuỳ chỉnh khoảng đệm mặc định và đặtcontent
làm phần mở rộng trênRowScope
. - Đổi tên
ModalDrawerLayout
thànhModalDrawer
. - Đổi tên
BottomDrawerLayout
thànhBottomDrawer
. - (I1cc66)
Phiên bản 1.0.0-alpha12
Ngày 10 tháng 2 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha12
đã phát hành. Phiên bản 1.0.0-alpha12 bao gồm các thay đổi sau.
Thay đổi về API
- Xoá tính năng hỗ trợ ViewGroups khỏi UiApplier. Xoá các thành phần kết hợp emitView không được dùng nữa. (Ifb214)
- CompositionReference được đổi tên thành CompositionContext (I53fcb)
- Chuyển ComponentActivity.setContent sang androidx.activity.compose.setContent trong mô-đun androidx.activity:activity-compose. (Icf416)
- Cập nhật Snapshot API (API Ảnh chụp nhanh) để phù hợp hơn với nguyên tắc API cũng như ẩn các lớp triển khai nội bộ từ API công khai. (Id9e32)
- Đổi tên Ambients để khớp với Ambient -> Đổi tên CompositionLocal. Ambients trước đây có tên là AmbientFoo, CompositionLocals hiện có tên là LocalFoo. (I2d55d)
- Đổi tên Ambient thành CompositionLocal và ambientOf/staticAmbientOf thành compositionLocalOf/staticCompositionLocalOf tương ứng. Thay đổi này giúp làm cho mục đích của CompositionLocal rõ ràng hơn: cơ chế cung cấp/truy xuất giá trị cục bộ cho thành phần. Thực thể CompositionLocal phải có tiền tố
Local
, chẳng hạn như val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - Chuyển takeMutableSnapshot và takeSnapshot sang phương thức đồng hành của Ảnh chụp nhanh. (I91f19)
Ngừng sử dụng
@ComposableContract
, thay vào đó là 3 chú giải cụ thể hơn.@ComposableContract(restartable = false)
trở thành@NonRestartableComposable
@ComposableContract(readonly = true)
trở thành@ReadOnlyComposable
@ComposableContract(preventCapture = true)
trở thành@DisallowComposableCalls
@ComposableContract(tracked = true)
bị xoá. (I60a9d)Ngưng sử dụng phần mềm tiện ích emptyContent() và (@Composable () -> Unit).orEmpty() vì chúng không còn tác động hoặc giá trị hiệu suất tích cực nào (I0484d)
snapshotFlow
vàwithMutableSnapshot
không còn ở trạng thái thử nghiệm (I6a45f)Bạn hiện có thể đóng các bộ cấu phần lại. Trình kết hợp lại đã đóng sẽ tiếp tục tái cấu trúc cho đến khi hoàn tất quá trình tái cấu trúc coroutine con. Recomposer.shutDown được đổi tên để huỷ chế độ tương phản với chế độ đóng. (Ib6d76)
Ngưng sử dụng cấu phần phần mềm
compose:runtime-dispatch
. Giờ đây, bạn có thể tìm thấy MonotonicFrameClock trong compose:runtime và AndroidUiDispatcher trong compose:ui. (Ib5c36)Tái cấu trúc API mà trình bổ trợ trình biên dịch Compose nhắm mục tiêu để sử dụng một giao diện thay vì một loại cụ thể. Giao diện này cũng không còn sử dụng tham số loại.
Đây là một thay đổi nội bộ sẽ không ảnh hưởng đến khả năng tương thích cho mã nguồn mà là một thay đổi có thể gây lỗi nhị phân. (I3b922, b/169406779)
Ra mắt SnapshotMutableState (Icfd03)
DisposableEffectDisposable đã được đổi tên thành DisposaleEffectResult (Ica7c6)
Xoá Recomposer.current(). [Abstract]ComposeView hiện được đặt mặc định là các Trình tạo lại tạo từng phần ở phạm vi cửa sổ do ViewTreeLifecycleOwner cho cửa sổ tạo ra. Tạm dùng quy trình kết hợp lại và kim đánh dấu nhịp độ khung hình ảnh động dựa trên withFrameNanos trong khi Vòng đời máy chủ ngừng hoạt động. (I38e11)
Recomposer.runningRecomposers hiện cung cấp StateFlow toàn cục của RecomposerInfo chỉ đọc để quan sát trạng thái cấu trúc đang diễn ra trong quá trình này. Ưu tiên API này hơn Recomposer.current() hiện không dùng nữa. (If8ebe)
DisposableEffectDisposable được đổi tên thành DisposaleEffectResult (I3ea68)
Phiên bản 1.0.0-alpha11
Ngày 28 tháng 1 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha11
đã phát hành. Phiên bản 1.0.0-alpha11 bao gồm các thay đổi sau.
Thay đổi về API
- Ngừng sử dụng onCommit, onDispose và onActive, thay vào đó là SideEffect API và DisposableEffect API (If760e)
- Ngừng sử dụng và đổi tên API emit() cùng tất cả trường hợp tải quá tải thành ComposeNode. Các API giống hệt nhau, chỉ khác tên để tuân theo quy ước đặt tên của Compose (I4137b)
- Hiện ngừng sử dụng invalidate và compositionReference(), thay vào đó lần lượt là currentRecomposeScope và rememberCompositionReference. (I583a8)
Ngừng sử dụng CompositionLifecycleObserver và thay bằng RememberObserver.
RememberObserver
thay thế choCompositionLifecycleObserver
với ngữ nghĩa được sửa đổi và phương thức được đổi tên. Việc thay đổi sang API mới có thể được thực hiện bằng máy móc đối với các đối tượng chỉ được nhớ một lần và tiếp tục là phương pháp được đề xuất. Tuy nhiên, nếu một tệp đối chiếu được nhớ nhiều lần trong một cấu trúc, thìonRemembered
sẽ được gọi cho mỗi tệp đối chiếu màonEnter
chỉ được gọi một lần.onEnter
được gọi nhiều lần nếu đối tượng được sử dụng trong các cấu trúc phụ, chẳng hạn nhưWithConstraints
vàScaffold
, giúp đảm bảo rằng một lệnh gọionEnter
không đáng tin cậy và đã bị xoá choRememberObserver
.RememberObserver
thêmonAbandoned
được gọi nếu thực thểRememberObserver
được trả về từ lệnh gọi lại truyền đếnremember
nhưng không được nhớ ở trạng thái cấu trúc và do đó, sẽ không bao giờonRemembered
được gọi. Điều này có thể xảy ra nếu một trường hợp ngoại lệ chấm dứt quá trình cấu trúc trước khi hoàn tất hoặc cấu trúc bị huỷ vì trạng thái đang tạo quá trình cấu trúc không còn hiệu lực hoặc không còn cần thiết nữa. Nếu thực thể củaRememberObserver
(tuân theo một mục đề xuất tham chiếu ở trên) đang theo dõi một tài nguyên bên ngoài (cảonForgotten
vàonAbandoned
), thì mỗi loại sẽ cho thấy tài nguyên không còn cần thiết nữa. Nếu đối tượng đang theo dõi công việc đã bắt đầu hoặc tài nguyên được phân bổ trongonRemembered
,onAbandoned
có thể bị bỏ qua vì đối tượng này sẽ không được gọi nếuonRemembered
được gọi. (I02c36)Không đánh dấu các hàm
collectAsState()
là nội dòng (Ia73e4)
Sửa lỗi
- Thiết kế lại WithConstraints dưới dạng BoxWithConstraints và chuyển sang foundation.layout. (I9420b, b/173387208)
- Tận dụng TestCoroutineDispatcher trong quá trình kiểm thử (I532b6)
Phiên bản 1.0.0-alpha10
Ngày 13 tháng 1 năm 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha10
đã phát hành. Phiên bản 1.0.0-alpha10 bao gồm các thay đổi sau.
Thay đổi có thể gây lỗi
Việc sắp xếp lại cấu trúc của API trình biên dịch nội bộ cho phép thay đổi hàng loạt các nút được tạo do kết quả của cấu trúc vào giai đoạn "áp dụng các thay đổi" của cấu trúc, sau khi tất cả các hàm
@Composable
đã hoàn tất.Đây là thay đổi có thể gây lỗi hành vi có khả năng ảnh hưởng đến mã ứng dụng vì các nút không còn hoạt động qua API nội bộ và thử nghiệm cho đến khi thay đổi được áp dụng. Bạn thường có thể xử lý vấn đề này bằng cách đặt mã xung quanh các phần phụ thuộc như vậy trong một thành phần kết hợp
SideEffect
để trì hoãn việc thực thi mã cho đến khi các nút đã được tạo và khởi chạy. (I018da)
Thay đổi về API
- Thêm một cách theo dõi xem trình kết hợp lại đã áp dụng các thay đổi hay chưa. (I1b3e2)
Mở rộng [Abstract]ComposeView API để cho phép tái chế khung hiển thị dựa trên Compose, loại bỏ cấu trúc để tạo lại sau. Thêm API để cài đặt và khám phá Trình kết hợp lại trong phạm vi cửa sổ và CompositionReferences để tạo cấu trúc con.
Thêm ViewCompositionStrategy để định cấu hình chiến lược loại bỏ cấu trúc của [Abstract]ComposeViews; hành vi mặc định được loại bỏ trên cửa sổ có thể tách biệt. (I860ab)
Sửa lỗi
- Trình kết hợp lại sẽ cho thấy Flow (Luồng) của trạng thái hiện tại, cho phép theo dõi hoạt động và hoạt động của Flow và của các hiệu ứng liên quan. (Ifb2b9)
- Giờ đây, bạn có thể truy cập vào keyEvent gốc thông qua keyEvent.nativeKeyEvent (I87c57, b/173086397)
Phiên bản 1.0.0-alpha09
Ngày 16 tháng 12 năm 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha09
đã phát hành. Phiên bản 1.0.0-alpha09 bao gồm các thay đổi sau.
Thay đổi về API
Xoá SlotTable, SlotReader và SlotWriter khỏi API công khai. Trước đây, các hàm này được đánh dấu là InternalComposeAPI. Giờ đây, chúng thuộc nội bộ của mô-đun Compose.
CompositionData và CompositionGroup được thêm vào để thay thế cho API ui-tooling dùng để trích xuất thông tin về cấu trúc. Các hàm này là công khai nhưng không nhằm sử dụng bên ngoài API công cụ giao diện người dùng vì chúng cung cấp thông tin chưa xử lý mà API công cụ giao diện người dùng diễn giải (I31a9c)
Không còn cân nhắc lớp trình áp dụng (Id85b0)
Thay đổi giao diện
Applier
để đơn giản hoá quy trình xây dựng cây từ dưới lên thay vì từ trên xuống.Phương thức
insert()
được đổi tên thànhinsertTopDown()
.Thêm phương thức mới:
insertBottomUp()
.Một trình áp dụng sẽ chèn các nút vào cây mà trình áp dụng này đang chỉnh sửa bằng cách sử dụng
insertTopDown()
hoặcinsertBottomUp()
, tuỳ thuộc vào việc chế độ nào hoạt động hiệu quả hơn.Một số cây, chẳng hạn như
LayoutNode
vàView
, có hiệu quả hơn khi tạo từ dưới lên so với từ trên xuống. Trước đó, hệ thống phải có một tập hợp các nút chèn để triển khai từ dưới lên nên cần sao chép sang tất cả các trình áp dụng cần xây dựng từ dưới lên để đạt được hiệu suất. Với thay đổi này,Applier
ghi đèinsertBottomUp()
để tạo cây từ dưới lên vàinsertTopDown()
để tạo cây từ trên xuống. (Icbdc2)Compose hỗ trợ các phương thức getter của thuộc tính để có thể thực hiện các lệnh gọi thành phần kết hợp. Chúng tôi vẫn hỗ trợ tính năng này, nhưng cú pháp để khai báo phương thức getter thuộc tính là @Composable sẽ thay đổi.
Ngưng sử dụng cú pháp cho việc này bằng cách tự chú giải thuộc tính.
@Composable val someProperty: Int get() = ...
Sử dụng cú pháp now-correct cho việc này bằng cách chú giải phương thức getter của thuộc tính:
val someProperty: Int @Composable get() = ...
Cả hai cú pháp sẽ hoạt động trong một khoảng thời gian, nhưng cú pháp cũ không dùng nữa sẽ trở thành lỗi biên dịch. (Id9197)
Sửa lỗi
- Đặt AndroidOwner thành nội bộ (Ibcad0, b/170296980)
- Đặt subcomposeInto(LayoutNode) thành nội bộ (Id724a)
Phiên bản 1.0.0-alpha08
Ngày 2 tháng 12 năm 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha08
đã phát hành. Phiên bản 1.0.0-alpha08 bao gồm các thay đổi sau.
Các thay đổi về API
- Thêm mục kiểm tra tìm lỗi mã nguồn cho việc đặt tên và đặt tham số lambda của thành phần kết hợp, để kiểm tra tính nhất quán với nguyên tắc của Compose.
Ngoài ra, chúng tôi cũng đã di chuyển một số API sử dụng
children
dưới dạng tên cho lambda theo sau sangcontent
, theo hướng dẫn và mục kiểm tra tìm lỗi mã nguồn. (Iec48e) - Trình kết hợp lại không còn chấp nhận EmbeddingContext; các phần phụ thuộc lên lịch bắt buộc lấy từ effectCoroutineContext. Ngừng sử dụng FrameManager; việc tích hợp nền tảng sẽ bắt đầu quá trình xử lý ảnh chụp nhanh toàn cục của riêng chúng. (I02369)
- Hàm RestorableStateHolder.withRestorableState đã được đổi tên thành RestorableStateProvider (66640)
Sửa lỗi
- Ngừng sử dụng các Ambient được đặt tên với hậu tố là
Ambient
và thay thế chúng bằng các thuộc tính mới có tiền tố là Ambient, tuân theo các nguyên tắc khác về API Compose và Ambient. (I33440) - Xoá mô-đun cũ, giao diện người dùng kiểm tra giao diện người dùng và các nội dung mô-đun (I3a7cb)
Phiên bản 1.0.0-alpha07
Ngày 11 tháng 11 năm 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha07
đã phát hành. Phiên bản 1.0.0-alpha07 bao gồm các thay đổi sau.
Tính năng mới
Thay đổi về API
- Ngừng sử dụng chú giải
@UnionType
(I57cde) - Thêm provideDefault với vai trò thay thế để cung cấp môi trường xung quanh và có thể dùng để chỉ định các giá trị môi trường xung quanh mà chỉ được thiết lập khi không có giá trị môi trường nào được cung cấp. (Id6635, b/171024925)
- Đổi tên LaunchedTask thành LaunchedEffect để có tính nhất quánI với các API SideEffect và DisposableEffect. LaunchedEffect không có tham số chủ đề để khuyến khích các phương pháp hay nhất. (Ifd3d4)
- Giờ đây, trình áp dụng có các lệnh gọi lại onBeginChanges/onEndChanges được gọi khi Trình kết hợp bắt đầu/hoàn tất quá trình áp dụng thay đổi cho cây. Bạn có thể sử dụng các công cụ này để quản lý tài nguyên theo lô nếu cần. (Icf476)
- Trình soạn lại hiện yêu cầu CoroutineContext công trình đang xây dựng (Ic4610)
- Thay đổi đối với cách triển khai SlotTable nội bộ không ảnh hưởng đến API công khai. (If9828)
- Ngừng sử dụng trình chuyển đổi rxjava2. Trình chuyển đổi này không lấy giá trị ban đầu đã bị xoá (Idb72f)
Sửa lỗi
- Ngừng sử dụng foundation.Text và thay bằng material.Text. Đối với một API văn bản cơ bản, không có quy cách bắt buộc và không sử dụng giá trị nào từ một giao diện. Hãy xem androidx.compose.foundation.BasicText. (If64cb)
- Ngừng sử dụng BaseTextField. Sử dụng BasicTextField thay thế. (I896eb)
- Một số biểu tượng liên quan đến bố cục được chuyển từ androidx.compose.ui sang androidx.compose.layout.ui. (I0fa98, b/170475424)
Đóng góp bên ngoài
- Thêm mô-đun
runtime-rxjava3
cho Compose. Tương tự nhưruntime-rxjava2
(I02cbf)
Phiên bản 1.0.0-alpha06
Ngày 28 tháng 10 năm 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha06
đã phát hành. Phiên bản 1.0.0-alpha06 bao gồm các thay đổi sau.
Thay đổi về API
- Trình kết hợp lại hiện là CompositionReference và là thành phần cha hợp lệ trong cấu trúc. Hiện tại, bạn bắt buộc phải sử dụng tính năng Trình kết hợp lại rõ ràng ở ít địa điểm hơn. (I4036f)
- Thêm API đối tác DisposableEffect vào SideEffect, điền vai trò của onCommit-with-params nhưng với onDispose bắt buộc.
- Thêm API rememberUpdatedState để xuất bản dữ liệu từ quá trình kết hợp lại sang các quy trình đang diễn ra hoặc tồn tại lâu dài, chẳng hạn như DisposableEffects hoặc LaunchedTasks.
- (Id50b9)
- MutableVector hiện triển khai chế độ RandomAccess (I85d73, b/170461551)
- Thêm thành phần kết hợp SideEffect để áp dụng hiệu ứng phụ của cấu trúc vào các đối tượng mà cấu trúc quản lý. SideEffect nhằm thay thế thành phần kết hợp onCommit. (Ia77c2)
- Các tính năng mới thử nghiệm api RestorableStateHolder. Chế độ này cho phép lưu trạng thái được xác định bằng [saveInstanceState] và [rieSavedInstanceState] cho cây con trước khi huỷ bỏ để hệ thống có thể kết hợp lại vào lần tới ở trạng thái khôi phục. (I66884, b/166586419)
Sửa lỗi
- Bật tính năng chuyển đổi trong ComposeTestRule; xoá tuỳ chọn để bật con trỏ nhấp nháy từ ComposeTestRule. (If0de3)
Phiên bản 1.0.0-alpha05
Ngày 14 tháng 10 năm 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha05
đã phát hành. Phiên bản 1.0.0-alpha05 bao gồm các thay đổi sau.
Thay đổi về API
- Modifier.pointerInput thử nghiệm tạm ngưng đối tượng sửa đổi đầu vào (Ia77d2)
- Cải thiện hiệu suất cuộn của LazyColumn/Row bằng cách thực hiện ít công việc hơn trong phân mục trên mỗi lần cuộn. Thêm phương thức hasInvalidations() mới cho lớp Thành phần kết hợp. Đổi tên phương thức hasPendingChanges() của Trình kết hợp lại thành hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371)
- Thêm produceState API cho quy trình chạy coroutine từ thành phần kết hợp cập nhật một giá trị
State<T>
theo thời gian (Id4a57) - Đổi tên launchInComposition thành LaunchedTask để phù hợp với các nguyên tắc của Compose API (I99a8e)
- Giờ đây, thứ tự của các lệnh gọi place() trong Layout tuỳ chỉnh sẽ xác định thứ tự bản vẽ cho thành phần con (Ibc9f6)
Phiên bản 1.0.0-alpha04
Ngày 1 tháng 10 năm 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
đã phát hành. Phiên bản 1.0.0-alpha04 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm OwnerScope để cho phép thu thập bố cục và vẽ phạm vi quan sát khi các phạm vi này không còn hợp lệ. (Ic4cf8)
- Thêm derivedStateOf API để tạo các đối tượng Trạng thái dựa trên phép tính có thể đọc (và được lấy từ) các đối tượng Trạng thái khác (If758b)
- Thêm TestOnly API cho SnapshotStateObserver (I6e2a9)
Sửa lỗi
- Ngừng sử dụng foundation.Box. Thay vào đó hãy dùng foundation.layout.Box. (Ie5950, b/167680279)
Phiên bản 1.0.0-alpha03
Ngày 16 tháng 9 năm 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha03
đã phát hành. Phiên bản 1.0.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
CompositionCoroutineScope
không còn triển khaiMonotonicFrameClock
. Người gọi củawithFrameNanos
nên nhập hàm cấp cao nhất một cách rõ ràng. (Icb642, b/166778123)
Sửa lỗi
- Ngừng sử dụng hàm kiểm thử toàn cục như
onNode
hoặcwaitForIdle
. Vui lòng chuyển sang các hàm mới tương đương được xác định trong ComposeTestRule (I7f45a) launchInComposition
không còn phát hành coroutine chưa được gửi (Ief6af, b/166486000)
Phiên bản 1.0.0-alpha02
Ngày 2 tháng 9 năm 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha02
đã phát hành. Phiên bản 1.0.0-alpha02 bao gồm các thay đổi sau.
Thay đổi về API
- Thêm API
snapshotFlow
vàwithMutableSnapshot
để sử dụng và tạo thay đổi đối với dữ liệu Ảnh chụp nhanh. (I3e722) Thay đổi quy ước gọi cho hàm có khả năng kết hợp. Đây là một thay đổi có thể gây lỗi nhị phân. Mọi thư viện phải được biên dịch lại để hoạt động với phiên bản trình bổ trợ trình biên dịch Compose này.
Thay đổi này không tạo ra thay đổi có thể gây lỗi cấp nguồn do các API duy nhất đã thay đổi là API trình biên dịch có lựa chọn rõ ràng. (I7afd2, b/158123185)
Xoá phương thức lập lịch biểu khỏi EmbeddingContext (I7b9be)
Ngừng sử dụng onPreCommit; onCommit hiện có hành vi của onPreCommit.
onCommit và onActive hiện chạy trong cùng một khung choreographer mà những thay đổi cấu trúc được xác nhận (commit) ở trong thay vì ở đầu khung choreographer tiếp theo. (I70403)
Phiên bản 1.0.0-alpha01
Ngày 26 tháng 8 năm 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha01
đã phát hành. Phiên bản 1.0.0-alpha01 bao gồm các thay đổi sau.
Phiên bản 0.1.0-dev
Phiên bản 0.1.0-dev17
Ngày 19 tháng Tám, 2020
androidx.compose.runtime:runtime-*:0.1.0-dev17
đã phát hành. Phiên bản 0.1.0-dev17 bao gồm các thay đổi sau.
Thay đổi về API
- Giờ đây, bộ phát sóng có thể khai báo một hoặc nhiều phương thức setter có thể bỏ qua và kết hợp lại một cách độc lập. (Ibbd13)
Xoá lệnh gọi FrameManager không dùng nữa.
Thay đổi các API nội bộ của Compose để giảm số lượng giá trị đầu vào nhằm theo dõi đối tượng trạng thái như
mutableStateof()
(I80ba6)Ngừng sử dụng thành phần kết hợp
state { ... }
và thay bằng các lệnh gọi rõ ràng tớiremember { mutableStateOf(...) }
để đảm bảo sự rõ ràng. Điều này làm giảm giao diện API tổng thể và số lượng khái niệm để quản lý trạng thái, đồng thời khớp với mẫuby mutableStateOf()
theo uỷ quyền thuộc tính của lớp. (Ia5727)Giờ đây, Flow.collectAsState xác định trình điều phối mặc định từ chính cấu trúc thay vì đặt mặc định là Dispatchers.Main. (I9c1d9)
Khắc phục sự cố khi lưu nội dung nào đó vào trạng thái sử dụng bên trong vòng lặp. Hiện tại, bạn đã cho phép khoá tương tự trong savedInstanceState(), nên API của UiSavedStateRegistry được điều chỉnh theo yêu cầu mới này (I4ab76 ,b/160042650, b/156853976, b/159026663, b/154920561)
Sửa lỗi
- Ngừng sử dụng
emitView
. Thay vào đó, hãy sử dụngAndroidView
nếu có thể để triển khai Khung hiển thị bên trong Compose. Lưu ý rằng việc soạn thảo Chế độ xem và Nhóm xem trực tiếp sẽ không được hỗ trợ trong tương lai trừ phi đây là những lá trong cây bố cục, trong trường hợp có thể đạt được điều này bằng cách sử dụng AndroidView. (I29b1e, b/163871221)
Phiên bản 0.1.0-dev16
Ngày 5 tháng 8 năm 2020
androidx.compose.runtime:runtime-*:0.1.0-dev16
đã phát hành. Phiên bản 0.1.0-dev16 bao gồm các thay đổi sau.
Thay đổi về API
Thay đổi chính sách mặc định về trường hợp đột biến (mutation) của
mutableStateOf()
,ambientOf()
vàsavedInstanceStateOf()
thànhstructuralEqualityPolicy()
thay vìreferentialEqualityPolicy()
.Chế độ mặc định để quyết định liệu một giá trị mới được gán cho thực thể
mutableStateOf()
có được coi là một thay đổi hay không sẽ mặc định sử dụng==
thay vì sử dụng===
.Hãy truy cập https://kotlinlang.org/docs/reference/equality.html
ambientOf()
vàsavedInstanceStateOf()
sử dụngmutableStateOf()
trong quá trình triển khai nên đã được thay đổi để nhất quán vớimutableStateOf()
.Sử dụng đẳng thức cấu trúc phù hợp hơn với kỳ vọng của nhà phát triển.
Ví dụ,
val state = mutableStateOf(1f)
theo sau bởi,
state.value = 1f
sẽ không được coi là thay đổi đối với
state
và không cần phải kết hợp lại khi sử dụngstate
trong quá trình tái kết hợp.Đây là thay đổi có thể gây lỗi, nhưng trong hầu hết trường hợp (chẳng hạn như khi sử dụng lớp không ghi đè
equals()
), thay đổi này sẽ không ảnh hưởng đáng kể đến ứng dụng.Lớp ghi đè
equals()
, chẳng hạn như lớpdata
, có thể thấy hiệu suất suy giảm vì phương thứcequals()
theo mặc định giờ đây được gọi khi chỉ địnhmutableStateOf()
.Bạn có thể khôi phục hành vi trước đó bằng cách thêm tham số chính sách
policy = referentialEqualityPolicy()
vào các lệnh gọi đếnmutableStateOf()
,ambientOf()
vàsavedInstanceStateOf()
. (Ic21a7)Row
vàColumn
hiện là hàm cùng dòng đã giảm đáng kể tài nguyên sử dụng. (I75c10)
Sửa lỗi
- Ngừng sử dụng setViewContent. Nên dùng setContent để thay thế. (I7e497, b/160335130)
Thêm MonotonicFrameAnimationClock cho phép bạn sử dụng MonotonicFrameClock dưới dạng AnimationClockObservable để làm cầu nối giữa các đồng hồ và API dựa trên coroutine mới mà vẫn sử dụng các đồng hồ dựa trên lệnh gọi lại cũ.
MonotonicFrameClock tương đương với ManualAnimationClock nay là ManualFrameClock. (I111c7, b/161247083)
Làm lại hoàn toàn và đổi tên Modifier.stateDraggable thành Modifier.swipeable. Ra mắt lớp SwipeableState mới và tái cấu trúc DrawerState cũng như BottomDrawerState để kế thừa từ nó. [Modal/Bottom]DrawerLayout không còn nhận thông số onStateChange. (I72332, b/148023068)
Ngừng sử dụng Modifier.plus và thay vào đó là Modifier.then. "Then" có tín hiệu rõ ràng hơn về thứ tự, đồng thời nghiêm cấm nhập
Modifier.padding().background() + anotherModifier
khiến cho chuỗi bị phá vỡ và khó đọc hơn (Iedd58, b/161529964)Thêm SubcomposeLayout. Đây là danh sách gốc cấp thấp cho phép kết hợp phần tử con trong quá trình đo lường nếu chúng ta chỉ muốn sử dụng một số giá trị có sẵn trong quá trình đo lường cho cấu trúc cây con. Ví dụ: WithConstraints không được triển khai bằng SubcomposeLayout. (I25cc8)
Đổi tên FilledTextField của Material thành TextField và TextField nền tảng thành BaseTextField để giúp người dùng dễ dàng khám phá và sử dụng API mong muốn theo cách đơn giản nhất (Ia6242, b/155482676)
Đổi tên Modifier.drawBackground thành Modifier.background (I13677)
Phiên bản 0.1.0-dev15
Ngày 22 tháng Bảy, 2020
androidx.compose.runtime:runtime-*:0.1.0-dev15
đã phát hành. Phiên bản 0.1.0-dev15 bao gồm các thay đổi sau.
Cập nhật phần phụ thuộc
- Để sử dụng phiên bản
0.1.0-dev15
của Compose, bạn cần cập nhật các phần phụ thuộc theo đoạn mã mới xuất hiện trong phần Khai báo phần phụ thuộc bên trên.
Thay đổi về API
Ngừng sử dụng chú giải
@Model
. Hãy sử dụng trạng thái và mutableStateOf để thay thế. Quyết định ngừng sử dụng này đã được đưa ra sau nhiều cuộc thảo luận cẩn thận.Lý giải
Lý giải bao gồm nhưng không giới hạn trong:
- Giảm diện tích bề mặt API và các khái niệm mà chúng tôi cần hướng dẫn
- Căn chỉnh chặt chẽ hơn với các bộ công cụ so sánh khác (Giao diện người dùng Swift, React, Flutter)
- Quyết định đảo ngược. Chúng tôi luôn có thể mang
@Model
trở lại sau này. - Xoá mức sử dụng corner-case và các câu hỏi khó trả lời về việc định cấu hình
@Model
dưới dạng những việc chúng tôi cần xử lý - Các lớp dữ liệu
@Model
, hàm cân bằng, mã băm, v.v. - Làm thế nào tôi có một số thuộc tính "quan sát được" và các thuộc tính khác thì không?
- Làm thế nào để chỉ định đẳng thức cấu trúc so với đẳng thức tham chiếu được dùng trong nội dung quan sát?
- Giảm "ma thuật" trong hệ thống. Sẽ làm giảm khả năng ai đó cho rằng hệ thống thông minh hơn thực tế (chẳng hạn như tự biết mở rộng danh sách)
- Giúp độ chi tiết của quá trình quan sát trở nên trực quan hơn.
- Cải thiện khả năng tái tạo từ biến -> thuộc tính trên lớp
- Mở ra khả năng tối ưu hoá theo từng Trạng thái được tạo thủ công
- Căn chỉnh phù hợp hơn với phần còn lại của hệ sinh thái và giảm sự mơ hồ đối với thành phần bất biến hoặc chúng ta đang “chấp nhận trạng thái có thể thay đổi”
Ghi chú di chuyển
Hầu như mọi cách sử dụng hiện tại của
@Model
đều được chuyển đổi khá đơn giản theo một trong hai cách. Ví dụ dưới đây có một lớp@Model
chứa hai thuộc tính chỉ để dùng làm ví dụ và lớp này đang được sử dụng trong một thành phần kết hợp.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
Phương án 1: Sử dụng
State<OriginalClass>
và tạo bản sao.Cách tiếp cận này được thực hiện dễ dàng hơn nhờ các lớp dữ liệu của Kotlin. Về cơ bản, biến tất cả thuộc tính
var
trước đó thành các thuộc tínhval
của một lớp dữ liệu, rồi sử dụngstate
thay vìremember
và gán giá trị trạng thái cho các bản sao chép nhân bản của lớp dữ liệu gốc bằng cách sử dụng phương thức tiện lợicopy(...)
của lớp dữ liệu.Điều quan trọng cần lưu ý là chỉ áp dụng phương pháp này khi các trường hợp đột biến duy nhất đối với lớp đó được thực hiện trong cùng phạm vi mà thực thể
State
được tạo. Nếu lớp tự biến đổi bên ngoài phạm vi sử dụng và bạn đang dựa vào quy trình quan sát đó, thì có thể bạn sẽ muốn áp dụng phương pháp tiếp theo.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
Lựa chọn 2: Sử dụng mutableStateOf và các đại diện thuộc tính
Phương pháp này trở nên dễ dàng hơn với các đại diện thuộc tính của Kotlin và API
mutableStateOf
. API này cho phép bạn tạo thực thể MutableState ngoài cấu trúc. Về cơ bản, thay thế tất cả các thuộc tínhvar
của lớp ban đầu bằng các thuộc tínhvar
cómutableStateOf
làm đại diện thuộc tính của chúng. Lợi thế của việc này là cách sử dụng lớp này hoàn toàn không thay đổi, mà chỉ thay đổi cách triển khai nội bộ của lớp. Tuy nhiên, hành vi này không hoàn toàn giống với ví dụ ban đầu vì mỗi thuộc tính giờ đây được quan sát/đăng ký riêng lẻ, nên thành phần mà bạn thấy sau khi kết hợp lại có thể hẹp hơn (đây là điều tốt).class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
Thay đổi chiến lược tạo mã của trình biên dịch Compose. Trước khi có thay đổi, trình biên dịch Compose sẽ chuyển đổi lệnh gọi thành hàm có khả năng kết hợp. Với thay đổi này, giờ đây chúng tôi chuyển đổi phần nội dung của hàm có khả năng kết hợp và giữ lại trang web không có hiệu lực (chủ yếu).
Tức là hầu hết logic giao tiếp với môi trường thời gian chạy sẽ xảy ra ở phần đầu của nội dung hàm, thay vì ở vị trí gọi hàm.
Đây phải là một thay đổi tương thích với nguồn để sử dụng khi soạn. Hầu hết người dùng Compose không phải cập nhật bất cứ mã nào vì thay đổi này.
Để hỗ trợ công việc này, chữ ký JVM của mọi hàm có khả năng kết hợp đã thay đổi. Chuyển đổi hàm có khả năng kết hợp chấp nhận một tham số thành chấp nhận 3 tham số, các tham số bổ sung là Composer, số nguyên "key", số nguyên bitmask dùng để truyền siêu dữ liệu qua lệnh gọi.
Compose hiện cũng biến đổi các đối số mặc định thành hàm có khả năng kết hợp. Compose làm việc này mà không cung cấp thêm phương thức nạp chồng mặc định của hàm, nên thay đổi này sẽ làm giảm ít chức năng được xác định.
Những thay đổi cố ý về hành vi cố ý xuất phát từ điều này:
- Một số cuộc gọi sẽ bỏ qua dù trước đây không như vậy
- Đăng ký và xử lý chính xác biểu thức thành phần kết hợp trong biểu thức đối số mặc định
Công việc này bao gồm một số điểm tối ưu hoá: 1. Kết quả so sánh các tham số được truyền qua biểu đồ lệnh gọi đến các hàm có khả năng kết hợp khác. Điều này dẫn tới số lần so sánh trong thời gian chạy ít hơn, giảm kích thước bảng vị trí cũng như bỏ qua nhiều hàm có khả năng kết hợp hơn mà trước đây không bị bỏ qua 2. Tham số được xác định là "tĩnh" tại thời gian biên dịch không còn được so sánh hoặc lưu trữ trong thời gian chạy. Điều này làm giảm số lần so sánh và kích thước bảng vị trí. 3. Cấu trúc luồng kiểm soát trong phần nội dung của các hàm được dùng để giảm thiểu số nhóm được tạo. Việc này giúp giảm kích thước bảng vị trí và dẫn đến thời gian chạy ít hơn 4. Tham số gửi và nhận chưa dùng đến của các hàm không được đưa vào quy trình xác định khả năng có thể bỏ qua của hàm nếu chúng không được dùng trong nội dung của hàm.
Hầu hết các thay đổi có thể gây lỗi đều là đối với các API mà trình biên dịch nhắm mục tiêu trực tiếp, và quá trình sử dụng Compose thường sẽ không bị ảnh hưởng: 1. Xoá Composer::startExpr 2. Xoá Composer::endExpr 3. Ngừng sử dụng Composer::call 4. Xoá phương thức nạp chồng không phải varargs của
key
. Sử dụng phiên bảnvararg
trở đi. 5. Ngừng sử dụng chú giải Pivotal. Thay vào đó, hãy sử dụngkey
. 6. Thay đổi ScopeUpdateScope::updateScope thành Function3 thay vì Function1 7. Cập nhật restartableFunction và restartableFunctionN để bao gồm các tham số thời gian biên dịch bổ sung (I60756, b/143464846)Thêm sortWith và removeRange vào MutableVector (Icccf7)
Thêm phương thức triển khai mặc định cho CompositionLifecycleObserver (I24289)
Trình áp dụng hiện yêu cầu phương thức clear() để xử lý cấu trúc (Ibe697)
Thêm asMutableList() vào MutableVector để cho phép truyền đến API công khai mà không cần sao chép toàn bộ danh sách. (I298df)
Thêm rememberCoroutineScope() để lấy CoroutineScope được quản lý trong cấu trúc nhằm khởi chạy công việc và phản hồi sự kiện. (I0e264)
Mutableve là một bộ sưu tập mới không triển khai bất kỳ giao diện Bộ sưu tập chuẩn nào. Bộ sưu tập này có tốc độ cao hơn các yêu cầu khác và chỉ được dùng trong các hoạt động triển khai nội bộ (I8ebd6)
Tạm thời xoá
StableMutableList
vàStableMutableMap
để tránh xảy ra sự cố trong phiên bản Compose bắt buộc của Kotlin. Các giao diện này sẽ được ra mắt lại khi Compose được cập nhật lên phiên bản Kotlin không gặp vấn đề.SnapshotStateList
vàSnapshotStateMap
hiện ở chế độ công khai nhưng sẽ không dùng nữa sau khiStableMutableList
vàStableMutableMap
được khôi phục. (Ia7769)Thêm hàm withFrameNanos cấp cao nhất cho thời gian ảnh động (Ie34c5)
Ngừng sử dụng chú giải @Untracked. Thay thế bằng @ComposableContract(tracked=false) (Id211e)
Đổi tên RestartableFunction và các API liên kết thành ComposableLambda, v.v. Các API này chỉ được trình biên dịch nhắm mục tiêu nên sẽ không ảnh hưởng đến khả năng tương thích cấp nguồn thông thường. Việc đổi tên chủ yếu là để cho thấy rằng lớp này hiệu quả hơn khi xuất hiện trong dấu vết ngăn xếp (I7eb25)
Chú giải @Composable không còn hợp lệ trên các lớp (Ia5f02)
Ambient<T>
hiện là @Stable thay vì @Immutable (I0b4bb)Trước khi có sự thay đổi này, trình bổ trợ biên dịch của compose sẽ không chặn các lệnh gọi tới hàm khởi tạo trong hàm @Composable nếu có (I5205a, b/158123804)
Thành phần kết hợp Recompose này không còn là một bản tóm tắt hữu ích. Hầu hết quá trình kết hợp lại sẽ xảy ra do số lần gán MutableState. Đối với những dữ liệu khác, bạn nên dùng hàm
invalidate
để kích hoạt quá trình tái cấu trúc phạm vi hiện tại. (Ifc992)Quan sát không còn là một bản tóm tắt hữu ích. Nếu cần tái tạo thì quy trình triển khai có thể được sao chép bằng cách chỉ tạo một hàm có khả năng kết hợp thực thi tham số lambda có thể kết hợp. Ví dụ:
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)Ngừng sử dụng @Direct, thay vào đó là @ComposableContract(restartable=false) (If4708)
Thêm trình chuyển đổi cho StateFlow mới ra mắt. Trình chuyển đổi này cho phép điền trước giá trị ban đầu để Trạng thái trả về không rỗng (I61dd8, b/156233789)
Thêm trình chuyển đổi cho Flow. Ví dụ về cách sử dụng: giá trị val theo flow.collectAsState() (If2198, b/153375923)
Các toán tử uỷ quyền thuộc tính [Mutable]State đã được chuyển sang phần mở rộng để hỗ trợ tính năng tối ưu hoá uỷ quyền thuộc tính Kotlin 1.4. Phương thức gọi phải thêm mục nhập để tiếp tục sử dụng
by state { ... }
hoặcby mutableStateOf(...)
. (I5312c)androidx.compose.ViewComposer đã được chuyển sang androidx.ui.node.UiComposer androidx.compose.Emittable đã bị xoá. Nội dung này dư thừa so với ComponentNode. Xoá androidx.compose.ViewAdapters. Chúng không còn là trường hợp sử dụng được hỗ trợ. Ngừng sử dụng Compose.composeInto. Thay vào đó, hãy sử dụng
setContent
hoặcsetViewContent
. Ngừng sử dụng Compose.disposeComposition. Thay vào đó, hãy sử dụng phương thứcdispose
trênComposition
đượcsetContent
trả về. Chuyển androidx.compose.Compose.subcomposeInto sang androidx.ui.core.subcomposeInto. Đổi tên ComponentNode#emitInsertAt thành ComponentNode#insertAt. Đổi tên ComponentNode#emitRemoveAt thành ComponentNode#removeAt. Đổi tên ComponentNode#emitMode thành ComponentNode#move (Idef00)Cập nhật cờ
ComposeFlags.COMPOSER_PARAM
thànhtrue
. Việc này sẽ thay đổi chiến lược tạo mã cho trình bổ trợ compose. Ở cấp độ cao, việc này tạo ra các hàm có khả năng kết hợp kèm theo tham số tổng hợp bổ sung. Tham số này được truyền đến các lệnh gọi @Composable tiếp theo để thời gian chạy quản lý quy trình thực thi một cách chính xác. Đây là thay đổi tệp nhị phân có thể gây lỗi nghiêm trọng, nhưng sẽ duy trì khả năng tương thích ở cấp độ nguồn trong tất cả mức sử dụng được cho phép của Compose. (I7971c)Các thay đổi có thể gây lỗi đối với API môi trường xung quanh. Hãy xem nhật ký và tài liệu
Ambient<T>
để biết thông tin chi tiết (I4c7ee, b/143769776)Thêm ui-livedata, cấu phần phần mềm mới có trình chuyển đổi cho LiveData. Ví dụ về cách sử dụng: giá trị val theo liveData.observeAsState() (Ie9e8c, b/150465596)
Ngừng sử dụng trình chuyển đổi Rx không có giá trị ban đầu rõ ràng. Sử dụng giá trị rỗng không phải lúc nào cũng là giá trị mặc định tốt nhất, ví dụ khi bạn có Danh sách, bạn nên bắt đầu bằng emptyList() hoặc bất kỳ giá trị mặc định hợp lý nào khác (I00025, b/161348384)
Thêm ui-rxJava2, cấu phần phần mềm mới có trình chuyển đổi cho RxJava2. Ví dụ về cách sử dụng: giá trị val theo observable.subscribeAsState() (Ifab4b, b/153369097)
Hiện có thể dùng
savedInstanceState()
cùng các kiểu dữ liệu không có giá trị (I6847f, b/153532190)listSaver() và mapSaver() mới giúp bạn dễ dàng ghi các đối tượng Saver tuỳ chỉnh (I8cf68, b/152331508)
Hàm mới: savedInstanceState() và rememberSavedInstanceState(). Chúng tương tự như state() và remember() nhưng có hỗ trợ trạng thái thực thể đã lưu (If1987, b/152025209)
Sửa lỗi
runOnIdleCompose
đã được đổi tên thànhrunOnIdle
(I83607)- Tạo API thử nghiệm LayoutNode (I4f2e9)
- Ngừng sử dụng androidx.ui.foundation.TextFieldValue và androidx.ui.input.EditorValue. Ngừng sử dụng cả những thành phần kết hợp TextField, FilledTextField và CoreTextField sử dụng kiểu dữ liệu đó. Vui lòng sử dụng android .ui.input.TextFieldValue để thay thế (I4066d, b/155211005)
- Xoá DrawBackground API không dùng nữa, thay vào đó là API mở rộng drawBackground trên Đối tượng sửa đổi. Tái cấu trúc quy trình triển khai màu, bút vẽ và màu vẽ drawBackground để giảm đường dẫn mã cũng như xoá yêu cầu tạo Đối tượng sửa đổi trong phạm vi cấu trúc. (I0343a)
- Cập nhật các API của Compose lên cấp cao hơn để hiển thị CanvasScope thay cho Canvas. Việc này giúp người sử dụng không cần phải duy trì các đối tượng Paint của họ. Đối với những người sử dụng vẫn yêu cầu quyền truy cập vào Canvas, họ có thể dùng phương thức mở rộng drawCanvas. Phương thức này cung cấp một lệnh gọi lại để tạo ra một lệnh vẽ cho Canvas cơ bản. (I80afd)
- Thay đổi API hàm lambda theo sau WithConstraints. Giờ đây, thay vì 2 tham số, giao diện này có phạm vi trình thu nhận bên cạnh các giới hạn và layoutDirection cung cấp thuộc tính minWidth, maxWidth, minHeight và maxHeight ở dạng Dp (I91b9a, b/149979702)
- Thêm đối tượng sửa đổi khoảng đệm đối xứng. (I39840)
- Cập nhật wrapContentWidth và wrapContentHeight để kỳ vọng Căn chỉnh dọc hoặc ngang thay vì bất kỳ Căn chỉnh nào. Cập nhật đối tượng sửa đổi trọng lực để chấp nhận Căn chỉnh dọc hoặc ngang. Hàng, Cột và Ngăn xếp được cập nhật để hỗ trợ Căn chỉnh liên tục tuỳ chỉnh. (Ib0728)
- mô-đun ui-text được đổi tên thành ui-text-core (I57dec)
- Cải thiện API DrawModifier:
- Tạo phạm vi của trình thu nhận cho draw() ContentDrawScope
- Xoá mọi tham số trên draw()
- DrawScope có giao diện giống như CanvasScope cũ
- ContentContentScope có phương thức DrawContent() (Ibaced, b/152919067)
- Ngừng sử dụng ColoredRect. Thay vào đó, hãy sử dụng
Box(Modifier.preferredSize(width, height).drawBackground(color))
. (I499fa, b/152753731) - Thay thế Đối tượng sửa đổi cùng với toán tử bằng các hàm mở rộng factory (nhà máy) (I225e4)
- Giờ đây, bạn có thể truy cập các thành phần RowScope và ColumnScope bên ngoài Hàng và Cột. (I3a641)
- Đổi tên LayoutFlexible thành LayoutWeight. Đổi tên thông số chặt chẽ để điền. (If4738)
- WithConstraints đã nhận tham số LayoutDirection (I6d6f7)
- Đổi tên nền thành DrawBackground và đặt ghi nhớ mặc định tên này (Ia0bd3)
- Thay thế ButtonStyle bằng các chức năng riêng biệt và loại bỏ quá tải (chuỗi) văn bản. Xem mẫu đã cập nhật để biết thông tin về cách sử dụng. (If63ab, b/146478620, b/146482131)
runOnIdleCompose
vàrunOnUiThread
hiện là các hàm chung chứ không phải phương thức trên ComposeTestRule. (Icbe8f)
Đóng góp bên ngoài
- Xoá API không cần thiết như Trình lặp (Looper) và Trình xử lý (Handler) khỏi lớp quy trình chuyển đổi của Compose Runtime (I6847d)
- Loại bỏ
Flow<T>.collectAsState()
không có giá trị ban đầu. Thay vào đó, hãy sử dụngStateFlow<T>
hoặc truyền giá trị ban đầu rõ ràng. (I63f98, b/157674865)