Thời gian chạy Compose

Các thành phần 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 bổ trợ Trình biên dịch Compose nhắm đến.
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 22 tháng 2 năm 2023 1.3.3 - 1.4.0-beta02 -

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ómMô tả
compose.animationTạo ảnh động trong các ứng dụng Jetpack Compose để làm phong phú trải nghiệm người dùng.
compose.compilerBiế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.foundationViế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.materialXâ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.material3Xâ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.runtimeCá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.uiCá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.3.3"
    implementation "androidx.compose.runtime:runtime-livedata:1.3.3"
    implementation "androidx.compose.runtime:runtime-rxjava2:1.3.3"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.4.2"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.runtime:runtime:1.3.3")
    implementation("androidx.compose.runtime:runtime-livedata:1.3.3")
    implementation("androidx.compose.runtime:runtime-rxjava2:1.3.3")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.4.2"
    }

    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.

Báo lỗi mới

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

Runtime Tracing Phiên bản 1.0

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 mà khi có công cụ hỗ trợ (sắp có) sẽ giúp truy vết ở 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.4

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-beta02androidx.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ào Composer.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-alpha05androidx.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àng toList(), còn SnapshotStateMap hiện có phương thức triển khai rõ ràng toMap(). 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ụng snapshotFlow 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

Theo dõi quá trình hợp thành

API phản chiếu thành phần kết hợp

Sửa lỗi thời gian chạy

Hệ thống ảnh chụp nhanh

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ố rememberrememberCoroutineScope, thay đổi thành crossinline. 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

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ào CompositionData 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 movableContentOfAPI, 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ê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à 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

Hiệu suất trong 1.2

Các lỗi sửa trong 1.2

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ện CompositionTracer. (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, ComposableTargetMarkerComposableOpenTarget 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ặc ReusableComposeNode cần thêm chú giải CompoableTarget 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ằng ComposableTargetMarker, sau đó trực tiếp sử dụng chú giải được đánh dấu thay cho ComposableTarget. Một chú giải của thành phần kết hợp được đánh dấu bằng ComposableTargetMarker sẽ tương đương với ComposbleTarget 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ụng ComposableTargetMarker, vui lòng xem anroidx.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ào CompositionData để 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ại androidx.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ằng Recomposer.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 Kotlin 1.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à AGP 7.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 trong src/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ụng adb 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, SP để 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ớp androidx.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ức fun isPlaced(): Boolean trên LayoutNode có chữ ký isPlaced()Z.

  • Những mẫu này có thể có ký tự đại diện (**, *?) để 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 cho ComposeNode. (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ọi withFrameNanos hoặc Recomposer.runRecomposeAndApplyChanges mà không có MonotonicFrameClock sẽ gửi IllegalStateException. (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 cho compositionLocalOfstaticCompositionLocalOf.

    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 sau selectedonClick.
    • Đã đổi tên thông số alwaysShowLabels trong NavigationNavigationItem thành alwaysShowLabel.
    • Đã đổ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ào darkColors(). Thường thì màu này giống với màu secondary 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 trong Slider thành onValueChangeFinished và đặt là có giá trị rỗng.
    • Đã đổi tên thông số text trong Snackbar thành content để đảm bảo tính nhất quán.
    • Thêm tham số contentPadding vào DropdownMenuItem để cho phép tuỳ chỉnh khoảng đệm mặc định và đặt content làm phần mở rộng trên RowScope.
    • Đổi tên ModalDrawerLayout thành ModalDrawer.
    • Đổi tên BottomDrawerLayout thành BottomDrawer.
    • (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)

  • snapshotFlowwithMutableSnapshot 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ế cho CompositionLifecycleObserver 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ư WithConstraintsScaffold, giúp đảm bảo rằng một lệnh gọi onEnter không đáng tin cậy và đã bị xoá cho RememberObserver.

    RememberObserver thêm onAbandoned được gọi nếu thực thể RememberObserver được trả về từ lệnh gọi lại truyền đến remember 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ủa RememberObserver (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ả onForgottenonAbandoned), 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ổ trong onRemembered, onAbandoned có thể bị bỏ qua vì đối tượng này sẽ không được gọi nếu onRemembered đượ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ành insertTopDown().

    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ặc insertBottomUp(), 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ư LayoutNodeView, 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 sang content, 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 khai MonotonicFrameClock. Người gọi của withFrameNanos 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ặc waitForIdle. 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 snapshotFlowwithMutableSnapshot để 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ới remember { 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ẫu by 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ụng AndroidView 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()savedInstanceStateOf() thành structuralEqualityPolicy() 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()savedInstanceStateOf() sử dụng mutableStateOf() trong quá trình triển khai nên đã được thay đổi để nhất quán với mutableStateOf().

    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ụng state 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ớp data, có thể thấy hiệu suất suy giảm vì phương thức equals() theo mặc định giờ đây được gọi khi chỉ định mutableStateOf().

    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 đến mutableStateOf(), ambientOf()savedInstanceStateOf(). (Ic21a7)

  • RowColumn 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ính val của một lớp dữ liệu, rồi sử dụng state 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ợi copy(...) 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ính var của lớp ban đầu bằng các thuộc tính varmutableStateOf 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:

    1. Một số cuộc gọi sẽ bỏ qua dù trước đây không như vậy
    2. Đă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ản vararg trở đi. 5. Ngừng sử dụng chú giải Pivotal. Thay vào đó, hãy sử dụng key. 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á StableMutableListStableMutableMap để 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 đề.

    SnapshotStateListSnapshotStateMap hiện ở chế độ công khai nhưng sẽ không dùng nữa sau khi StableMutableListStableMutableMap đượ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ặc by 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ặc setViewContent. Ngừng sử dụng Compose.disposeComposition. Thay vào đó, hãy sử dụng phương thức dispose trên Composition được setContent 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ành true. 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ành runOnIdle (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)
  • runOnIdleComposerunOnUiThread 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ụng StateFlow<T> hoặc truyền giá trị ban đầu rõ ràng. (I63f98, b/157674865)