รันไทม์ของ Compose
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(ดูเอกสารอ้างอิง API สำหรับแพ็กเกจ Compose ทั้งหมด)
| อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| 19 พฤศจิกายน 2025 | 1.9.5 | 1.10.0-rc01 | - | - |
โครงสร้าง
Compose คือการรวมรหัสกลุ่ม Maven 7 รายการภายใน androidx แต่ละกลุ่ม
มีฟังก์ชันการทำงานย่อยที่กำหนดเป้าหมายไว้ โดยแต่ละกลุ่มจะมีชุดหมายเหตุประจำรุ่นของตัวเอง
ตารางนี้อธิบายกลุ่มและลิงก์ไปยังชุดหมายเหตุประจำรุ่นแต่ละชุด
| กลุ่ม | คำอธิบาย |
|---|---|
| compose.animation | สร้างภาพเคลื่อนไหวในแอปพลิเคชัน Jetpack Compose เพื่อยกระดับประสบการณ์ของผู้ใช้ |
| compose.compiler | แปลงฟังก์ชัน @Composable และเปิดใช้การเพิ่มประสิทธิภาพด้วยปลั๊กอินคอมไพเลอร์ Kotlin |
| compose.foundation | เขียนแอปพลิเคชัน Jetpack Compose ด้วยองค์ประกอบพื้นฐานที่พร้อมใช้งาน และขยายรากฐานเพื่อสร้างชิ้นส่วนระบบการออกแบบของคุณเอง |
| compose.material | สร้าง UI ของ Jetpack Compose ด้วยคอมโพเนนต์ Material Design ที่พร้อมใช้งาน นี่คือจุดแรกเข้าของ Compose ในระดับที่สูงขึ้น ซึ่งออกแบบมาเพื่อจัดหาคอมโพเนนต์ที่ตรงกับคอมโพเนนต์ที่อธิบายไว้ที่ www.material.io |
| compose.material3 | สร้าง UI ของ Jetpack Compose ด้วยคอมโพเนนต์ Material Design 3 ซึ่งเป็นวิวัฒนาการขั้นถัดไปของ Material Design Material 3 มีการปรับปรุงธีมและคอมโพเนนต์ รวมถึงฟีเจอร์การปรับเปลี่ยนในแบบของคุณของ Material You เช่น สีแบบเปลี่ยนอัตโนมัติ และออกแบบมาให้สอดคล้องกับสไตล์ภาพและ UI ของระบบ Android 12 ใหม่ |
| compose.runtime | ส่วนประกอบพื้นฐานของรูปแบบการเขียนโปรแกรมและการจัดการสถานะของ Compose รวมถึงรันไทม์หลักสำหรับปลั๊กอินคอมไพเลอร์ Compose เพื่อกำหนดเป้าหมาย |
| compose.ui | องค์ประกอบพื้นฐานของ Compose UI ที่จำเป็นต่อการโต้ตอบกับอุปกรณ์ ซึ่งรวมถึงเลย์เอาต์ การวาด และอินพุต |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มการอ้างอิงใน Compose คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับ
แอปหรือโมดูล
Groovy
dependencies { implementation "androidx.compose.runtime:runtime:1.9.5" implementation "androidx.compose.runtime:runtime-livedata:1.9.5" implementation "androidx.compose.runtime:runtime-rxjava2:1.9.5" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.9.5") implementation("androidx.compose.runtime:runtime-livedata:1.9.5") implementation("androidx.compose.runtime:runtime-rxjava2:1.9.5") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยให้ Jetpack ทำงานได้ดีขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
การติดตามรันไทม์เวอร์ชัน 1.7
เวอร์ชัน 1.7.0-rc01
18 กันยายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-tracing:1.7.0-rc01 เวอร์ชัน 1.7.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
การติดตามรันไทม์เวอร์ชัน 1.0
เวอร์ชัน 1.0.0-beta01
29 พฤศจิกายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-tracing:1.0.0-beta01 เวอร์ชัน 1.0.0-beta01 มีคอมมิตเหล่านี้
เวอร์ชัน 1.0.0-alpha05
15 พฤศจิกายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-tracing:1.0.0-alpha05 เวอร์ชัน 1.0.0-alpha05 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- ปักหมุดการอ้างอิงไปยังเวอร์ชันเสถียรที่รองรับต่ำสุด (เช่น compose-runtime และ tracing-perfetto) เพื่อแก้ไขปัญหาที่ compose-runtime-tracing จะนำ compose-runtime เวอร์ชันใหม่กว่ามาไว้ในแอป
เวอร์ชัน 1.0.0-alpha04
23 สิงหาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-tracing:1.0.0-alpha04 เวอร์ชัน 1.0.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ใช้งานร่วมกับ Benchmark และ Tracing Perfetto เวอร์ชันล่าสุดได้ ซึ่งช่วยให้รองรับการติดตามการคอมโพสิตเมื่อเริ่มต้นแอป (Cold Start) เช่น ใน AndroidX Benchmark และ Android Studio (ตั้งแต่ Hedgehog Beta 2 เป็นต้นไป)
การเปลี่ยนแปลง API
- เปลี่ยนชื่อ
androidx.tracing.perfetto.Traceเป็นandroidx.tracing.perfetto.PerfettoSdkTraceแล้ว (I44af8) - ทำให้ API ของ Tracing Perfetto SDK สอดคล้องกับ
android.os.Trace(I73ba0, b/282199917) - ข้อกำหนดเบื้องต้นสำหรับการติดตามเมื่อแอปเริ่มต้น (Iad890)
- รวมไฟล์ API เวอร์ชันทดลองและเวอร์ชันสาธารณะ (I0f2e1, b/278769092)
เวอร์ชัน 1.0.0-alpha02
8 กุมภาพันธ์ 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-tracing:1.0.0-alpha02 เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ไม่มีการเปลี่ยนแปลงฟังก์ชันการทำงาน การเพิ่มประสิทธิภาพหลายรายการในทรัพยากร Dependency ที่ดาวน์สตรีม
androidx.tracing:tracing-perfetto*
เวอร์ชัน 1.0.0-alpha01
7 กันยายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-tracing:1.0.0-alpha01 เวอร์ชัน 1.0.0-alpha01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
androidx.compose.runtime:runtime-tracingเป็นไลบรารีที่ช่วยให้สามารถทำการติดตามแบบขยายในแอป Compose ได้เมื่อมีเครื่องมือที่รองรับ (เร็วๆ นี้) โดยรุ่นเริ่มต้นนี้คือ 1.0.0-alpha01
เวอร์ชัน 1.10
เวอร์ชัน 1.10.0-rc01
19 พฤศจิกายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.10.0-rc01 เวอร์ชัน 1.10.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ป้องกันการแก้ไขแบบรีเอนทรานต์เมื่อบันทึกสถานะที่ได้มาใน
SnapshotStateObserver(I7b862, b/435655844, b/456249373, b/402535073) - [Lint] แก้ไขข้อบกพร่องเล็กน้อยเพื่อให้เครื่องตรวจจับเตือนการกำหนดค่าแบบผสมอย่างถูกต้อง (I08319, b/456775556)
เวอร์ชัน 1.10.0-beta02
5 พฤศจิกายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.10.0-beta02 เวอร์ชัน 1.10.0-beta02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
เราได้ทำการเปลี่ยนแปลงหลายอย่างที่ไม่รองรับ API เพื่อให้การติดตั้งและการจัดการ
RetainedValuesStoreง่ายขึ้น การโทรไปยังretainและRetainedEffectที่มีอยู่จะไม่ได้รับผลกระทบ แต่RetainedValuesStoreที่กำหนดเองจะต้องมีการย้ายข้อมูลเพื่อให้เข้ากันได้กับรุ่นนี้ (If3c2f, b/451921682, b/450539803)RetainedValuesStoreไม่แสดง API ระดับต่ำเพื่อเริ่ม/หยุดการเก็บรักษาอีกต่อไป ตอนนี้สถานะการเก็บรักษาจะติดตามเนื้อหาโดยอัตโนมัติ ตอนนี้LocalRetainedValuesStoreProviderพร้อมให้ติดตั้งRetainedValuesStoreแล้ว ไม่ควรระบุLocalRetainedValuesStoreโดยตรง ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงเหล่านี้ได้ในเอกสารประกอบและตัวอย่างที่อัปเดตแล้วเปลี่ยนชื่อ
RetainedValuesStoreProviderเป็นRetainedValuesStoreRegistryตอนนี้คลาสนี้จะแสดงเฉพาะ API เพื่อติดตั้งและจัดการRetainedValuesStoreในการแต่งเท่านั้นControlledRetainedValuesStoreถูกแทนที่ด้วยManagedRetainedValuesStoreตอนนี้
RetainedValuesStoreเป็นอินเทอร์เฟซแล้ว
ก่อนหน้านี้ การติดตั้ง RetainedValuesStore ที่กำหนดเองอาจมีลักษณะดังนี้
val retainedValuesStore = retainControlledRetainedValuesStore()
if (active) {
CompositionLocalProvider(LocalRetainedValuesStore provides retainedValuesStore) {
content()
}
val composer = currentComposer
DisposableEffect(retainedValuesStore) {
val cancellationHandle =
if (retainedValuesStore.retainExitedValuesRequestsFromSelf > 0) {
composer.scheduleFrameEndCallback {
retainedValuesStore.stopRetainingExitedValues()
}
} else {
null
}
onDispose {
cancellationHandle?.cancel()
retainedValuesStore.startRetainingExitedValues()
}
}
}
การเปลี่ยนแปลง API เหล่านี้จะช่วยให้คุณแสดงการติดตั้งนี้ด้วยโค้ดต่อไปนี้แทนได้
val retainedValuesStore = retainManagedRetainedValuesStore()
if (active) {
LocalRetainedValuesStoreProvider(retainedValuesStore) {
content()
}
}
การแก้ไขข้อบกพร่อง
- โอนการลบล้างขอบเขตในเนื้อหาที่ย้ายได้ก่อนที่จะย้ายเนื้อหานั้นออกจากตารางช่อง (I9d123, b/451651649)
เวอร์ชัน 1.10.0-beta01
22 ตุลาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.10.0-beta01 เวอร์ชัน 1.10.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
RetainedValuesStore.getExitedValueOrDefaultเปลี่ยนชื่อเป็นRetainedValuesStore.getExitedValueOrElse(If9653, b/452340613)- เปลี่ยนชื่อ
isKeepingExitedValuesเป็นisRetainingExitedValuesแล้ว (I660bf, b/437095756) - เปลี่ยนชื่อ
RetainScopeเป็นRetainedValuesStoreแล้ว เปลี่ยนชื่อRetainScopeHolderเป็นRetainedValuesStoreRegistryแล้ว เปลี่ยนชื่อRetainScopeHolder.RetainScopeProviderเป็นRetainedValuesStoreRegistry.ProvideChildRetainedValuesStoreแล้ว (Idf23a, b/437095756)
การแก้ไขข้อบกพร่อง
- การเริ่มต้นใช้งาน
SavedStateในSaveableStateRegistryจะล่าช้าจนกว่าจะมีการใช้งานครั้งแรก (Ic0a93)
เวอร์ชัน 1.10.0-alpha05
8 ตุลาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.10.0-alpha05 เวอร์ชัน 1.10.0-alpha05 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- กรอก Stack Trace สำหรับ
DiagnosticComposeExceptionในโหมดรีลีส (Ib76cb) - แก้ไขปัญหาในสถานะสแนปชอตที่การใช้นโยบายผสานสำหรับประเภทอาจทำให้ระบบคำนวณค่าก่อนหน้าไม่ถูกต้อง ซึ่งจะแสดงค่าในอนาคตของสถานะแทนค่าก่อนหน้า กรณีนี้จะเกิดขึ้นหากมีสแนปชอตที่เปลี่ยนแปลงได้มากกว่า 2 รายการที่รอดำเนินการ และค่าอย่างน้อย 1 ค่าที่กำลังนำไปใช้มีนโยบายการผสาน (I527b5, b/442791065)
เวอร์ชัน 1.10.0-alpha04
24 กันยายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.10.0-alpha04 เวอร์ชัน 1.10.0-alpha04 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
RetainScopeHolderAPI เพื่อจัดการคอลเล็กชันของRetainScopesซึ่งใช้เพื่อใช้การเก็บรักษาสำหรับคอนเทนเนอร์และโฮสต์การนำทางที่ประกอบด้วยองค์ประกอบย่อยจำนวนมากที่มีอายุการเก็บรักษาต่างกันได้ (I10e0f) - เพิ่ม API
RetainedContentHostและretainControlledRetainScopeซึ่งใช้สร้างRetainScopesที่จัดการโดยอัตโนมัติสำหรับเนื้อหาที่หายไป เช่น บานหน้าต่างที่ยุบ (If81f6) - เลิกใช้การโอเวอร์โหลดอินไลน์ของ
Updater#setเนื่องจากมีการจัดรูปแบบค่าที่ระบุหลายครั้งเกินไป เพิ่มโอเวอร์โหลดของUpdater#initซึ่งใช้พารามิเตอร์ที่หลีกเลี่ยงการกำหนดให้ใช้ Lambda ที่จับภาพ (Id679e) - เปิดตัว
RetainedEffectซึ่งเป็น API ผลข้างเคียงที่คล้ายกับDisposableEffectซึ่งจะทำตามวงจรการเก็บรักษาแทนวงจรการคอมโพส API นี้มีไว้สำหรับใช้กับเอฟเฟกต์ที่เชื่อมโยงกับการเก็บรักษาออบเจ็กต์อื่นที่ไม่ได้หรือใช้RetainObserverไม่ได้ (I1c61f, b/177562901) - แก้ไขเอกสารประกอบของ
RetainObserver.onRetainedและเพิ่มRetainObserver.onUnusedซึ่งเป็นสำเนาของRememberObserver.onAbandoned(Ia6fc5)
การแก้ไขข้อบกพร่อง
- แก้ไขการจดจำการเรียกใช้หลังจากกลุ่มแรกในฟังก์ชัน (เช่น การเรียกใช้ที่ใช้ร่วมกันได้) และก่อนกลุ่มที่นำออกได้ (เช่น คำสั่ง
if) ซึ่งอาจเรียกใช้onForgottenในลำดับที่ไม่ถูกต้อง (I453f6, b/346821372) - หลีกเลี่ยงการข้ามบริบทของโครูทีนเมื่อเริ่มต้น
LaunchedEffect(I8d2c3b)
เวอร์ชัน 1.10.0-alpha03
10 กันยายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.10.0-alpha03 เวอร์ชัน 1.10.0-alpha03 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- ขอแนะนำร่องรอยสแต็ก Compose ที่อิงตามคีย์กลุ่มซึ่งทำงานในแอปที่ย่อขนาดแล้ว ปลั๊กอิน Gradle ของคอมไพเลอร์ Compose จะสร้างการแมป Proguard สำหรับการติดตามเหล่านี้โดยเริ่มจาก Kotlin 2.3.0 ระบบจะปิดใช้ Stack Trace เหล่านี้โดยค่าเริ่มต้น ให้ใช้
ComposeStackTraceMode.GroupKeysเพื่อเปิดใช้ (Ifbcb5) - เพิ่มอินเทอร์เฟซ:
IdentifiableRecomposeScopeสำหรับเครื่องมือ (Idd5e0, b/434194620) - ป้องกันไม่ให้เกิดการยกเลิกที่ไม่จำเป็นในองค์ประกอบที่มี
CompositionLocalContext(I3fa21, b/412750209)
การแก้ไขข้อบกพร่อง
- ระบุไว้ในเอกสารประกอบและในเครื่องมือว่าระบบจะเก็บคีย์ที่ส่งผ่านเพื่อคงไว้ด้วย หลีกเลี่ยงการส่งคีย์เพื่อคงไว้ซึ่งจะทำให้เกิดหน่วยความจำรั่ว (Ib553b, b/177562901)
- แก้ไขปัญหาเมื่อมีการเรียกใช้
resume()ของคอมโพสิทที่หยุดชั่วคราวในเธรดอื่น สถานะของการแจ้งเตือนที่รอดำเนินการอาจสับสนเมื่อเธรดหลักพยายามคอมโพสิทที่หยุดชั่วคราวอีกครั้งสำหรับเฟรมถัดไป (Ie5f17, b/442649894) - บันทึกข้อยกเว้นที่บันทึกไว้ในการเรียบเรียง (I47d78, b/432799675, b/436878515, b/359623674, b/400436355)
เวอร์ชัน 1.10.0-alpha02
27 สิงหาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.10.0-alpha02 เวอร์ชัน 1.10.0-alpha02 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
@DoNotRetainซึ่งใช้เพื่อประกอบคำอธิบายประกอบประเภทที่ไม่ควรใช้กับretainAPI ได้ เนื่องจากอาจทำให้เกิดการรั่วไหลของทรัพยากร (Ie5435) - โปรเจ็กต์ที่เผยแพร่ด้วย Kotlin 2.0 ต้องใช้ KGP 2.0.0 ขึ้นไป (Idb6b5)
การแก้ไขข้อบกพร่อง
- แก้ไขเนื้อหาที่เคลื่อนย้ายได้เพื่อให้คำนวณการดำเนินการกับ Applier ได้อย่างถูกต้องเมื่อเนื้อหาแก้ไขโหนดรูทของคอมโพสิต เมื่อคำนวณการเปลี่ยนแปลงสำหรับเนื้อหาที่เคลื่อนย้ายได้ ระบบอาจปล่อยให้
up()คอลรอดำเนินการและไม่ได้ส่งไปยังแอปพลิเคชัน ซึ่งทำให้สถานะของแอปพลิเคชันอยู่ในตำแหน่งที่ไม่ถูกต้องสำหรับการใช้งานครั้งต่อๆ ไป (I7c583), (I47b70) - ทำเครื่องหมาย
CheckResultว่าเลิกใช้งานแล้วเนื่องจากไม่ได้มีไว้ให้ใช้งาน (I32934)
เวอร์ชัน 1.10.0-alpha01
13 สิงหาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.10.0-alpha01 เวอร์ชัน 1.10.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ขอแนะนำ API สำหรับการเก็บรักษา เช่นเดียวกับ
rememberSaveable, retain สามารถคงค่าและบันทึกค่าที่จดจำไว้ซึ่งออกจากลำดับชั้นขององค์ประกอบ ค่าที่เก็บไว้จะไม่ได้รับการซีเรียลไลซ์และมีอายุการใช้งานสั้นกว่าค่าที่บันทึกไว้ และจะทำงานคล้ายกับViewModelของ androidx ดูรายละเอียดเพิ่มเติมในเอกสารประกอบ (Ia3105, b/177562901) - เพิ่ม API
awaitOrScheduleNextCompositionEnd()ซึ่งจะเรียกใช้ฟังก์ชันเรียกกลับเมื่อ Recomposer จัดองค์ประกอบเฟรมปัจจุบันเสร็จ หาก Recomposer ไม่ได้จัดองค์ประกอบเฟรมในขณะนี้ API นี้จะระงับจนกว่าการจัดองค์ประกอบของเฟรมถัดไปจะเสร็จสิ้น และกำหนดเวลาให้จัดองค์ประกอบเฟรมใหม่ (Ib873c) - เพิ่ม API ผู้ให้บริการในพื้นที่สำหรับการคืนค่าที่ไม่ใช่หน่วย (I22521, b/271871288)
- เพิ่มฟีเจอร์แฟล็ก
isMovableContentUsageTrackingEnabledที่ช่วยให้ติดตามการใช้งานเนื้อหาที่เคลื่อนย้ายได้เพื่อหลีกเลี่ยงค่าใช้จ่ายบางอย่างเมื่อสร้างเนื้อหาในครั้งแรก ขณะนี้ฟีเจอร์นี้ปิดใช้อยู่โดยค่าเริ่มต้น (Ia713d)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องในเนื้อหาที่เคลื่อนย้ายได้เมื่อย้ายระหว่างองค์ประกอบย่อย (I3fa1e, b/436858107)
- แก้ไขข้อบกพร่องที่ทำให้ส่วนหนึ่งของ Stack Trace ที่ประกอบได้หายไปเมื่ออยู่ภายใน Subcomposition ที่ซ้อนกันหลายรายการ (I98c6f)
- ย้าย minSdk เริ่มต้นจาก API 21 ไปยัง API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
- แก้ไข Race Condition เมื่อมีการอัปเดตสถานะภายในขององค์ประกอบที่หยุดชั่วคราวได้จากหลายเธรด (I03895)
- อัปเดตเครื่องสังเกตการณ์การลงทะเบียนองค์ประกอบให้เรียกใช้ก่อนองค์ประกอบเริ่มต้น (I4adca, b/430600932)
- แก้ไขข้อบกพร่องเล็กน้อยเพื่อให้
AutoboxingStateValuePropertyDetectorใช้งานได้กับทั้ง K1 และ K2 (Ie81c1)
การมีส่วนร่วมภายนอก
- ทําให้อาร์ติแฟกต์ runtime-rxjava2 เป็นแบบหลายแพลตฟอร์มและเพิ่ม JVM เป็นเป้าหมายที่รองรับ (I5409e)
- ทําให้อาร์ติแฟกต์ runtime-rxjava3 เป็นแบบหลายแพลตฟอร์มและเพิ่ม JVM เป็นเป้าหมายที่รองรับ (I97e84)
เวอร์ชัน 1.9
เวอร์ชัน 1.9.5
19 พฤศจิกายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.5 เวอร์ชัน 1.9.5 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- โอนการลบล้างขอบเขตในเนื้อหาที่ย้ายได้ก่อนที่จะย้ายเนื้อหานั้นออกจากตารางช่อง (I9d123, b/451651649)
เวอร์ชัน 1.9.4
22 ตุลาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.4 เวอร์ชัน 1.9.4 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.9.3
8 ตุลาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.3 เวอร์ชัน 1.9.3 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.9.2
24 กันยายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.2 เวอร์ชัน 1.9.2 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.9.1
10 กันยายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.1 เวอร์ชัน 1.9.1 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- หลีกเลี่ยงการเรียบเรียงเพลงที่กำลังเรียบเรียง (Iacb01)
- ป้องกันไม่ให้ขอบเขตการเขียนใหม่หยุดชั่วคราว 2 ครั้ง (I060b2, b/431584881)
เวอร์ชัน 1.9.0
13 สิงหาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.0 เวอร์ชัน 1.9.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.8.0
- การตรวจสอบ Lint ที่มาพร้อมกับ Compose ต้องใช้ AGP เวอร์ชัน 8.8.2 เป็นอย่างน้อย หากอัปเกรด AGP ไม่ได้ คุณสามารถอัปเกรด Lint แยกต่างหากได้โดยใช้
android.experimental.lint.version=8.8.2(หรือเวอร์ชันใหม่กว่า) ใน gradle.properties หากต้องการเรียกใช้การตรวจสอบ Lint ของ Compose ภายใน IDE คุณต้องใช้ Android Studio Ladybug หรือเวอร์ชันที่ใหม่กว่า - เราได้สร้างไลบรารีคำอธิบายประกอบรันไทม์ใหม่แล้ว ซึ่งมีคำจำกัดความของคำอธิบายประกอบโดยไม่ต้องขึ้นอยู่กับรันไทม์ของ Compose จึงสามารถใช้จากโมดูลที่ไม่ใช่ Compose ได้
@Stable,@Immutableและ@StableMarkerได้รับการย้ายไปยังรันไทม์-คำอธิบายประกอบ เพื่ออนุญาตให้ใส่คำอธิบายประกอบในโมดูลที่ไม่ใช่ Compose- เพิ่ม
@FrequentlyChangingValueและ@RememberInCompositionลงใน runtime-annotation แล้ว@FrequentlyChangingValueทำเครื่องหมายการประกาศที่อาจทำให้เกิดการจัดองค์ประกอบใหม่บ่อยครั้ง และ@RememberInCompositionทำเครื่องหมายการประกาศที่ควรจดจำในการจัดองค์ประกอบ การตรวจสอบ Lint ที่เกี่ยวข้องจะเตือนการใช้งานที่ไม่ถูกต้อง
เวอร์ชัน 1.9.0-rc01
30 กรกฎาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.0-rc01 เวอร์ชัน 1.9.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- อัปเดตเครื่องสังเกตการณ์การลงทะเบียนองค์ประกอบให้เรียกใช้ก่อนองค์ประกอบเริ่มต้น (I4adca, b/430600932)
เวอร์ชัน 1.9.0-beta03
16 กรกฎาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.0-beta03 เวอร์ชัน 1.9.0-beta03 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.9.0-beta02
2 กรกฎาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.0-beta02 เวอร์ชัน 1.9.0-beta02 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ลดอายุการใช้งานอ้างอิงของค่าในตารางช่องระหว่างการคอมโพส ในบางกรณี ข้อมูลอ้างอิงในตารางสล็อตอาจอยู่ได้นานกว่าที่จำเป็น 1 เฟรม (I49e74, b/418516940)
- นำการดัดแปลง Kotlin สำหรับวิธีการรีโหลดด่วนออก (Ic56a3, b/426871325)
เวอร์ชัน 1.9.0-beta01
18 มิถุนายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.0-beta01 เวอร์ชัน 1.9.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม API เครื่องมือสำหรับการแยกวิเคราะห์ข้อมูลแหล่งที่มาที่คอมไพเลอร์ Compose เพิ่ม (Iceaf9, b/408492167)
- ตอนนี้
SnapshotStateSetได้ติดตั้งใช้งานParcelableใน Android แล้ว และตอนนี้ระบบรองรับการใช้งานเป็นส่วนหนึ่งของrememberSaveable { ... }แล้ว (I755dd, b/378623803) - ตอนนี้
SnapshotStateListได้ติดตั้งใช้งานParcelableใน Android แล้ว และตอนนี้ระบบรองรับการใช้งานเป็นส่วนหนึ่งของrememberSaveable { ... }แล้ว (Id18be, b/378623803) - ตอนนี้
movableContentOf()มีคำอธิบายประกอบ@RememberInCompositionซึ่งช่วยให้ Lint ตรวจพบการใช้งานที่ไม่ถูกต้อง (I2738d) - อัปเดต API ของ Composition Observer เวอร์ชันทดลองเพื่อให้สังเกตสาเหตุของการเขียนคอมโพสใหม่ได้อย่างครอบคลุมมากขึ้น (I32b6a)
- เปลี่ยน
setDiagnosticStackTraceEnabledเป็น "ทดลอง" เพื่อรองรับการพัฒนาฟีเจอร์นี้ในอนาคต (I11db3) currentCompositeKeyHashเลิกใช้งานแล้ว โปรดใช้currentCompositeKeyHashCodeแทน API การแทนที่จะเข้ารหัสแฮชเดียวกันด้วยบิตที่มากขึ้น ซึ่งจะช่วยลดโอกาสที่กลุ่มแบบสุ่ม 2 กลุ่มที่ไม่เกี่ยวข้องในลำดับชั้นการจัดองค์ประกอบจะมีคีย์แฮชเดียวกันได้อย่างมาก (I4cb6a, b/177562901)- โปรเจ็กต์ที่เผยแพร่ด้วย Kotlin 2.0 ต้องใช้ KGP 2.0.0 ขึ้นไป (Idb6b5)
@Stable,@Immutableและ@StableMarkerได้รับการย้ายไปยังคำอธิบายประกอบขณะรันไทม์ (ในลักษณะที่เข้ากันได้) ตอนนี้คุณสามารถใช้คำอธิบายประกอบรันไทม์ได้หากต้องการใช้คำอธิบายประกอบเหล่านี้จากไลบรารีที่ไม่ขึ้นอยู่กับ Compose (I23a16)- เปลี่ยนชื่อโอเวอร์โหลด
rememberSaveableที่รับKSerializerเป็นrememberSerializableการเปลี่ยนแปลงนี้จะชี้แจงการใช้งานที่ตั้งใจไว้กับkotlinx.serializationการรองรับคลาสkotlinx.Serializableทั่วไปโดยตรงในrememberSaveableจะต้องใช้พารามิเตอร์ประเภทreifiedซึ่งจะทําให้ความเข้ากันได้ของแหล่งที่มาเสียหายเนื่องจากต้องให้ข้อมูลประเภทที่ทำให้เป็นจริงในเวลาคอมไพล์ (Idb875, I38627, b/376028110)
การแก้ไขข้อบกพร่อง
- ต้องทิ้งองค์ประกอบที่ตั้งค่าด้วยเนื้อหาที่หยุดชั่วคราวซึ่งถูกยกเลิก ตอนนี้การเรียบเรียงเพลงจะตรวจสอบเรื่องนี้และจะแสดงข้อผิดพลาดหากมีการนำมาใช้ซ้ำ (I2daa5, b/406792785)
- แก้ไขการเขียนที่หยุดชั่วคราวได้เพื่อไม่ให้ส่ง
onForgottenที่ไม่ถูกต้องเพื่อจดจำผู้สังเกตการณ์เมื่อมีการทิ้งการเขียนที่หยุดชั่วคราวได้RememberObserversในการเรียบเรียงที่หยุดชั่วคราวซึ่งถูกยกเลิกควรได้รับเฉพาะ onAbandoned (I26f54) - แก้ไขปัญหาเนื้อหาที่ย้ายได้ซึ่งการลบล้างที่มาถึงในขั้นตอนท้ายๆ ของการประมวลผลเนื้อหาที่ย้ายได้จะได้รับการเพิ่มลงในโปรแกรมแต่ง แต่การลบล้างเหล่านี้จะไม่ได้รับการอัปเดตเมื่อมีการย้ายเนื้อหา ทำให้ระบบจัดองค์ประกอบเนื้อหาในตำแหน่งที่ไม่ถูกต้อง (Icd2fa, b/409439507)
- แก้ไขปัญหาเมื่อเนื้อหาที่ย้ายได้ไม่ถูกต้องหลังจากที่สร้างขึ้นแล้วแต่ยังไม่ได้ย้าย (I99eac, b/229001114)
- การเรียก
remove()ของตัววนซ้ำรายการที่สร้างโดยSnapshotStateListหลังจากเรียกprevious()อาจนำองค์ประกอบที่ไม่ถูกต้องออกจากรายการ และไม่ตรงกับสิ่งที่ArrayListทำสำหรับการเรียกตามลำดับเดียวกัน (I05ab7, b/417493222) - แก้ไขปัญหาการจัดลำดับการส่ง
onForgottonซึ่งอาจทำให้onDisposeของเอฟเฟกต์แบบใช้แล้วทิ้งทำงานในลำดับที่ไม่ถูกต้อง เป็นต้น (Ic1c91, b/417450712) - แก้ไขเพื่อใช้การจัดการสถานะซ้ำในการจัดองค์ประกอบที่หยุดชั่วคราวได้ (Ife96e, b/404058957)
- แก้ไขสถานะการนำกลับมาใช้ใหม่เมื่อหยุดชั่วคราวและรีสตาร์ทการคอมโพส แต่ต้องคอมโพสสถานะที่หยุดชั่วคราวก่อนหน้านี้ใหม่เนื่องจากสถานะบางอย่างที่อ่านมีการเปลี่ยนแปลงขณะที่หยุดชั่วคราวการคอมโพส (I441d1, b/416209738)
- แก้ไขการส่งการแก้ไขการจดจำองค์ประกอบที่หยุดชั่วคราวสำหรับปัญหา b/404058957 การแก้ไขก่อนหน้านี้ไม่สมบูรณ์ (I1afd4, b/404058957)
OffsetApplierจะลบล้างapply()ได้อย่างถูกต้องแล้ว ซึ่งเป็นฟีเจอร์ที่เปิดตัวพร้อมกับการจัดองค์ประกอบที่หยุดชั่วคราวได้ การไม่มีฟีเจอร์นี้อาจทำให้องค์ประกอบที่หยุดชั่วคราวได้แสดงข้อยกเว้นเมื่ออัปเดตโหนดเสมือน (Idbf31, b/409291131)- แก้ไขการหยุดชะงักที่อาจส่งผลต่อผู้ใช้ Molecule เมื่อมีการยกเลิกการโทรที่ถูกระงับไปยัง
FrameClock.withFrameNanosขณะที่กำลังส่งเฟรม (I89cab, b/407027032) - Recomposer อาจไม่ได้ใช้งานเมื่อมีเนื้อหาที่ย้ายได้ (Ie5416, b/409267170)
- ลำดับที่
onReuseและonDeactivateอาจกลับกันในระหว่างการเรียบเรียงที่หยุดชั่วคราวได้ ตอนนี้เรารับประกันได้ว่าเหตุการณ์จะเกิดขึ้นตามลำดับของonDeactivate/onReuse(I996e4, b/404058957) - แก้ไขการเรียกใช้ Observer ที่จดจำไว้ใน Composition ที่หยุดชั่วคราวได้เพื่อหลีกเลี่ยงการเรียกใช้ที่จดจำ/ลืมใน Apply เดียวกัน (I570b2, b/404645679, b/407931790)
- เปลี่ยน
LifecycleRegistryเป็นโหมดไม่ปลอดภัยใน Compose Multiplatform เพื่อปิดใช้การตรวจสอบMainThreadและแก้ไขปัญหาเกี่ยวกับเธรด ดูรายละเอียดได้ที่ CMP-8227 (Icee87)
การมีส่วนร่วมภายนอก
- แก้ไขข้อบกพร่องที่ส่งผลต่อผู้ใช้ Molecule ซึ่งการใช้
RecompositionMode.Immediateอาจทำให้พลาดการจัดองค์ประกอบใหม่ (I9f3a9, b/419527812) - Getter ของ
PausableCompositionisAppliedและisCancelledที่เปิดเผยซึ่งอนุญาตให้ตรวจสอบสถานะของPausableComposition(I994aa) - เพิ่ม
AnnotationTarget.FUNCTIONไปยังคำอธิบายประกอบFunctionKeyMetaแล้ว (I08021)
เวอร์ชัน 1.9.0-alpha04
4 มิถุนายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.0-alpha04 เวอร์ชัน 1.9.0-alpha04 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
SnapshotStateSetได้ใช้ Parcelable ใน Android แล้ว จึงรองรับการใช้งานเป็นส่วนหนึ่งของrememberSaveable { ... }(I755dd, b/378623803) - ตอนนี้
SnapshotStateListได้ใช้ Parcelable ใน Android แล้ว จึงรองรับการใช้งานเป็นส่วนหนึ่งของrememberSaveable { ... }(Id18be, b/378623803) - ตอนนี้
movableContentOf()มีคำอธิบายประกอบ@RememberInCompositionซึ่งช่วยให้ Lint ตรวจพบการใช้งานที่ไม่ถูกต้อง (I2738d) - อัปเดต API ของ Composition Observer เวอร์ชันทดลองเพื่อให้สังเกตสาเหตุของการเขียนคอมโพสใหม่ได้อย่างครอบคลุมมากขึ้น (I32b6a)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการจัดลำดับการส่ง
onForgottonซึ่งอาจทำให้onDisposeของเอฟเฟกต์แบบใช้แล้วทิ้งทำงานในลำดับที่ไม่ถูกต้อง เป็นต้น (Ic1c91, b/417450712) - แก้ไขเพื่อใช้การจัดการสถานะซ้ำในการจัดองค์ประกอบที่หยุดชั่วคราวได้ (Ife96e, b/404058957)
- แก้ไขข้อบกพร่องเล็กๆ น้อยๆ เพื่อให้การตรวจหาคอลเล็กชันที่เปลี่ยนแปลงได้เข้ากันได้กับทั้ง K1 และ K2 (Ie4878)
- แก้ไขข้อบกพร่องเล็กน้อยเพื่อให้การค้นหาคำอธิบายประกอบในตัวช่วยเข้าถึงพร็อพเพอร์ตี้ที่ลบล้างเข้ากันได้กับทั้ง K1 และ K2 (I9900d)
การมีส่วนร่วมภายนอก
- แก้ไขข้อบกพร่องที่ส่งผลต่อผู้ใช้ Molecule ซึ่งการใช้
RecompositionMode.Immediateอาจทำให้พลาดการจัดองค์ประกอบใหม่ (I9f3a9, b/419527812) - เปิดเผยตัวรับค่า
PausableCompositionisApplied และisCancelledซึ่งช่วยให้ตรวจสอบสถานะของPausableCompositionได้ (I994aa)
เวอร์ชัน 1.9.0-alpha03
20 พฤษภาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.0-alpha03 เวอร์ชัน 1.9.0-alpha03 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยน
setDiagnosticStackTraceEnabledเป็น "ทดลอง" เพื่อรองรับการพัฒนาฟีเจอร์นี้ในอนาคต (I11db3)
การแก้ไขข้อบกพร่อง
- แก้ไขสถานะการนำกลับมาใช้ใหม่เมื่อหยุดชั่วคราวและรีสตาร์ทการคอมโพส แต่ต้องคอมโพสสถานะที่หยุดชั่วคราวก่อนหน้านี้ใหม่เนื่องจากสถานะบางอย่างที่อ่านมีการเปลี่ยนแปลงขณะที่หยุดชั่วคราวการคอมโพส (I441d1, b/416209738)
- แก้ไขการส่งการแก้ไขที่จำได้ขององค์ประกอบที่หยุดชั่วคราวสำหรับปัญหา b/404058957 การแก้ไขก่อนหน้านี้ไม่สมบูรณ์ (I1afd4, b/404058957)
SaveableStateHolder.SaveableStateProviderตอนนี้มีLocalSavedStateRegistryOwnerให้กับเนื้อหาผ่านการคอมโพสิต (Ia2761, b/413108878)- ตอนนี้
androidx.compose.runtime.saveableจำเป็นต้องใช้androidx.lifecycle.runtime.compose(I53228, b/413108878)
เวอร์ชัน 1.9.0-alpha02
7 พฤษภาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.0-alpha02 เวอร์ชัน 1.9.0-alpha02 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เลิกใช้งาน
rememberSaveableที่มี "คีย์" ที่กำหนดเอง ซึ่งจะข้ามการกำหนดขอบเขตตามตำแหน่ง ทำให้เกิดข้อบกพร่องของสถานะและลักษณะการทำงานที่ไม่สอดคล้องกัน (เช่น การแชร์หรือสูญเสียสถานะโดยไม่ตั้งใจ ปัญหาในLazyLayoutsที่ซ้อนกัน) โปรดนำพารามิเตอร์ "key" ออกเพื่อใช้การกำหนดขอบเขตตามตำแหน่งสำหรับสถานะที่สอดคล้องกันซึ่งกำหนดขอบเขตในเครื่อง ดูรายละเอียดเพิ่มเติมได้ในข้อความคอมมิตฉบับเต็ม (I5e6ff, b/357685851)
การแก้ไขข้อบกพร่อง
OffsetApplierจะลบล้างapply()ได้อย่างถูกต้องแล้ว ซึ่งเป็นฟีเจอร์ที่เปิดตัวพร้อมกับการจัดองค์ประกอบที่หยุดชั่วคราวได้ การไม่มีข้อมูลนี้อาจทำให้องค์ประกอบที่หยุดชั่วคราวได้ส่งข้อยกเว้นเมื่ออัปเดตโหนดเสมือน (Idbf31, b/409291131)- แก้ไขการหยุดชะงักที่อาจส่งผลต่อผู้ใช้ Molecule เมื่อมีการยกเลิกการโทรที่ถูกระงับไปยัง
FrameClock.withFrameNanosขณะที่กำลังส่งเฟรม (I89cab, b/407027032) - Recomposer อาจไม่ได้ใช้งานในขณะที่สถานะเนื้อหาที่ย้ายได้ยังคงรอดำเนินการเพื่อทิ้ง โดยปกติแล้วปัญหานี้จะไม่เกิดขึ้นเนื่องจากสถานะเนื้อหาที่เคลื่อนย้ายได้จะถูกทิ้งในลูปหลักของ Recomposer อย่างไรก็ตาม ปัญหานี้อาจเกิดขึ้นในองค์ประกอบที่หยุดชั่วคราวได้เมื่อทิ้งเนื้อหาที่ย้ายได้ในระหว่าง
resume()(Ie5416, b/409267170) - ลำดับที่
onReuseและonDeactivateอาจกลับกันในระหว่างการเรียบเรียงที่หยุดชั่วคราวได้ ตอนนี้รับประกันได้ว่าเหตุการณ์จะเกิดขึ้นตามลำดับของonDeactivate/onReuse(I996e4, b/404058957)
เวอร์ชัน 1.9.0-alpha01
23 เมษายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.9.0-alpha01 เวอร์ชัน 1.9.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
- การตรวจสอบ Lint ที่มาพร้อมกับ Compose ต้องใช้ AGP เวอร์ชัน 8.8.2 เป็นอย่างน้อย หากอัปเกรด AGP ไม่ได้ คุณสามารถอัปเกรด Lint ด้วยตนเองได้โดยใช้
android.experimental.lint.version=8.8.2(หรือเวอร์ชันที่ใหม่กว่า) ในgradle.propertiesหากต้องการเรียกใช้การตรวจสอบ Lint ของ Compose ภายใน IDE คุณต้องใช้ Android Studio Ladybug หรือเวอร์ชันที่ใหม่กว่า
การเปลี่ยนแปลง API
currentCompositeKeyHashเลิกใช้งานแล้ว โปรดใช้currentCompositeKeyHashCodeแทน API การแทนที่จะเข้ารหัสแฮชเดียวกันด้วยบิตที่มากขึ้น ซึ่งจะช่วยลดโอกาสที่กลุ่มแบบสุ่ม 2 กลุ่มที่ไม่เกี่ยวข้องในลำดับชั้นการจัดองค์ประกอบจะมีคีย์แฮชเดียวกันได้อย่างมาก (I4cb6a, b/177562901)- โปรเจ็กต์ที่เผยแพร่ด้วย Kotlin 2.0 ต้องใช้ KGP 2.0.0 ขึ้นไป (Idb6b5)
@Stable,@Immutableและ@StableMarkerได้รับการย้ายไปยังคำอธิบายประกอบขณะรันไทม์ (ในลักษณะที่เข้ากันได้) ตอนนี้คุณสามารถใช้คำอธิบายประกอบรันไทม์ได้หากต้องการใช้คำอธิบายประกอบเหล่านี้จากไลบรารีที่ไม่ขึ้นอยู่กับ Compose (I23a16)- นำ
onCreatingและonDisposingออกเนื่องจากเลิกใช้งานแล้วและเปลี่ยนชื่อเป็นonPreCreateและonPreDisposeการเปลี่ยนแปลงนี้จะทำให้การเปลี่ยนชื่อเสร็จสมบูรณ์ (I97461) - เปิดเผยองค์ประกอบในเครื่องที่อนุญาตให้แนบ Stack Trace ของ Compose โดยอิงตามตำแหน่งของโหนด Compose ในองค์ประกอบ (Ie0bda, b/354163858)
- แนะนําการวินิจฉัยการติดตามสแต็กของ Compose ตามข้อมูลแหล่งที่มาซึ่งจัดเก็บไว้ในการคอมโพส (I3db9f, b/354163858)
- เลิกใช้งาน
runWithTimingDisabledเพื่อใช้runWithMeasurementDisabledซึ่งอธิบายลักษณะการทำงานได้ชัดเจนกว่า นั่นคือระบบจะหยุดเมตริกทั้งหมดชั่วคราว นอกจากนี้ ให้แสดงคลาสMicrobenchmarkScopeเนื่องจากประกาศฟังก์ชันrunWithMeasurementDisabledอีกครั้งเพื่อเปิดการเข้าถึงไม่ได้เนื่องจากเป็นฟังก์ชันอินไลน์ (I9e23b, b/389149423, b/149979716) - เพิ่ม
@FrequentlyChangingValue: คำอธิบายประกอบที่สามารถทำเครื่องหมายฟังก์ชันและตัวรับค่าพร็อพเพอร์ตี้เพื่อระบุว่าไม่ควรเรียกใช้โดยตรงภายใน Composition เนื่องจากอาจทำให้เกิดการจัดองค์ประกอบซ้ำบ่อยครั้ง เช่น เพื่อทำเครื่องหมายค่าตำแหน่งการเลื่อนและค่าการเคลื่อนไหว คำเตือนมาจาก Lint Check ที่เกี่ยวข้อง (I83630, b/234042500) - เพิ่ม
@RememberInComposition: คำอธิบายประกอบที่สามารถทำเครื่องหมายตัวสร้าง ฟังก์ชัน และตัวรับพร็อพเพอร์ตี้ เพื่อระบุว่าต้องไม่เรียกใช้โดยตรงภายใน Composition โดยไม่ต้องจดจำ การตรวจสอบ Lint ที่เกี่ยวข้องจะทำให้เกิดข้อผิดพลาด คำอธิบายประกอบนี้ใช้เพื่อทำเครื่องหมายการประกาศที่ส่งคืนออบเจ็กต์ที่มีสถานะ / เปลี่ยนแปลงได้ ออบเจ็กต์ที่มีการระบุตัวตนซึ่งสำคัญต่อการรักษาไว้ในคอมโพสิต หรือออบเจ็กต์ที่มีค่าใช้จ่ายสูงในการสร้างอินสแตนซ์และควรแคชไว้ในคอมโพสิต (Ie7db0) - เพิ่ม
rememberSaveableโอเวอร์โหลดใหม่ที่รองรับKSerializerสำหรับการคงสถานะที่ปลอดภัยต่อประเภทโดยใช้ KotlinX Serialization ระบบยังคงรองรับ API ที่มีอยู่ซึ่งอิงตามSaver(Iea4ab, b/376028110)
การแก้ไขข้อบกพร่อง
- แก้ไขการเรียกใช้ Observer ที่จดจำไว้ใน Composition ที่หยุดชั่วคราวได้เพื่อหลีกเลี่ยงการเรียกใช้ที่จดจำ/ลืมใน Apply เดียวกัน (I570b2, b/404645679, b/407931790)
- เปลี่ยนชื่อเมธอด
SnapshotObserverในการสร้างเป็นonPreCreateและonDisposingเป็นonPreDisposeเพื่อให้เป็นไปตามหลักเกณฑ์ของ API เราเลิกใช้งานเมธอดก่อนหน้านี้แล้ว และเมธอดใหม่จะเรียกเมธอดเก่าโดยค่าเริ่มต้น ดังนั้นการติดตั้งใช้งานอินเทอร์เฟซนี้ที่มีอยู่จะยังคงทำงานต่อไปจนกว่าจะมีการนำเมธอดออก เราจะนำวิธีการเหล่านี้ออกในเวอร์ชัน 1.9.0 อัลฟ่าใน CL ที่จะตามมาในไม่ช้า ระบบจะนำฟีเจอร์เหล่านี้ออกจากเวอร์ชันเบต้า 1.8 ก่อนที่จะเป็นเวอร์ชันเสถียร 1.8 (I6d753) - แก้ไขปัญหาที่ระบบอาจลืมค่าที่จดจำไว้และคำนวณใหม่ไม่ถูกต้องเมื่อประกอบกลุ่มที่ละไว้ซึ่งปรากฏหลังกลุ่มที่ย้ายได้ (I62cab, b/383769314)
- เพิ่มการรองรับการเขียน Stack Trace ใน
LaunchedEffectและrememberCoroutineScope(I705c0, b/354163858) - ตอนนี้การตรวจสอบ Lint ของ Compose ต้องใช้ AGP เวอร์ชัน 8.8.2 ขั้นต่ำจากบรรทัดคำสั่ง และ Android Studio Ladybug อย่างน้อยสำหรับการรองรับ IDE หากใช้ AGP เวอร์ชันเก่า คุณสามารถตั้งค่า
android.experimental.lint.version=8.8.2ใน gradle.properties เพื่ออัปเกรดเวอร์ชัน Lint ได้โดยไม่ส่งผลต่อ AGP (I6f2a8)
การมีส่วนร่วมภายนอก
- เพิ่ม
AnnotationTarget.FUNCTIONไปยังคำอธิบายประกอบFunctionKeyMetaแล้ว (I08021)
เวอร์ชัน 1.8
เวอร์ชัน 1.8.3
18 มิถุนายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.3 เวอร์ชัน 1.8.3 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.8.2
20 พฤษภาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.2 เวอร์ชัน 1.8.2 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.8.1
7 พฤษภาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.1 เวอร์ชัน 1.8.1 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.8.0
23 เมษายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0 เวอร์ชัน 1.8.0 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.8.0-rc03
9 เมษายน 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-rc03 เวอร์ชัน 1.8.0-rc03 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.8.0-rc02
26 มีนาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-rc02 เวอร์ชัน 1.8.0-rc02 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.8.0-rc01
12 มีนาคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-rc01 เวอร์ชัน 1.8.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยนชื่อเมธอด
SnapshotObserverในการสร้างเป็นonPreCreateและonDisposingเป็นonPreDisposeเพื่อให้เป็นไปตามหลักเกณฑ์ของ API เราเลิกใช้งานเมธอดก่อนหน้านี้แล้ว และเมธอดใหม่จะเรียกเมธอดเก่าโดยค่าเริ่มต้น ดังนั้นการติดตั้งใช้งานอินเทอร์เฟซนี้ที่มีอยู่จะยังคงทำงานต่อไปจนกว่าจะมีการนำเมธอดออก เราจะนำวิธีการเหล่านี้ออกในเวอร์ชัน 1.9.0 อัลฟ่าใน CL ที่จะตามมาในไม่ช้า ระบบจะนำฟีเจอร์เหล่านี้ออกจากเวอร์ชันเบต้า 1.8 ก่อนที่จะเป็นเวอร์ชันเสถียร 1.8 (I6d753)
เวอร์ชัน 1.8.0-beta03
26 กุมภาพันธ์ 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-beta03 เวอร์ชัน 1.8.0-beta03 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.8.0-beta02
12 กุมภาพันธ์ 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-beta02 เวอร์ชัน 1.8.0-beta02 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ส่งข้อยกเว้นที่ตรวจพบอีกครั้งในการเรียบเรียงที่หยุดชั่วคราวได้ (384486d)
เวอร์ชัน 1.8.0-beta01
29 มกราคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-beta01 เวอร์ชัน 1.8.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- แก้ไขปัญหาที่การเพิ่ม Throwable ระหว่างการคอมโพสที่ไม่ขยายจาก Exception อาจทำให้เกิดข้อผิดพลาด "ยังไม่ได้ใช้การคอมโพสที่รอดำเนินการ" (I356be, b/382094412)
เวอร์ชัน 1.8.0-alpha08
15 มกราคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-alpha08 เวอร์ชัน 1.8.0-alpha08 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.8.0-alpha07
11 ธันวาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-alpha07 เวอร์ชัน 1.8.0-alpha07 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม API เครื่องมือที่ช่วยให้เครื่องมือตรวจสอบเลย์เอาต์เชื่อมโยงการประกอบย่อยกับการประกอบหลักในกรณีที่ไม่ได้ใช้โหนดเพื่อเชื่อมโยงการประกอบเข้าด้วยกัน (I4ce3d)
- เปลี่ยนค่าคงที่ทางคณิตศาสตร์และค่าคงที่พิเศษสำหรับ
SnapshotIdภายในแทนที่จะเป็นสาธารณะ คุณสามารถดำเนินการทางคณิตศาสตร์กับSnasphotIdได้หากจำเป็น โดยแปลงเป็นIntหรือLongโดยใช้toInt()หรือtoLong()ตามลำดับ (Ic3a57)
การมีส่วนร่วมภายนอก
- เพิ่มประสิทธิภาพพื้นที่เก็บข้อมูลสำหรับพารามิเตอร์
movableContentOf(ed87177)
เวอร์ชัน 1.8.0-alpha06
13 พฤศจิกายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-alpha06 เวอร์ชัน 1.8.0-alpha06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- การเปลี่ยนแปลงใน
PausableCompositionAPI การเปลี่ยนแปลงที่ไม่รองรับเวอร์ชันก่อนหน้าเหล่านี้เกี่ยวข้องกับรุ่นก่อนหน้าของ 1.8.0-alpha (ตั้งแต่ 1.8.0-alpha02) แต่เนื่องจากเป็น API ใหม่ใน 1.8.0 จึงไม่มีการรักษาความเข้ากันได้แบบย้อนหลังเนื่องจาก API ยังอยู่ในเวอร์ชันอัลฟ่า (I39819) - เพิ่ม API เครื่องมือเพื่อสังเกตการสร้างองค์ประกอบใหม่ภายใน Recomposer (Iaeb7e)
- เพิ่ม
snapshotIdประเภทLongไปยังSnapshotและเลิกใช้งานidรหัสของสแนปชอตเปลี่ยนจากIntเป็นLongเพื่อหลีกเลี่ยงไม่ให้รหัสสแนปชอตล้นในระบบที่มีอัตราเฟรมสูงมากและภาพเคลื่อนไหวที่ทำงานเป็นเวลานาน เราเปลี่ยนประเภทเป็น expect/actual เพื่อให้ประเภทนี้เป็นIntหรือประเภทอื่นๆ ในแพลตฟอร์มที่ไม่มีประเภทLongดั้งเดิม แพลตฟอร์มที่ไม่มีLongดั้งเดิม เช่น JavaScript ควรหลีกเลี่ยงอัตราเฟรมสูง (มากกว่า 1,000 FPS) ซึ่งจะทำให้เกิดการล้นสำหรับIntโดยประมาณทุกๆ 24 วัน (I38ac3, b/374821679)
การแก้ไขข้อบกพร่อง
- แก้ไข
providesDefaultสำหรับprovidesรายการเดียว (aosp/3318540 b/374263387) - เพิ่มประสิทธิภาพ
ChangeList(3318538)
เวอร์ชัน 1.8.0-alpha05
30 ตุลาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-alpha05 เวอร์ชัน 1.8.0-alpha05 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการล้นสแต็กโดยการเพิ่ม
Int.MAX_VALUEไปยังSnapshotIdSet(b/370536104, Ic4179f6) - การเพิ่มประสิทธิภาพขนาดเล็กในรันไทม์ (I50c60)
- อนุญาตให้ R8 นำการเรียกใช้การแก้ไขข้อบกพร่องรันไทม์ Check (I8c44) ออก
- ทำให้
compoundKeyOfเป็นแบบวนซ้ำแทนแบบเรียกซ้ำ (I5817f)
การมีส่วนร่วมภายนอก
- ใช้กองซ้อนกับรายการคอลเล็กชัน (I7d47c)
เวอร์ชัน 1.8.0-alpha04
16 ตุลาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-alpha04 เวอร์ชัน 1.8.0-alpha04 มีการคอมมิตเหล่านี้
การปรับปรุงประสิทธิภาพ
- ระบุรหัสสแนปชอตสำหรับบันทึกสถานะในตัวสร้าง (85c00f)
- ปรับโครงสร้าง
SnapshotState***เพื่อหลีกเลี่ยงข้อผิดพลาดในการยืนยันคลาส (6ee4a6) - แก้ไขกฎ R8 เพื่อป้องกันการแทรกโค้ด throw (5beb92)
- เพิ่มประสิทธิภาพการดำเนินการขนาดเล็ก (d73c5c)
- เพิ่มประสิทธิภาพการจัดสรร
SynchronizedObjectใน JVM (2b043f)
เวอร์ชัน 1.8.0-alpha03
2 ตุลาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-alpha03 เวอร์ชัน 1.8.0-alpha03 มีการคอมมิตเหล่านี้
การปรับปรุงประสิทธิภาพ
- สร้างบริบทย่อยอย่างเฉื่อยชาสำหรับ
rememberCoroutineScope(f61464)- โดยทั่วไปจะใช้
rememberCoroutineScopeเพื่อเปิดใช้โครูทีนเพื่อตอบสนองต่อเหตุการณ์ที่เกิดขึ้นหลังการคอมโพส ในบางสถานการณ์ เหตุการณ์เหล่านี้อาจไม่เกิดขึ้นเลย ซึ่งจะทำให้เกิดค่าใช้จ่ายเพิ่มเติมในการสร้างและยกเลิกงานโดยไม่ได้รับประโยชน์ใดๆ - ทำให้ขอบเขตที่
rememberCoroutineScopeสร้างส่งคืนcoroutineContextแบบเลื่อนเวลาเมื่อมีการเข้าถึง เพื่อหลีกเลี่ยงการสร้างและยกเลิกงานทั้งหมดหากไม่มีการใช้ขอบเขต
- โดยทั่วไปจะใช้
เวอร์ชัน 1.8.0-alpha02
18 กันยายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-alpha02 เวอร์ชัน 1.8.0-alpha02 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม
PausableCompositionซึ่งช่วยให้สร้างองค์ประกอบย่อยที่หยุดชั่วคราวได้ในระหว่างการคอมโพส และนำไปใช้กับการคอมโพสแบบไม่พร้อมกันได้ การหยุดชั่วคราวต้องได้รับการรองรับจากคอมไพเลอร์ ซึ่งขณะนี้อยู่ระหว่างการพัฒนา (I3394b)
เวอร์ชัน 1.8.0-alpha01
4 กันยายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.8.0-alpha01 เวอร์ชัน 1.8.0-alpha01 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7
เวอร์ชัน 1.7.8
12 กุมภาพันธ์ 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.8 เวอร์ชัน 1.7.8 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.7
29 มกราคม 2025
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.7 ไม่มีการเปลี่ยนแปลงจาก 1.7.6
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.6 เวอร์ชัน 1.7.6 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.5
30 ตุลาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.5 เวอร์ชัน 1.7.5 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.4
16 ตุลาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.4 เวอร์ชัน 1.7.4 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.3
2 ตุลาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.3 เวอร์ชัน 1.7.3 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.2
18 กันยายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.2 เวอร์ชัน 1.7.2 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.1
10 กันยายน 2024
- ไม่มีการเปลี่ยนแปลงอาร์ติแฟกต์ Android ระบบได้นำอาร์ติแฟกต์
-desktopรายการออกแล้ว และเพิ่มอาร์ติแฟกต์-jvmStubsและ-linuxx64Stubsรายการ เป้าหมายเหล่านี้ไม่มีไว้ให้ใช้งาน แต่เป็นตัวยึดตำแหน่งเพื่อช่วยให้ Jetbrains Compose ทำงานได้
เวอร์ชัน 1.7.0
4 กันยายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0 เวอร์ชัน 1.7.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงสำคัญตั้งแต่เวอร์ชัน 1.6.0
- เพิ่มความสามารถในการระบุองค์ประกอบที่คำนวณตามค่าขององค์ประกอบอื่นๆ โดยค่าเริ่มต้นโดยใช้
compositionLocalWithComputedDefault()หรือโดยการระบุ Lambda เพื่อใช้ในการคำนวณค่าโดยใช้providesComputedแทนprovides - คุณจะดูค่าขององค์ประกอบในเครื่องได้โดยใช้พร็อพเพอร์ตี้
currentValueขององค์ประกอบในเครื่องที่เข้าถึงได้จากภายใน Lambda ที่คำนวณค่า โดยจะใช้แทนcurrentซึ่งเข้าถึงได้เฉพาะในฟังก์ชัน@Composable(Iadbc0) - ออบเจ็กต์สถานะที่สร้างขึ้นใหม่จะเข้าถึงได้ทันทีจากสแนปชอตอื่นๆ รวมถึงสแนปชอตส่วนกลาง โดยมีสถานะเริ่มต้น การแก้ไขในภายหลังจะไม่ปรากฏจนกว่าจะใช้สแนปชอตที่สร้างออบเจ็กต์
- สถานะเริ่มต้นของ
mutableStateOf()รวมถึงเวอร์ชันดั้งเดิมคือค่าที่ส่งเป็นพารามิเตอร์ไปยังmutableStateOf()สถานะเริ่มต้นของmutableStateListOf()และmutableStateMapOf()จะว่างเปล่า - เพิ่ม
Snapshot.isInSnapshotและSnapshot.PreexistingSnapshotIdที่ใช้เพื่อเปิดใช้ออบเจ็กต์สถานะให้รองรับการเข้าถึงได้ทันทีจากสแนปชอตส่วนกลางเมื่อสร้างแล้ว - ออบเจ็กต์สถานะที่กำหนดเองสามารถรองรับการเข้าถึงได้ทันทีโดยทำตามรูปแบบการเปลี่ยนแปลงที่ทำกับออบเจ็กต์สแนปชอตในตัว (I84a17)
- เปิดใช้
nonSkippingGroupOptimizationสำหรับไลบรารี Compose ซึ่งทำให้โค้ดที่สร้างขึ้นสำหรับฟังก์ชันที่ประกอบกันได้ทั้งหมดที่ไม่สามารถรีสตาร์ทได้ใน androidx มีประสิทธิภาพมากขึ้น ในอนาคตเราวางแผนที่จะเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้น I(acbc08) - ทำให้ Composable Lambda ใน Subcomposition ไม่ถูกต้องในเฟรมเดียวกัน (98301c)
- เรียกใช้การเรียกกลับ
onReleaseตามลำดับเดียวกับonForgotten(2cd790) - เปิดใช้โหมดข้ามอย่างรวดเร็ว (ed1766)
- ทำให้
currentCompoundHashKeyไม่ซ้ำกันในกรณีต่างๆ (d4a872)
เวอร์ชัน 1.7.0-rc01
21 สิงหาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-rc01 เวอร์ชัน 1.7.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.0-beta07
7 สิงหาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-beta07 เวอร์ชัน 1.7.0-beta07 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.0-beta06
24 กรกฎาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-beta06 เวอร์ชัน 1.7.0-beta06 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.0-beta05
10 กรกฎาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-beta05 เวอร์ชัน 1.7.0-beta05 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.0-beta04
26 มิถุนายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-beta04 เวอร์ชัน 1.7.0-beta04 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.0-beta03
12 มิถุนายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-beta03 เวอร์ชัน 1.7.0-beta03 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.0-beta02
29 พฤษภาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-beta02 เวอร์ชัน 1.7.0-beta02 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.0-beta01
14 พฤษภาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-beta01 เวอร์ชัน 1.7.0-beta01 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.7.0-alpha08
1 พฤษภาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-alpha08 เวอร์ชัน 1.7.0-alpha08 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.7.0-alpha07
17 เมษายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-alpha07 เวอร์ชัน 1.7.0-alpha07 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มความสามารถในการระบุองค์ประกอบที่คำนวณตามค่าขององค์ประกอบอื่นๆ โดยค่าเริ่มต้นโดยใช้
compositionLocalWithComputedDefault()หรือโดยการระบุ Lambda เพื่อใช้ในการคำนวณค่าโดยใช้providesComputedแทนprovides - คุณจะดูค่าขององค์ประกอบในเครื่องได้โดยใช้พร็อพเพอร์ตี้
currentValueขององค์ประกอบในเครื่องที่เข้าถึงได้จากภายใน Lambda ที่คำนวณค่า โดยจะใช้แทนcurrentซึ่งเข้าถึงได้เฉพาะในฟังก์ชัน@Composable(Iadbc0)
การเปลี่ยนแปลง API
- ออบเจ็กต์สถานะที่สร้างขึ้นใหม่จะเข้าถึงได้ทันทีจากสแนปชอตอื่นๆ รวมถึงสแนปชอตส่วนกลาง โดยมีสถานะเริ่มต้น การแก้ไขในภายหลังจะไม่ปรากฏจนกว่าจะใช้สแนปชอตที่สร้างออบเจ็กต์
- สถานะเริ่มต้นของ
mutableStateOf()รวมถึงเวอร์ชันดั้งเดิมคือค่าที่ส่งเป็นพารามิเตอร์ไปยังmutableStateOf()สถานะเริ่มต้นของmutableStateListOf()และmutableStateMapOf()จะว่างเปล่า - เพิ่ม
Snapshot.isInSnapshotและSnapshot.PreexistingSnapshotIdที่ใช้เพื่อเปิดใช้ออบเจ็กต์สถานะให้รองรับการเข้าถึงได้ทันทีจากสแนปชอตส่วนกลางเมื่อสร้างแล้ว - ออบเจ็กต์สถานะที่กำหนดเองสามารถรองรับการเข้าถึงได้ทันทีโดยทำตามรูปแบบการเปลี่ยนแปลงที่ทำกับออบเจ็กต์สแนปชอตในตัว (I84a17)
การแก้ไขข้อบกพร่อง
- แก้ไขการผสาน
readObserverในสแนปชอตที่ซ้อนกัน ซึ่งทำให้สถานะที่ได้มาแบบซ้อนกันไม่ถูกต้องเมื่อใช้ภายในsnapshotFlow(Idf138)
เวอร์ชัน 1.7.0-alpha06
3 เมษายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-alpha06 เวอร์ชัน 1.7.0-alpha06 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการจัดการค่าเดียวที่ระบุ
providesDefault(538f45) - หลีกเลี่ยงการหยุดชะงักในการเข้าถึงนาฬิกาเฟรมของ Recomposer (07e5c6)
เวอร์ชัน 1.7.0-alpha05
20 มีนาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-alpha05 เวอร์ชัน 1.7.0-alpha05 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ล้างการเปลี่ยนแปลงที่ล่าช้าในผลงานที่ปิดใช้งาน (5950bc)
เวอร์ชัน 1.7.0-alpha04
6 มีนาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-alpha04 เวอร์ชัน 1.7.0-alpha04 มีการเปลี่ยนแปลงเหล่านี้
การปรับปรุงประสิทธิภาพ
- เรียกใช้
Snapshot.currentหนึ่งครั้งต่อการประเมินสถานะที่ได้มา (ee7daf) - อ่าน
currentRecord1 ครั้งต่อการสังเกตในองค์ประกอบ (b882b2) - นำการจัดสรรตัววนซ้ำโดยไม่ตั้งใจใน
snapshotFlowออก (231e56) - เปิดใช้
nonSkippingGroupOptimizationสำหรับไลบรารี Compose ซึ่งทำให้โค้ดที่สร้างขึ้นสำหรับฟังก์ชันที่ประกอบกันได้ทั้งหมดที่ไม่สามารถรีสตาร์ทได้ใน androidx มีประสิทธิภาพมากขึ้น ในอนาคตเราวางแผนที่จะเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้น I(acbc08)
เวอร์ชัน 1.7.0-alpha03
21 กุมภาพันธ์ 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-alpha03 เวอร์ชัน 1.7.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เปิดตัวการแทนที่กลุ่มเพื่อปรับปรุงการตรวจหาการเปลี่ยนแปลง (0941b5)
การปรับปรุงประสิทธิภาพ
- ปรับปรุงการจัดสรรหน่วยความจำเมื่อตรวจพบการเปลี่ยนแปลง (53e7fd)
- แก้ไขปัญหาหน่วยความจำรั่วไหลในโปรแกรมแต่งเพลง (0e097d)
- ใช้
ScopeMapเพื่อส่งการลบล้างเมื่อจัดองค์ประกอบใหม่ (e19a7e) - เพิ่มประสิทธิภาพแผนที่การระบุว่าไม่ถูกต้องเพื่อให้เก็บเฉพาะสถานะที่ได้มา (f11c44)
- แทนที่การใช้งาน
IdentityArraySetด้วยScatterSet(db572e) - เพิ่มประสิทธิภาพ
removeScopeในScopeMap(bb0530)
เวอร์ชัน 1.7.0-alpha02
7 กุมภาพันธ์ 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-alpha02 เวอร์ชัน 1.7.0-alpha02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ทำให้ Composable Lambda ใน Subcomposition ไม่ถูกต้องในเฟรมเดียวกัน (98301c)
- เรียกใช้การเรียกกลับ
onReleaseตามลำดับเดียวกับonForgotten(2cd790) - กรองสถานะที่เปลี่ยนแปลงซึ่งไม่พบใน
snapshotFlow(796b80)
การปรับปรุงประสิทธิภาพ
- แก้ไขเครื่องมือสังเกตการณ์สแนปชอตในกรณีที่โปร่งใสอยู่แล้ว (f60f30)
- เพิ่มประสิทธิภาพ
SnapshotIdSet.lowest()(7ae149) - ใช้
fold()ที่ไม่มีการจัดสรรในSnapshotIdSet(532b7d) - นำการจัดสรรตัววนซ้ำออก (83f96b)
เวอร์ชัน 1.7.0-alpha01
24 มกราคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.7.0-alpha01 เวอร์ชัน 1.7.0-alpha01 มีคอมมิตเหล่านี้
การเพิ่มประสิทธิภาพ
- เพิ่มความสามารถในการสร้างสล็อตหลังจากเพิ่มกลุ่มย่อยแล้ว (b5960c)
- เพิ่มประสิทธิภาพการแก้ไขการบันทึกสถานะสแนปชอต (28c3fe)
- เปิดใช้โหมดข้ามอย่างรวดเร็ว (ed1766)
การแก้ไขข้อบกพร่อง
- บัญชีสำหรับเมตาพารามิเตอร์เริ่มต้นในฟีเจอร์จดจำโดยธรรมชาติ (096665)
- ทำให้
currentCompoundHashKeyไม่ซ้ำกันในกรณีต่างๆ (d4a872) - ตระหนักถึงกลุ่มเมื่อออกจากฟังก์ชันการเรียกใช้แบบอินไลน์ (2a90fc)
เวอร์ชัน 1.6
เวอร์ชัน 1.6.8
12 มิถุนายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.8 เวอร์ชัน 1.6.8 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.6.7
1 พฤษภาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.7 เวอร์ชัน 1.6.7 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.6.6
17 เมษายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.6 ไม่มีการเปลี่ยนแปลงนับตั้งแต่การเปิดตัวครั้งล่าสุด
เวอร์ชัน 1.6.5
3 เมษายน 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.5 เวอร์ชัน 1.6.5 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.6.4
20 มีนาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.4 เวอร์ชัน 1.6.4 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.6.3
6 มีนาคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.3 เวอร์ชัน 1.6.3 มีการเปลี่ยนแปลงเหล่านี้
เวอร์ชัน 1.6.2
21 กุมภาพันธ์ 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.2 เวอร์ชัน 1.6.2 มีคอมมิตเหล่านี้
เวอร์ชัน 1.6.1
7 กุมภาพันธ์ 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.1 เวอร์ชัน 1.6.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เรียกใช้การเรียกกลับ
onReleaseตามลำดับเดียวกับonForgotten(2cd790) - กรองสถานะที่เปลี่ยนแปลงซึ่งไม่พบใน
snapshotFlow(796b80)
เวอร์ชัน 1.6.0
24 มกราคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0 เวอร์ชัน 1.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงสำคัญตั้งแต่เวอร์ชัน 1.5.0
ฟีเจอร์ใหม่
- ส่งข้อยกเว้นที่ถูกกลืนระหว่างลูปการจัดองค์ประกอบใหม่ (4dff9a)
การเพิ่มประสิทธิภาพ
- เพิ่มประสิทธิภาพการแก้ไขการบันทึกสถานะสแนปชอต (28c3fe)
- เพิ่มประสิทธิภาพ
rememberSaveable(f01d79) - เลื่อนการอ่านสถานะที่ได้มาอีกครั้งจนกว่าจะบันทึกการเปลี่ยนแปลง (f38099)
- ปรับปรุงการระบุค่าในเครื่องขององค์ประกอบ (a337ea)
การแก้ไขข้อบกพร่อง
- แก้ไขการรั่วไหลของหน่วยความจำในตารางสล็อต (73fcfe)
- ข้ามการจัดองค์ประกอบใหม่ขององค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)
- ทริกเกอร์
RememberObserverวงจรขององค์ประกอบเฉพาะเมื่อจัดเก็บไว้ในการคำนวณที่จดจำ (f6b4dc) - จำกัดการจับภาพ
$dirtyเฉพาะ Lambda แบบอินไลน์ (acfca0) - แก้ไขเนื้อหาที่เคลื่อนย้ายได้ซึ่งบางครั้งได้รับองค์ประกอบที่ไม่ถูกต้อง (035cd6)
เวอร์ชัน 1.6.0-rc01
10 มกราคม 2024
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-rc01 เวอร์ชัน 1.6.0-rc01 มีคอมมิตต่อไปนี้
เวอร์ชัน 1.6.0-beta03
13 ธันวาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-beta03 เวอร์ชัน 1.6.0-beta03 มีคอมมิตเหล่านี้
เวอร์ชัน 1.6.0-beta02
29 พฤศจิกายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-beta02 เวอร์ชัน 1.6.0-beta02 มีคอมมิตเหล่านี้
เวอร์ชัน 1.6.0-beta01
15 พฤศจิกายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-beta01 เวอร์ชัน 1.6.0-beta01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ส่งต่อค่าความเสถียรบางอย่างในคำอธิบายประกอบ (274a4c)
การแก้ไขข้อบกพร่อง
- ใช้นโยบายอ้างอิงสำหรับสถานะขอบเขตภายในขององค์ประกอบในบริบท (83361c)
- จำกัดการจับภาพ $dirty ไว้ที่ Lambda แบบอินไลน์ (acfca0)
- แก้ไขเนื้อหาที่เคลื่อนย้ายได้ซึ่งบางครั้งได้รับองค์ประกอบที่ไม่ถูกต้อง (035cd6)
- ใช้แฮชแมปแบบไม่จัดสรรที่เร็วขึ้นใน
RecomposeScopeImpl(d79494) - ใช้
ObjectIntMapในDerivedState(21862e) - ใช้
IntRefสำหรับ intSnapshotThreadLocalในDerivedState(04eaf4)
เวอร์ชัน 1.6.0-alpha08
18 ตุลาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-alpha08 เวอร์ชัน 1.6.0-alpha08 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ทริกเกอร์
RememberObserverวงจรขององค์ประกอบเฉพาะเมื่อจัดเก็บไว้ในการคำนวณที่จดจำ (f6b4dc) - ปรับปรุงการจัดสรรในการจัดเรียงรายการการลบล้าง (954d63)
- ใช้แผนที่ใหม่ที่ไม่จัดสรรใน
SnapshotStateObserver(4303ce) - ล้างการลบล้างเมื่อปิดใช้งานการเรียบเรียง (e001be)
เวอร์ชัน 1.6.0-alpha07
4 ตุลาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-alpha07 เวอร์ชัน 1.6.0-alpha07 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ตอนนี้ระบบจะทำเครื่องหมาย
SnapshotStateListเป็นRandomAccessเพื่อให้ใช้เวอร์ชันการจัดทำดัชนีโดยตรงของตัวช่วยรายการได้ (I5210c, b/219554654)
เวอร์ชัน 1.6.0-alpha06
20 กันยายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-alpha06 เวอร์ชัน 1.6.0-alpha06 มีคอมมิตเหล่านี้
เวอร์ชัน 1.6.0-alpha05
6 กันยายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-alpha05 เวอร์ชัน 1.6.0-alpha05 มีคอมมิตต่อไปนี้
เวอร์ชัน 1.6.0-alpha04
23 สิงหาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-alpha04 เวอร์ชัน 1.6.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ส่งข้อยกเว้นที่ถูกกลืนระหว่างลูปการจัดองค์ประกอบใหม่ (4dff9a)
การเปลี่ยนแปลง API
- เพิ่มวิธีปิดใช้งาน
ReusableCompositionซึ่งจะนำการสังเกตการณ์ออกแต่จะคงโหนดไว้ คุณเปิดใช้งานการจัดกลุ่มที่ปิดใช้งานแล้วได้อีกครั้งโดยโทรหาsetContent(Ib7f31) - เพิ่มอินเทอร์เฟซ
ReusableCompositionสำหรับจัดการวงจรและการนำองค์ประกอบย่อยกลับมาใช้ซ้ำ (I812d1, b/252846775)
เวอร์ชัน 1.6.0-alpha03
9 สิงหาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-alpha03 เวอร์ชัน 1.6.0-alpha03 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขการเพิ่มประสิทธิภาพ
CompositionLocalProviderใหม่ (3118e88) - แก้ไขวิธีแยกชิ้นส่วนโหนดเนื้อหาที่เคลื่อนย้ายได้ (5e3d59b)
เวอร์ชัน 1.6.0-alpha02
26 กรกฎาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-alpha02 เวอร์ชัน 1.6.0-alpha02 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่และการเพิ่มประสิทธิภาพ
- เพิ่มประสิทธิภาพ
rememberSaveable(f01d79) - เลื่อนการอ่านสถานะที่ได้มาอีกครั้งจนกว่าจะบันทึกการเปลี่ยนแปลง (f38099)
- ปรับปรุงการระบุค่าในเครื่องขององค์ประกอบ (a337ea)
SideEffectจะได้รับการทำเครื่องหมายเป็น@ExplicitGroupsComposableเพื่อไม่ให้ระบบสร้างกลุ่ม (I74815)- หลีกเลี่ยงการเปรียบเทียบแผนที่ท้องถิ่นที่ประกอบขึ้นใหม่ในการนำกลับมาใช้ซ้ำ (782071)
การเปลี่ยนแปลง API
- เพิ่มการโอเวอร์โหลดกรณีพิเศษสำหรับ
CompositionLocalProvidersซึ่งหลีกเลี่ยงค่าใช้จ่ายที่ใช้ในการระบุค่าหลายค่าให้เร็วขึ้น แต่จะเป็นค่าใช้จ่ายเมื่อระบุค่าเดียว (I6d640, b/288169379)
การแก้ไขข้อบกพร่อง
- แก้ไขการรั่วไหลของหน่วยความจำในตารางสล็อต (73fcfe)
- แก้ไขวิธีที่เราคืนค่า
rememberSaveableเมื่อstateSaverแสดงผลเป็น null (90748c)
เวอร์ชัน 1.6.0-alpha01
21 มิถุนายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.6.0-alpha01 เวอร์ชัน 1.6.0-alpha01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ข้ามการจัดองค์ประกอบใหม่ขององค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)
- ลดการจัดสรรเมื่อใช้สแนปชอต (I65c09)
- หลีกเลี่ยงการคำนวณ
readableHashในDerivedStateหากไม่ได้แก้ไขสแนปชอต (68c565)
รุ่น 1.5
เวอร์ชัน 1.5.4
18 ตุลาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.4 เวอร์ชัน 1.5.4 มีคอมมิตเหล่านี้
เวอร์ชัน 1.5.3
4 ตุลาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.3 เวอร์ชัน 1.5.3 มีคอมมิตเหล่านี้
รุ่น 1.5.2
27 กันยายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.2 เวอร์ชัน 1.5.2 มีคอมมิตเหล่านี้
รุ่น 1.5.1
6 กันยายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.1 เวอร์ชัน 1.5.1 มีคอมมิตเหล่านี้
เวอร์ชัน 1.5.0
9 สิงหาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.0 เวอร์ชัน 1.5.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- นำการจัดสรรในการจัดองค์ประกอบใหม่ ภาพเคลื่อนไหวสี และ
AndroidComposeViewออกแล้ว (Ib2bfa) - เพิ่ม
@StateFactoryMarkerคำอธิบายประกอบเพื่อทำเครื่องหมายฟังก์ชันที่สร้างสถานะและต้องห่อหุ้มไว้ในการเรียกremember(I64550) - เพิ่มเวอร์ชันดั้งเดิมของ State และ
MutableState(fb3d89) - เพิ่ม
Snapshot.isApplyObserverNotificationPendingแล้ว (I672a5) - เพิ่มเวอร์ชันดั้งเดิมของ
StateAPI ซึ่งช่วยให้ติดตามค่า Int, Long, Float และ Double ในออบเจ็กต์Stateได้โดยไม่ต้องเสียค่าปรับสำหรับการแปลงอัตโนมัติ ใช้เมธอด Factory ใหม่mutableIntState(Int),mutableFloatStateOf(Float)ฯลฯ เพื่อใช้ฟีเจอร์เหล่านี้ (I48e43)
การแก้ไขข้อบกพร่อง
- ข้ามการจัดองค์ประกอบใหม่ขององค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)
- อย่าเก็บข้อมูลอ้างอิงสแนปชอตใน
ComposerImpl(0206f7) - อย่าใช้การจัดองค์ประกอบ 2 ครั้ง (f5791b)
- ตรวจสอบการลบล้างค่าสถานะที่ได้มาซึ่งไม่ได้เริ่มต้น (aa2a92)
- โทรหา
onEndChangesระหว่างการทิ้งองค์ประกอบ (62cc8c) - แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย (4beb41)
- แก้ไขการหยุดชะงักที่อาจเกิดขึ้น (c1a425 และ 8edce0)
- ตอนนี้ Recomposer ที่สร้างขึ้นสำหรับหน้าต่าง Android จะบล็อกเฉพาะการเรียกไปยัง
withFrameNanosแทนที่จะบล็อกการคอมโพสทั้งหมดเมื่อได้รับการแจ้งเตือน ON_STOP ซึ่งหมายความว่าหน้าต่างที่เชื่อมโยงกับกิจกรรมที่หยุดแล้วจะยังคงจัดองค์ประกอบใหม่สำหรับการเปลี่ยนแปลงข้อมูล แต่ภาพเคลื่อนไหวหรือผู้เรียกอื่นๆ ของwithFrameNanosจะถูกบล็อก (Id9e7f, b/240975572) - เรียกใช้การเรียกกลับการปิดใช้งานสำหรับ
LayoutNodeก่อนทิ้งเอฟเฟกต์ 3784073 - แก้ไขสถานะที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท ea81df9
- แก้ไขการถดถอยของการแก้ไขสดสำหรับ Composable ที่มีโหนด 73fd4d8
- ON_STOP ควรหยุดการออกอากาศนาฬิกาเฟรมชั่วคราวแทนการคอมโพส ae276f1
- ทำให้ขอบเขต
SnapshotStateObserverไม่ถูกต้องสำหรับสถานะที่ได้มาซึ่งไม่มีการเปลี่ยนแปลง 84d9b1c - แก้ไขการล็อกตายที่อาจเกิดขึ้นเมื่อทิ้งองค์ประกอบ 28761fc
- แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย 92d4156
- แก้ไขแฟล็กที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท (8a03e9)
- เรียกใช้การเรียกกลับการปิดใช้งานสำหรับ
LayoutNodeก่อนทิ้งเอฟเฟกต์ (8b0fa4) - แก้ไข
endToMarker()เมื่อสิ้นสุดกลุ่มโหนด (d71d980) - ใช้
SlotWriterกลุ่มปัจจุบันเพื่อตรวจสอบการปิดใช้งาน (a0b518b) - นำ
fillในSlotTable.moveSlotGapTo()ออกแล้วย้ายไปปิด (81f9935) - แก้ไขการลบล้างที่ขาดหายไปขณะย้ายเนื้อหาที่ย้ายได้ (1d7c024)
- แก้ไขการลบล้างทันทีสำหรับเนื้อหาที่ย้ายได้ซึ่งย้ายแล้ว (8676618)
การปรับปรุงประสิทธิภาพ
- หลีกเลี่ยงการคำนวณ
readableHashในDerivedStateหากไม่ได้แก้ไขสแนปชอต (307102) - การจัดสรรที่ลดลง (I65c09, d7ea77, 727974 และ 445808)
- การยกเลิกการเขียนอย่างรวดเร็ว
CoroutineScopes(a55362 และ bd382f) - เขียนทับบันทึกของออบเจ็กต์สถานะด้วยบันทึกสถานะที่เข้าถึงไม่ได้ (c986960)
- ใช้คอมโพสเซอร์ที่มีขอบเขตที่ถูกต้องเมื่อสร้างกลุ่ม (9a5e5b6)
- ใช้
IdentityArraySetเพื่อจัดเก็บการล้างข้อมูลสแนปชอต (7f60cca) - ลดการจัดสรรสำหรับการสังเกตการณ์สแนปชอต (5bc535f)
เวอร์ชัน 1.5.0-rc01
26 กรกฎาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.0-rc01 เวอร์ชัน 1.5.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
เลื่อนการอ่านสถานะที่ได้มาอีกครั้งจนกว่าจะบันทึกการเปลี่ยนแปลง (f38099)
คุณสามารถเลือกตรวจสอบเพื่อแนะนำให้ย้ายข้อมูลการเรียก
mutableStateOf()ไปยังประเภทเฉพาะทางที่เกี่ยวข้องสำหรับ Primitive ได้ รหัส Lint คือAutoboxingStateCreationก่อนหน้านี้ การตรวจสอบนี้จะเปิดใช้โดยค่าเริ่มต้นสำหรับทุกโปรเจ็กต์ หากต้องการดูคำเตือนนี้ในเอดิเตอร์ของ Android Studio และเอาต์พุต Lint ของโปรเจ็กต์ ให้เปลี่ยนระดับความรุนแรงจากข้อมูลเป็นการเตือน (หรือสูงกว่า) โดยประกาศwarning "AutoboxingStateCreation"ภายในไฟล์กำหนดค่า build.gradle หรือ build.gradle.kts ของโมดูลตามที่แสดง (I34f7e)android { lint { warning "AutoboxingStateCreation" } ... }
เวอร์ชัน 1.5.0-beta03
28 มิถุนายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.0-beta03 เวอร์ชัน 1.5.0-beta03 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ข้ามการจัดองค์ประกอบใหม่ขององค์ประกอบย่อยที่จะนำออก (Ieeb99, b/254645321)
เวอร์ชัน 1.5.0-beta02
7 มิถุนายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.0-beta02 เวอร์ชัน 1.5.0-beta02 มีคอมมิตเหล่านี้
การปรับปรุงประสิทธิภาพ
- หลีกเลี่ยงการคำนวณ
readableHashในDerivedStateหากไม่ได้แก้ไขสแนปชอต (307102)
เวอร์ชัน 1.5.0-beta01
24 พฤษภาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.0-beta01 เวอร์ชัน 1.5.0-beta01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- นำการจัดสรรในการประกอบใหม่ ภาพเคลื่อนไหวสี และ
AndroidComposeView(Ib2bfa) ออกแล้ว - เพิ่ม
@StateFactoryMarkerคำอธิบายประกอบเพื่อทำเครื่องหมายฟังก์ชันที่สร้างสถานะและต้องห่อหุ้มไว้ในการเรียกremember(I64550) - เพิ่มเวอร์ชันดั้งเดิมของ State และ
MutableState(fb3d89) - เพิ่ม
Snapshot.isApplyObserverNotificationPending(I672a5)
การแก้ไขข้อบกพร่อง
- การจัดสรรที่ลดลง (I65c09, d7ea77, 727974 และ 445808)
- อย่าเก็บข้อมูลอ้างอิงสแนปชอตใน
ComposerImpl(0206f7) - การยกเลิกการเขียนอย่างรวดเร็ว
CoroutineScopes(a55362 และ bd382f) - อย่าใช้การจัดองค์ประกอบ 2 ครั้ง (f5791b)
- ตรวจสอบการลบล้างค่าสถานะที่ได้มาซึ่งไม่ได้เริ่มต้น (aa2a92)
- เรียกใช้
onEndChangesระหว่างการทิ้งการเรียบเรียง (62cc8c) - แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย (4beb41)
- แก้ไขการหยุดชะงักที่อาจเกิดขึ้น (c1a425
- ON_STOP ควรหยุดการออกอากาศสัญญาณนาฬิกาของเฟรมชั่วคราวแทนการคอมโพสิต (f4a2d1)
- แก้ไขแฟล็กที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท (8a03e9)
- เรียกใช้การเรียกกลับการปิดใช้งานสำหรับ
LayoutNodeก่อนทิ้งเอฟเฟกต์ (8b0fa4)
การมีส่วนร่วมภายนอก
- เพิ่ม
Snapshot.isApplyObserverNotificationPending(I672a5)
เวอร์ชัน 1.5.0-alpha04
10 พฤษภาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.0-alpha04 เวอร์ชัน 1.5.0-alpha04 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มเวอร์ชันดั้งเดิมของ
StateAPI ซึ่งช่วยให้ติดตามค่า Int, Long, Float และ Double ในออบเจ็กต์Stateได้โดยไม่ต้องเสียค่าปรับสำหรับการแปลงอัตโนมัติ ใช้เมธอด Factory ใหม่mutableIntState(Int),mutableFloatStateOf(Float)ฯลฯ เพื่อใช้ฟีเจอร์เหล่านี้ (I48e43)
การแก้ไขข้อบกพร่อง
เรียกใช้
onEndChangesระหว่างการทิ้งการเรียบเรียง โหนดโฟกัสที่นำออกในช่วงComposition.disposeจะสมัครใช้บริการonEndChangesเพื่อรีเซ็ตโฟกัส(03d4a47)ตรวจสอบการลบล้างสำหรับค่าสถานะที่ได้มาซึ่งไม่ได้เริ่มต้น สถานะที่ได้มาแต่ละรายการจะเชื่อมโยงกับรายการการอ้างอิงใน
SnapshotStateObserverซึ่งใช้เพื่อลบล้างขอบเขตที่เชื่อมโยงกับสถานะที่ได้มาเมื่อใดก็ตามที่มีการเปลี่ยนแปลงการอ้างอิง การเปลี่ยนแปลงการขึ้นต่อกันจะได้รับการลงทะเบียนในการเลื่อนสแนปชอต ซึ่งอาจเกิดขึ้นหลังจากอ่านสถานะที่ได้มา (เนื่องจากการเรียกใช้Snapshot.notifyObjectsInitialized())ตรรกะการสังเกตสถานะที่ได้มาใน
SnapshotStateObserverก่อนหน้านี้จะล้างการอ้างอิงเก่า แล้วอ่านค่าใหม่ ซึ่งส่งผลให้เกิดสภาวะการแข่งขันที่มีการลบล้างในสถานะที่ล้างข้อมูลแล้ว ซึ่งไม่ได้ลงทะเบียนการลบล้างการอ้างอิงการเปลี่ยนแปลงนี้จะจัดลำดับการอ่านสถานะที่ได้มาและการล้างข้อมูลการอ้างอิงใหม่ เพื่อให้มั่นใจว่าการลบล้างจะเกิดขึ้นในสถานะที่ถูกต้องเสมอ (c472be6)
เวอร์ชัน 1.5.0-alpha03
19 เมษายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.0-alpha03 เวอร์ชัน 1.5.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ตอนนี้ Recomposer ที่สร้างขึ้นสำหรับหน้าต่าง Android จะบล็อกเฉพาะการเรียกไปยัง
withFrameNanosแทนที่จะบล็อกการคอมโพสทั้งหมดเมื่อได้รับการแจ้งเตือน ON_STOP ซึ่งหมายความว่าหน้าต่างที่เชื่อมโยงกับกิจกรรมที่หยุดแล้วจะยังคงจัดองค์ประกอบใหม่สำหรับการเปลี่ยนแปลงข้อมูล แต่ภาพเคลื่อนไหวหรือผู้เรียกอื่นๆ ของwithFrameNanosจะถูกบล็อก (Id9e7f, b/240975572)
การแก้ไขข้อบกพร่อง
- แก้ไขการหยุดชะงักที่อาจเกิดขึ้นในรายการและแผนที่สแนปชอต 5c1a425
- เรียกใช้การเรียกกลับการปิดใช้งานสำหรับ
LayoutNodeก่อนทิ้งเอฟเฟกต์ 3784073 - แก้ไขสถานะที่เปลี่ยนแปลงสำหรับ Lambda ที่รีสตาร์ท ea81df9
- แก้ไขการถดถอยของการแก้ไขสดสำหรับ Composable ที่มีโหนด 73fd4d8
- ON_STOP ควรหยุดการออกอากาศนาฬิกาเฟรมชั่วคราวแทนการคอมโพส ae276f1
- ทำให้ขอบเขต
SnapshotStateObserverไม่ถูกต้องสำหรับสถานะที่ได้มาซึ่งไม่มีการเปลี่ยนแปลง 84d9b1c - แก้ไขการล็อกตายที่อาจเกิดขึ้นเมื่อทิ้งองค์ประกอบ 28761fc
- แก้ไขการย้ายเนื้อหาไปยังองค์ประกอบย่อย 92d4156
เวอร์ชัน 1.5.0-alpha02
5 เมษายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.0-alpha02 เวอร์ชัน 1.5.0-alpha02 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- ตอนนี้โอเปอเรเตอร์
getValueของ Kotlin สามารถใช้ร่วมกันได้แล้ว (f174f6e)
แก้ไขข้อบกพร่อง ปรับปรุงประสิทธิภาพ
- เขียนทับบันทึกของออบเจ็กต์สถานะด้วยบันทึกสถานะที่เข้าถึงไม่ได้ (c986960)
- ใช้คอมโพสเซอร์ที่มีขอบเขตที่ถูกต้องเมื่อสร้างกลุ่ม (9a5e5b6)
- แก้ไข
endToMarker()เมื่อสิ้นสุดกลุ่มโหนด (d71d980) - ใช้
SlotWriterกลุ่มปัจจุบันเพื่อตรวจสอบการปิดใช้งาน (a0b518b) - ใช้
IdentityArraySetเพื่อจัดเก็บการล้างข้อมูลสแนปชอต (7f60cca) - นำ
fillในSlotTable.moveSlotGapTo()ออกแล้วย้ายไปปิด (81f9935) - แก้ไขการลบล้างที่ขาดหายไปขณะย้ายเนื้อหาที่ย้ายได้ (1d7c024)
- แก้ไขการลบล้างทันทีสำหรับเนื้อหาที่ย้ายได้ซึ่งย้ายแล้ว (8676618)
- ลดการจัดสรรสำหรับการสังเกตการณ์สแนปชอต (5bc535f)
เวอร์ชัน 1.5.0-alpha01
22 มีนาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.5.0-alpha01 เวอร์ชัน 1.5.0-alpha01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เพิ่ม
Modifier.Node#coroutineScopeเพื่อให้Modifier.Nodesเปิดใช้โครูทีนได้ (I76ef9) - อนุญาตให้
Modifier.Nodesอ่านCompositionLocalsโดยการติดตั้งใช้งานอินเทอร์เฟซCompositionLocalConsumerModifierNode(Ib44df)
เวอร์ชัน 1.4
เวอร์ชัน 1.4.3
3 พฤษภาคม 2023
androidx.compose.runtime:runtime-*:1.4.3 จะเผยแพร่โดยไม่มีการเปลี่ยนแปลง
เวอร์ชัน 1.4.2
19 เมษายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.4.2 เวอร์ชัน 1.4.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
แก้ไขการหยุดชะงักที่อาจเกิดขึ้นในรายการสแนปชอตและแผนที่ 2eb6570
การเพิ่มเนื้อหาลงใน
SnapshotStateListหรือSnapshotStateMapอาจทำให้เกิดภาวะหยุดชะงักหากการแก้ไขเกิดขึ้นพร้อมกับการเขียนโดยตรงไปยังบันทึกสถานะ การเปลี่ยนแปลงที่ 93fcae828b นำมาใช้ทำให้มีโอกาสพบปัญหานี้มากขึ้นอย่างมาก โดยใช้การเขียนโดยตรงเพื่อปล่อยระเบียนที่ไม่ได้ใช้ตอนนี้การล็อกจะเรียงตามลำดับเพื่อให้ระบบไม่พยายามล็อกสแนปชอตเมื่อมีการล็อกแผนที่หรือรายการ
เวอร์ชัน 1.4.1
5 เมษายน 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.4.1 เวอร์ชัน 1.4.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
endToMarker()เมื่อสิ้นสุดกลุ่มโหนด d71d980
เวอร์ชัน 1.4.0
22 มีนาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.4.0 เวอร์ชัน 1.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงสำคัญตั้งแต่เวอร์ชัน 1.3.0
- ใช้ค่าเริ่มต้นจาก
LiveDataสำหรับการคอมโพสครั้งแรก 3680e25 - เพิ่ม
ComposeNodeLifecycleCallbackเพื่อสังเกตวงจรของโหนด Compose 8b6a258 - เพิ่มพร็อพเพอร์ตี้
parameterTypesไปยังComposableMethod7b6c7ad
การแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพ
- ล้างดัชนีขอบเขตทั้ง 2 รายการใน
SnapshotStateObserver29f4a3e - เพิ่มกลุ่มที่จำเป็นในเนื้อหาของ Lambda ที่ข้ามไม่ได้ 7d06752
- ปรับปรุงลักษณะการอ้างอิงหน่วยความจำของสถานะสแนปชอต 93fcae8
- นำการล้อมกรอบในการค้นหาภาพในเครื่องออก 0875717
- ใช้คีย์ที่ถูกต้องสำหรับกลุ่มโหนดที่ใช้ซ้ำไม่ได้ 6388d8d
- ป้องกัน
SnapshotStateObserverจากการใช้แบบเรียกซ้ำและพร้อมกัน 98cb6ba - เพิ่มการตรวจสอบดัชนีที่อยู่นอกขอบเขตในเมธอด
IdentityArraySet"get" 35a77d3 - อัปเดตโมดูลการเขียนเพื่อใช้ส่วนขยาย
ViewTreeLifecycleOwner21c2122 - ส่งการแจ้งเตือนการใช้หลังจากที่ Recomposer สร้างเฟรมเสร็จแล้ว 98f2641
- แก้ไขข้อขัดข้องของดัชนีที่อยู่นอกขอบเขตเมื่อยกเลิก Recomposer 8f8656f
- บังคับให้จัดองค์ประกอบใหม่เสมอหากผู้ให้บริการระดับบนสุดของการจัดองค์ประกอบมีการเปลี่ยนแปลง 9526fcc
- ความคลาดเคลื่อนของ Recomposer สำหรับงานที่ยกเลิก a55f7ed
- ปรับปรุงการจัดการการล้างข้อมูลสำหรับนักแต่งเพลงจำนวนมาก 9b7ed67
- แก้ไขการสร้างกลุ่มปิดสำหรับผลตอบแทนที่ไม่ใช่ในพื้นที่ b6f590c
เวอร์ชัน 1.4.0-rc01
8 มีนาคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.4.0-rc01 เวอร์ชัน 1.4.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
เวอร์ชัน 1.4.0-beta02
22 กุมภาพันธ์ 2023
androidx.compose.runtime:runtime:1.4.0-beta02 และ androidx.compose.runtime:runtime-saveable:1.4.0-beta02 เปิดตัวแล้ว เวอร์ชัน 1.4.0-beta02 มีคอมมิตเหล่านี้
เวอร์ชัน 1.4.0-beta01
8 กุมภาพันธ์ 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.4.0-beta01 เวอร์ชัน 1.4.0-beta01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
ComposeNodeLifecycleCallbackเพิ่ม ซึ่งช่วยให้สังเกตวงจรของโหนด Compose ได้ (I3731b)- เพิ่ม
@TestOnlyลงในComposer.disableSourceInformation()เนื่องจากฟังก์ชันนี้จะเรียกใช้ได้อย่างปลอดภัยในการทดสอบเท่านั้น (I896c8)
การแก้ไขข้อบกพร่อง
- นำการ Boxing ในการค้นหาในเครื่องของการเขียนออก (62f66a)
- ปรับปรุงลักษณะการอ้างอิงหน่วยความจำของสถานะสแนปชอต (dfb451)
เวอร์ชัน 1.4.0-alpha05
25 มกราคม 2023
androidx.compose.runtime:runtime:1.4.0-alpha05 และ androidx.compose.runtime:runtime-saveable:1.4.0-alpha05 เปิดตัวแล้ว เวอร์ชัน 1.4.0-alpha05 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ประเภท/ค่า Null ของฟังก์ชันในบรรทัด/ที่เลิกใช้งานแล้ว/ที่ซ่อนอยู่เพิ่มเติม (I24f91)
เวอร์ชัน 1.4.0-alpha04
11 มกราคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.4.0-alpha04 เวอร์ชัน 1.4.0-alpha04 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
TestMonotonicFrameClockตอนนี้ใช้คำอธิบายประกอบการทดสอบที่ถูกต้องแล้ว (I95c9e)
การแก้ไขข้อบกพร่อง
- ป้องกัน
SnapshotStateObserverจากการใช้ซ้ำและการใช้พร้อมกัน (d902fb)
เวอร์ชัน 1.4.0-alpha03
7 ธันวาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.4.0-alpha03 เวอร์ชัน 1.4.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เพิ่มเมธอดสาธารณะใหม่ลงในคลาส
ComposableMethodที่คล้ายกับjava.lang.reflect.Method#getParameterTypes()(Iab0c3)
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะส่งการแจ้งเตือนการใช้สแนปชอตหลังจากที่
Recomposerใช้การเปลี่ยนแปลงเสร็จแล้ว (Iad6c0, b/222093277)
เวอร์ชัน 1.4.0-alpha02
9 พฤศจิกายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.4.0-alpha02 เวอร์ชัน 1.4.0-alpha02 มีคอมมิตต่อไปนี้
เวอร์ชัน 1.4.0-alpha01
24 ตุลาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.4.0-alpha01 เวอร์ชัน 1.4.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
SnapshotStateListและSnapshotStateMapมีการติดตั้งใช้งานtoList()และtoMap()อย่างชัดเจนแล้ว เมธอดเหล่านี้จะแสดงเนื้อหาปัจจุบันโดยไม่ต้องทำสำเนา เนื่องจากจะแสดงข้อมูลภายในที่เปลี่ยนแปลงไม่ได้ซึ่งใช้จัดเก็บเนื้อหา ค่านี้สามารถใช้เพื่อสร้างโฟลว์ของค่าโดยใช้snapshotFlowโดยไม่ต้องคัดลอกข้อมูล (Ica2bd)
เวอร์ชัน 1.3
เวอร์ชัน 1.3.3
11 มกราคม 2023
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.3 เวอร์ชัน 1.3.3 มีคอมมิตเหล่านี้
- ไม่มีการเปลี่ยนแปลงตั้งแต่เวอร์ชัน 1.3.2
เวอร์ชัน 1.3.2
7 ธันวาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.2 เวอร์ชัน 1.3.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- อัปเดตเพื่อรองรับ androidx.compose.ui 1.3.2
เวอร์ชัน 1.3.1
9 พฤศจิกายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.1 เวอร์ชัน 1.3.1 มีคอมมิตเหล่านี้
เวอร์ชัน 1.3.0
24 ตุลาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.0 เวอร์ชัน 1.3.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.2.0
การจัดการข้อยกเว้น / การสนับสนุนการแก้ไขสด
- เราได้เพิ่ม API เพื่อรองรับการแก้ไขสดได้ดียิ่งขึ้น เพื่อให้จัดการข้อยกเว้นในระหว่างการคอมโพสได้
- การจัดการข้อผิดพลาดในการเขียนสำหรับ Hot Reload
- จัดการข้อผิดพลาดในการแก้ไขสดเมื่อบันทึก/กู้คืน
การติดตามการเรียบเรียง
- เราได้เพิ่ม API การติดตามรันไทม์เพื่อรองรับเครื่องมือการติดตามการคอมโพสิตใหม่
- สร้างการเรียกใช้เหตุการณ์การติดตามที่สามารถคอมโพสได้
- เพิ่ม ComposerKt.traceEventStart(Int, String) อีกครั้ง
Composable Reflection APIs
- เราได้เพิ่ม
ComposableMethodAPI ใหม่เพื่อให้การเรียกใช้ API ที่ประกอบได้โดยอิงตามการสะท้อนมีความน่าเชื่อถือมากขึ้น - ย้าย invokeComposable ไปยังรันไทม์ของ Compose
- ปรับปรุง API เพื่อเรียกใช้เมธอดที่ใช้ร่วมกันได้
การแก้ไขรันไทม์
- แก้ไขการทดสอบช่วงที่ผิดพลาดสำหรับการตรวจสอบตารางช่วงเพื่อหาเครื่องหมาย
- อนุญาตให้ย้ายเนื้อหาที่ย้ายได้เข้าและออกจาก SubcomposeLayout
- แก้ไขการย้ายเนื้อหาไปยังเนื้อหาใหม่ขององค์ประกอบย่อย
ระบบสแนปชอต
- ระบบสแนปชอตได้รับการปรับปรุงต่างๆ เกี่ยวกับการจัดการหน่วยความจำ ประสิทธิภาพ และความถูกต้อง
- เพิ่มประสิทธิภาพการนำขอบเขตออกใน SnapshotStateObserver
- ทิ้งสแนปชอตที่ซ้อนกันซึ่งสร้างจากสแนปชอตโปร่งใส
- แก้ไขเงื่อนไขการแข่งขันเมื่ออ่านสถานะจากสแนปชอตส่วนกลาง
- รองรับ DerivedState ใน SnapshotStateObserver
- ป้องกันไม่ให้นำสถานะที่ได้มาจากการคอมโพสออกจากคอมโพสเมื่ออ่านในขอบเขตอื่น
- ใช้ IdentityArrayMap แทน HashMap ภายใน DerivedState
- อัปเดตเครื่องสังเกตสถานะที่ได้มาเพื่อใช้เวกเตอร์ที่เปลี่ยนแปลงได้
- อัปเดตการล้างสถานะ SnapshotStateObserver
- แทนที่ SnapshotStateObserver.invalidated ด้วย ArraySet
- แก้ไขเงื่อนไขการแข่งขันเมื่ออ่านสถานะจากสแนปชอตส่วนกลาง
- แก้ไขการใช้ระเบียนที่ล้าสมัยในการคำนวณแฮช DerivedState
- แก้ไขเงื่อนไขการแข่งขันเมื่อเลื่อนสแนปชอตส่วนกลาง
- เร่งการล้างข้อมูลการสังเกตขอบเขตใน SnapshotStateObserver
เวอร์ชัน 1.3.0-rc01
5 ตุลาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.0-rc01 เวอร์ชัน 1.3.0-rc01 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไข
ArrayIndexOutOfBoundsExceptionที่มาจากตารางช่อง (b/249076084)
เวอร์ชัน 1.3.0-beta03
21 กันยายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.0-beta03 เวอร์ชัน 1.3.0-beta03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงานที่ส่งผลกับส่วนอื่นในระบบ
- พารามิเตอร์ไปยัง
rememberและrememberCoroutineScopeเปลี่ยนเป็นcrossinlineแล้ว ซึ่งจะรายงานข้อผิดพลาดสำหรับการกลับคืนก่อนเวลาแทนที่จะอนุญาตให้กลับคืนก่อนเวลา ซึ่งจะทำให้ระบบรายงานข้อผิดพลาดภายในในภายหลัง - การเปลี่ยนแปลงนี้อาจทำให้เกิดข้อผิดพลาดของคอมไพเลอร์ใหม่ที่ต้องรายงาน ซึ่งต้องนำการคืนค่าที่ไม่ใช่แบบเฉพาะออกจาก Lambda ที่ส่งไปยังฟังก์ชันเหล่านี้ (Ibea62)
เวอร์ชัน 1.3.0-beta02
7 กันยายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.0-beta02 เวอร์ชัน 1.3.0-beta02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- API ที่อัปเดตแล้ว (I64ca0)
เวอร์ชัน 1.3.0-beta01
24 สิงหาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.0-beta01 เวอร์ชัน 1.3.0-beta01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เราได้เพิ่ม
findเมธอดลงในCompositionDataเพื่ออนุญาตให้เครื่องมือสำหรับนักพัฒนาแอปที่ใช้ API นี้ค้นหากลุ่มย่อยขององค์ประกอบได้อย่างรวดเร็วโดยใช้ข้อมูลประจำตัวขององค์ประกอบ (I5794f)
เวอร์ชัน 1.3.0-alpha03
10 สิงหาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.0-alpha03 เวอร์ชัน 1.3.0-alpha03 มีคอมมิตต่อไปนี้
เวอร์ชัน 1.3.0-alpha02
27 กรกฎาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.0-alpha02 เวอร์ชัน 1.3.0-alpha02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
ComposerKt.traceEventStart(Int, String)อีกครั้งเพื่อความเข้ากันได้แบบย้อนหลัง (I6e6de)
เวอร์ชัน 1.3.0-alpha01
29 มิถุนายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.3.0-alpha01 เวอร์ชัน 1.3.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ย้ายฟังก์ชันการทำงานของยูทิลิตีไปยังรันไทม์ (I4f729)
เวอร์ชัน 1.2
เวอร์ชัน 1.2.1
10 สิงหาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.1 เวอร์ชัน 1.2.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขหน่วยความจำรั่ว: ทิ้งสแนปชอตที่ซ้อนกันซึ่งสร้างจากสแนปชอตโปร่งใส b/239603305
เวอร์ชัน 1.2.0
27 กรกฎาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0 เวอร์ชัน 1.2.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงสำคัญตั้งแต่ 1.1.0
Compose Runtime มีฟีเจอร์จำนวนหนึ่งที่เปิดตัวในเวอร์ชัน 1.2.0 พร้อมกับการแก้ไขข้อบกพร่องหลายอย่างเพื่อเพิ่มความเสถียร ฟีเจอร์ใหม่ที่สำคัญที่สุดคือการเปิดตัว
movableContentOfAPI ซึ่งใช้เพื่อเปิดใช้ UX ที่ซับซ้อน เช่น การเปลี่ยนองค์ประกอบที่แชร์movableContentOfAPI จะแปลง Lambda ที่ประกอบกันได้เป็น Lambda ที่ย้ายสถานะและโหนดที่เกี่ยวข้องไปยังตำแหน่งใหม่เมื่อมีการเรียกใช้ เมื่อการโทรครั้งก่อนออกจากคอมโพสิชัน ระบบจะเก็บรักษาสถานะไว้ชั่วคราว และหากมีการโทรใหม่ไปยัง Lambda เข้าสู่คอมโพสิชัน ระบบจะย้ายสถานะและโหนดที่เชื่อมโยงไปยังตำแหน่งของการโทรใหม่ หากไม่มีการเพิ่มการโทรใหม่ ระบบจะนำสถานะออกอย่างถาวรและแจ้งให้ผู้สังเกตการณ์ทราบหากมีการเรียกใช้
movableContentOfแลมบ์ดาหลายครั้งในการจัดองค์ประกอบเดียวกัน ระบบจะสร้างสถานะและโหนดใหม่สำหรับการเรียกใช้แต่ละครั้ง และเมื่อการเรียกใช้สิ้นสุดลงและมีการเรียกใช้ใหม่ สถานะจะย้ายจากการเรียกใช้ที่สิ้นสุดครั้งแรกไปยังการเรียกใช้ใหม่ตามลำดับการเรียกใช้ ระบบจะนำสถานะทั้งหมดที่การเรียกใหม่ไม่ได้อ้างสิทธิ์ออกอย่างถาวรนอกจากฟีเจอร์นี้และฟีเจอร์ใหม่อื่นๆ อีก 2-3 รายการแล้ว เรายังใช้เวลาส่วนใหญ่ไปกับการปรับระบบรันไทม์และสถานะสแนปชอตให้เสถียร นำการรั่วไหลของหน่วยความจำต่างๆ ออกและเพิ่มประสิทธิภาพเส้นทางโค้ด
ดูรายการการเปลี่ยนแปลงโดยสรุปได้ที่ด้านล่าง
ฟีเจอร์ใหม่ใน 1.2
- เพิ่มสแนปชอตทดลอง unsafeEnter/Leave
- เพิ่ม Snapshot.asContextElement API เวอร์ชันทดลอง
- ขอแนะนำ Snapshot.withoutReadObservation
- อนุญาตให้ย้ายสถานะภายในคอมโพสิต
- การติดตามการจัดองค์ประกอบใหม่ใน Compose
ประสิทธิภาพใน 1.2
- ปรับปรุงประสิทธิภาพของโฆษณาเปรียบเทียบในพื้นที่
- ควรได้โปรไฟล์พื้นฐานสำหรับ Compose โดยใช้การเปรียบเทียบ
การแก้ไขข้อบกพร่องใน 1.2
- นำข้อมูลการติดตามออกจากขอบเขตการสร้างใหม่ของรุ่น
- ป้องกันไม่ให้นำสถานะที่ได้มาจากการคอมโพสออกจากคอมโพสเมื่ออ่านในขอบเขตอื่น
- ใช้ removeScope() ที่มีประสิทธิภาพมากขึ้นใน SnapshotStateObserver
- ล้างการอ้างอิงสถานะที่ได้มาในการประกอบ
- แก้ไขการเปลี่ยนแปลง currentCompositeKeyHash หลังจากมีการจัดองค์ประกอบใหม่ภายในเนื้อหาที่เคลื่อนย้ายได้
- ล้างข้อมูลองค์ประกอบที่ใช้ไม่ได้ระหว่างการทิ้ง
- แก้ไขการอ่านสถานะที่ได้มาในระหว่างการประกอบใหม่
- แก้ไขหน่วยความจำรั่วเมื่อสังเกตออบเจ็กต์สถานะที่ได้มา
- แก้ไขคีย์แฮชแบบผสมของ movableContent ให้สอดคล้องกัน
- แก้ไขกรณีที่คอมโพสเซอร์ขัดข้อง
- ตรวจสอบว่าการล้างข้อมูลกลุ่มที่บังคับจะบังคับให้มีการจัดองค์ประกอบใหม่
- แก้ไขข้อบกพร่องเมื่อมีการกู้คืน rememberSaveable พร้อมอินพุตในลำดับที่ไม่ถูกต้อง
เวอร์ชัน 1.2.0-rc03
29 มิถุนายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-rc03 เวอร์ชัน 1.2.0-rc03 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ก่อนหน้านี้ ระบบจะนำการสังเกตสถานะที่ได้มาออกจากขอบเขตการเขียนใหม่และการเขียนพร้อมกันโดยไม่มีเงื่อนไข ซึ่งทำให้ขอบเขตอื่นๆ ที่อาจยังคงสังเกตสถานะที่ได้มาใช้งานไม่ได้ การเปลี่ยนแปลงนี้จะนำอินสแตนซ์ของสถานะที่ได้มาออกก็ต่อเมื่อขอบเขตอื่นๆ ไม่ได้สังเกตการณ์อินสแตนซ์นั้นอีกต่อไป (b/236618362)
เวอร์ชัน 1.2.0-rc02
22 มิถุนายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-rc02 เวอร์ชัน 1.2.0-rc02 มีคอมมิตเหล่านี้
เวอร์ชัน 1.2.0-rc01
15 มิถุนายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-rc01 เวอร์ชัน 1.2.0-rc01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้อินเทอร์เฟซในไลบรารี Compose สร้างขึ้นโดยใช้เมธอดอินเทอร์เฟซเริ่มต้นของ jdk8 (I5bcf1)
เวอร์ชัน 1.2.0-beta03
1 มิถุนายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-beta03 เวอร์ชัน 1.2.0-beta03 มีคอมมิตเหล่านี้
เวอร์ชัน 1.2.0-beta02
18 พฤษภาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-beta02 เวอร์ชัน 1.2.0-beta02 มีคอมมิตเหล่านี้
เวอร์ชัน 1.2.0-beta01
11 พฤษภาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-beta01 เวอร์ชัน 1.2.0-beta01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- นี่คือรุ่นเบต้า 1.2 รุ่นแรก
การเปลี่ยนแปลง API
- เพิ่มฟีเจอร์ทดลอง
Snapshot.unsafeEnter/unsafeLeave(I108f3) - เพิ่ม
Snapshot.asContextElement()API เวอร์ชันทดลอง (Iff072) - ตอนนี้คุณสามารถใช้
@ComposableTargetคำอธิบายประกอบและคำอธิบายประกอบที่ทำเครื่องหมายด้วย@ComposableTargetMarkerในขอบเขตไฟล์ได้แล้วโดยใช้คำนำหน้า@fileการใช้คำอธิบายประกอบเป้าหมายที่ขอบเขตไฟล์จะทำให้คอมไพเลอร์ถือว่าฟังก์ชันที่ประกอบได้ทั้งหมดในไฟล์มีไว้เพื่อกำหนดเป้าหมายตัวใช้ที่เชื่อมโยง เช่น การใช้@file:UiComposableจะประกาศว่าฟังก์ชัน@Composableทั้งหมดกำหนดเป้าหมายไปยังตัวใช้ Compose UI ฟังก์ชันที่ต้องกำหนดเป้าหมายผู้ใช้รายอื่นต้องระบุคำอธิบายประกอบเครื่องหมายเป้าหมายอย่างชัดเจนสำหรับผู้ใช้ที่ต้องการ (I40804)
เวอร์ชัน 1.2.0-alpha08
20 เมษายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-alpha08 เวอร์ชัน 1.2.0-alpha08 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เพิ่ม
TracingInProgressลงในอินเทอร์เฟซCompositionTracerแล้ว (Ic6f12) - เพิ่ม
recomposeScopeIdentityไปยัง Composer (I0c873) - API การติดตามที่ถูกจำกัด (Composer.setTracer) เป็น
OptIn(InternalComposeTracingApi)(I9187f) - เพิ่ม
ResuableContentHostซึ่งช่วยให้ควบคุมอายุการใช้งานของสถานะที่สร้างขึ้นสำหรับเนื้อหาที่นำกลับมาใช้ซ้ำได้ดีขึ้น เช่น หากไม่ได้ใช้องค์ประกอบย่อยชั่วคราว คุณจะปิดใช้งานเนื้อหาได้ ซึ่งจะทำให้ระบบลืมสถานะที่บันทึกไว้ทั้งหมดในองค์ประกอบ ซึ่งจะทริกเกอร์ เช่น เอฟเฟกต์แบบใช้แล้วทิ้งทั้งหมด (I2c0f2, b/220322704)
เวอร์ชัน 1.2.0-alpha07
6 เมษายน 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-alpha07 เวอร์ชัน 1.2.0-alpha07 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เพิ่มฟังก์ชันใหม่
Snapshot.withoutReadObservation { ... }แล้ว ซึ่งช่วยให้ผู้ใช้เรียกใช้ Lambda ที่ส่งผ่านได้โดยไม่ต้องติดตามการเปลี่ยนแปลงค่าสถานะที่อ่านในระหว่างบล็อกนี้ คุณอาจพบว่ามีประโยชน์ในกรณีการใช้งานเมื่อต้องการใช้ประโยชน์จากการเขียน/อ่านที่ปลอดภัยแบบเธรดตามสแนปชอต แต่ต้องการอ่านค่าได้โดยไม่ต้องทำให้เกิดการจัดองค์ประกอบหรือการวัดซ้ำที่ไม่จำเป็น (I9f365, b/214054486)
เวอร์ชัน 1.2.0-alpha06
23 มีนาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-alpha06 เวอร์ชัน 1.2.0-alpha06 มีคอมมิตเหล่านี้
เวอร์ชัน 1.2.0-alpha05
9 มีนาคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-alpha05 เวอร์ชัน 1.2.0-alpha05 มีคอมมิตเหล่านี้
การมีส่วนร่วมภายนอก
- อัปเดตให้ใช้ Kotlinx coroutines 1.6.0 (I3366d)
เวอร์ชัน 1.2.0-alpha04
23 กุมภาพันธ์ 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-alpha04 เวอร์ชัน 1.2.0-alpha04 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
เพิ่ม
ComposableTarget,ComposableTargetMarkerและComposableOpenTargetซึ่งช่วยให้รายงานเวลาคอมไพล์ได้เมื่อ มีการเรียกใช้ฟังก์ชันที่ประกอบกันได้ซึ่งกำหนดเป้าหมายไปยังตัวใช้ที่ไม่ได้ ออกแบบมาให้ใช้ในกรณีส่วนใหญ่ ปลั๊กอินคอมไพเลอร์ Compose จะอนุมานคำอธิบายประกอบได้ ดังนั้นการใช้คำอธิบายประกอบเหล่านี้โดยตรงจึงไม่ค่อยเกิดขึ้น กรณีที่อนุมานไม่ได้ ได้แก่ การสร้างและ การใช้แอปพลิเคชันที่กำหนดเอง ฟังก์ชันที่ประกอบกันได้แบบนามธรรม (เช่น เมธอดอินเทอร์เฟซ) ฟิลด์ หรือตัวแปรส่วนกลางที่เป็น แลมบ์ดาที่ประกอบกันได้ (ระบบจะอนุมานตัวแปรและพารามิเตอร์ภายใน) หรือ เมื่อใช้
ComposeNodeหรือฟังก์ชันที่ประกอบกันได้ที่เกี่ยวข้องสำหรับตัวใช้ที่กำหนดเอง ฟังก์ชันที่ประกอบกันได้ซึ่งเรียกใช้
ComposeNodeหรือReusableComposeNodeต้องเพิ่ม คำอธิบายประกอบCompoableTargetสำหรับฟังก์ชันและประเภทพารามิเตอร์แลมดาที่ประกอบกันได้ อย่างไรก็ตาม เราขอแนะนำ ให้สร้างคำอธิบายประกอบที่มีคำอธิบายประกอบเป็นComposableTargetMarkerแล้วใช้คำอธิบายประกอบที่ทำเครื่องหมาย แทนComposableTargetโดยตรง คำอธิบายประกอบที่ใช้ร่วมกันได้ ซึ่งทำเครื่องหมายด้วยComposableTargetMarkerจะเทียบเท่ากับComposbleTargetที่มีชื่อแบบเต็มของแอตทริบิวต์ คลาสเป็นพารามิเตอร์ของแอปพลิเคชัน ดูตัวอย่างการใช้ComposableTargetMarkerได้ที่anroidx.compose.ui.UiComposable(I38f11)
เวอร์ชัน 1.2.0-alpha03
9 กุมภาพันธ์ 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-alpha03 เวอร์ชัน 1.2.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
เพิ่ม
movableContentOfซึ่งแปลง Composable Lambda เป็น Lambda ที่ย้ายสถานะและโหนดที่เกี่ยวข้อง ไปยังตำแหน่งใหม่ที่เรียกใช้ เมื่อการโทรครั้งก่อนออกจาก การคอมโพส ระบบจะเก็บรักษาสถานะไว้ชั่วคราว และหากมีการโทรใหม่ ไปยัง Lambda เข้ามาในการคอมโพส ระบบจะย้ายสถานะและโหนดที่เชื่อมโยง ไปยังตำแหน่งของการโทรใหม่ หากไม่มีการเพิ่มการโทรใหม่ ระบบจะนำสถานะออกอย่างถาวรและจะแจ้งให้ผู้สังเกตการณ์ทราบหากมีการเรียกใช้
movableContentOfLambda หลายครั้งในการ คอมโพสเดียวกัน ระบบจะสร้างสถานะและโหนดใหม่สำหรับการเรียกใช้แต่ละครั้ง และเมื่อ การเรียกใช้สิ้นสุดลงและมีการเรียกใช้ใหม่ สถานะจะย้าย จากการเรียกใช้ที่สิ้นสุดครั้งแรกไปยังการเรียกใช้ใหม่ตามลำดับการเรียกใช้ ระบบจะนำสถานะทั้งหมดที่การเรียกใหม่ไม่ได้อ้างสิทธิ์ออก อย่างถาวร (Ib4850)เพิ่ม API การติดตามไปยังการคอมโพสเพื่อช่วยให้เครื่องมือต่างๆ สามารถติดตามฟังก์ชันที่คอมโพสได้ละเอียดมากขึ้น ตอนนี้คอมไพเลอร์ จะสร้างการเรียกไปยัง Tracing API ซึ่งรวมถึงข้อมูลแหล่งที่มา (Ib0eb5)
หากต้องการนำการเรียกเหล่านี้และข้อมูลแหล่งที่มาที่เกี่ยวข้อง ออกจากบิลด์รีลีส ให้เพิ่มกฎ Proguard ต่อไปนี้
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }เพิ่ม
InternalComposeScopeซึ่งจะช่วยให้เครื่องมือระบุ Composable ระหว่างการประกอบใหม่ได้ (I07a3f)
เวอร์ชัน 1.2.0-alpha02
26 มกราคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-alpha02 เวอร์ชัน 1.2.0-alpha02 มีคอมมิตเหล่านี้
เวอร์ชัน 1.2.0-alpha01
12 มกราคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.2.0-alpha01 เวอร์ชัน 1.2.0-alpha01 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เพิ่มฟิลด์
identityในCompositionDataเพื่อสร้าง รหัสที่ไม่เปลี่ยนใน Layout Inspector (Ic116e)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ขึ้นอยู่กับ Kotlin
1.6.10
เวอร์ชัน 1.1
เวอร์ชัน 1.1.1
23 กุมภาพันธ์ 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.1 เวอร์ชัน 1.1.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
NullPointerExceptionที่androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList(aosp/1947059, b/206677462) - แก้ไขข้อขัดข้องที่เกิดจากเนื้อหาในคลิปบอร์ดขณะอ่านจากคลิปบอร์ดใน Android (I06020, b/197769306)
- แก้ไข RTL ใน
LazyVerticalGrid(aosp/1931080, b/207510535)
เวอร์ชัน 1.1.0
9 กุมภาพันธ์ 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0 เวอร์ชัน 1.1.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.0.0
- รองรับเอฟเฟกต์การเลื่อนเกินของ Android 12 อย่างเสถียร
- การปรับปรุงขนาดเป้าหมายการสัมผัส
- โปรดทราบว่าเมื่อใช้ Compose 1.0 คอมโพเนนต์ Material จะขยายพื้นที่เลย์เอาต์เพื่อให้เป็นไปตามหลักเกณฑ์การช่วยเหลือพิเศษของ Material สำหรับขนาดเป้าหมายการสัมผัส เช่น เป้าหมายการสัมผัสของปุ่มจะขยายเป็นขนาดขั้นต่ำ
48x48dpแม้ว่าคุณจะตั้งค่าขนาดของปุ่มให้เล็กกว่านี้ก็ตาม ซึ่งจะทําให้ Compose Material มีลักษณะการทํางานเหมือนกับคอมโพเนนต์ Material Design และทําให้มีลักษณะการทํางานที่สอดคล้องกันหากคุณใช้ทั้ง View และ Compose การเปลี่ยนแปลงนี้ยังช่วยให้มั่นใจได้ว่าเมื่อคุณสร้าง UI โดยใช้คอมโพเนนต์ Material ของ Compose ระบบจะปฏิบัติตามข้อกำหนดขั้นต่ำสำหรับการช่วยเหลือพิเศษของเป้าหมายการสัมผัส - การรองรับ Navigation Rail อย่างเสถียร
- เปลี่ยน API ที่เคยอยู่ในระยะทดลองจำนวนหนึ่งให้เป็น API ที่เสถียร
- การรองรับ Kotlin เวอร์ชันใหม่กว่า
เวอร์ชัน 1.1.0-rc03
26 มกราคม 2022
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-rc03 เวอร์ชัน 1.1.0-rc03 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- อัปเดตเพื่อรองรับ Compose Material
1.1.0-rc03
เวอร์ชัน 1.1.0-rc01
15 ธันวาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-rc01 เวอร์ชัน 1.1.0-rc01 มีคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-beta04
1 ธันวาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-beta04 เวอร์ชัน 1.1.0-beta04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- อัปเดตให้เข้ากันได้กับ Kotlin
1.6.0
เวอร์ชัน 1.1.0-beta03
17 พฤศจิกายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-beta03 เวอร์ชัน 1.1.0-beta03 มีคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-beta02
3 พฤศจิกายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-beta02 เวอร์ชัน 1.1.0-beta02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เราได้แยกโค้ดสแนปชอตออกเป็นหลายไฟล์ แต่ทั้งหมดก็ยังคง อยู่ในคลาส JVM เดียวกัน (Ic6c98)
เวอร์ชัน 1.1.0-beta01
27 ตุลาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-beta01 เวอร์ชัน 1.1.0-beta01 มีคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-alpha06
13 ตุลาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-alpha06 เวอร์ชัน 1.1.0-alpha06 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- นำ
InternalCompilerApiออกจากเมธอด Composer ที่ ต้องเรียกใช้ข้ามโมดูล (I1aa0b) Recomposer.stateถูกเลิกใช้งานและแทนที่ด้วยRecomposer.currentStateเพื่อเปลี่ยนประเภทเป็น StateFlow (Ic2ab3, b/197773820)
เวอร์ชัน 1.1.0-alpha05
29 กันยายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-alpha05 เวอร์ชัน 1.1.0-alpha05 มีคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-alpha04
15 กันยายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-alpha04 เวอร์ชัน 1.1.0-alpha04 มีคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-alpha03
1 กันยายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-alpha03 เวอร์ชัน 1.1.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Compose Compiler รองรับ Compose Runtime เวอร์ชันเก่า (1.0) แล้ว ก่อนการเปลี่ยนแปลงนี้ ตัวคอมไพเลอร์ Compose จะใช้ได้กับรันไทม์ Compose เวอร์ชันเดียวกันหรือเวอร์ชันที่ใหม่กว่าเท่านั้น หลังจากทำการเปลี่ยนแปลงนี้แล้ว ตัวคอมไพเลอร์ Compose จะใช้งานร่วมกับ Compose Runtime เวอร์ชันเก่า (1.0) ได้ (aosp/1796968)
- อัปเดต Compose
1.1.0-alpha03ให้ขึ้นอยู่กับ Kotlin1.5.30(I74545)
เวอร์ชัน 1.1.0-alpha02
18 สิงหาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-alpha02 เวอร์ชัน 1.1.0-alpha02 มีคอมมิตเหล่านี้
เวอร์ชัน 1.1.0-alpha01
4 สิงหาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.1.0-alpha01 เวอร์ชัน 1.1.0-alpha01 มีคอมมิตเหล่านี้
รุ่น 1.0
เวอร์ชัน 1.0.5
3 พฤศจิกายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.5 เวอร์ชัน 1.0.5 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องในการติดตาม derivedStateOf ของอินสแตนซ์ (aosp/1792247)
เวอร์ชัน 1.0.4
13 ตุลาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.4 เวอร์ชัน 1.0.4 มีคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- อัปเดตให้ขึ้นอยู่กับ Kotlin
1.5.31
เวอร์ชัน 1.0.3
29 กันยายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.3 เวอร์ชัน 1.0.3 มีคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- อัปเดตให้ขึ้นอยู่กับ Kotlin
1.5.30
เวอร์ชัน 1.0.2
1 กันยายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.2 เวอร์ชัน 1.0.2 มีคอมมิตเหล่านี้
อัปเดตเพื่อรองรับการเปิดตัว Compose 1.0.2 Compose 1.0.2 ยังคงใช้ได้กับ Kotlin 1.5.21
เวอร์ชัน 1.0.1
4 สิงหาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.1 เวอร์ชัน 1.0.1 มีคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- อัปเดตให้ขึ้นอยู่กับ Kotlin
1.5.21
เวอร์ชัน 1.0.0
28 กรกฎาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0 เวอร์ชัน 1.0.0 มีคอมมิตเหล่านี้
ฟีเจอร์หลักของเวอร์ชัน 1.0.0
นี่คือ Compose เวอร์ชันเสถียรเวอร์ชันแรก โปรดดูรายละเอียดเพิ่มเติมในบล็อกการเปิดตัว Compose อย่างเป็นทางการ
ปัญหาที่ทราบ
หากคุณใช้ Android Studio Bumblebee Canary 4 หรือ AGP
7.1.0-alpha04/7.1.0-alpha05คุณอาจพบข้อขัดข้องต่อไปนี้java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"หากต้องการแก้ไข ให้เพิ่ม minSdkVersion เป็น 24 ขึ้นไปชั่วคราวในไฟล์
build.gradleปัญหานี้จะได้รับการแก้ไขใน Android Studio Bumblebee และ AGP7.1เวอร์ชันถัดไป (b/194289155)
เวอร์ชัน 1.0.0-rc02
14 กรกฎาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-rc02 เวอร์ชัน 1.0.0-rc02 มีคอมมิตเหล่านี้
- แก้ไข Race Condition ใน SnapshotStateObserver ที่ทำให้เกิด NullPointerException ที่ไม่สม่ำเสมอ (aosp/1763445, aosp/1758105, b/192677711)
- แก้ไขปัญหาเกี่ยวกับสแนปชอตของรันไทม์ที่ทำให้
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)
เวอร์ชัน 1.0.0-rc01
1 กรกฎาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-rc01 เวอร์ชัน 1.0.0-rc01 มีคอมมิตต่อไปนี้
เวอร์ชัน 1.0.0-beta09
16 มิถุนายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-beta09 เวอร์ชัน 1.0.0-beta09 มีคอมมิตเหล่านี้
เพิ่มกฎโปรไฟล์
รุ่นนี้เพิ่มกฎของโปรไฟล์ลงในโมดูลการเขียนต่อไปนี้ (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
กฎของโปรไฟล์คืออะไร
กฎโปรไฟล์สำหรับไลบรารีจะระบุไว้ในไฟล์ข้อความ
baseline-prof.txtซึ่งอยู่ในไดเรกทอรีsrc/mainหรือไดเรกทอรีที่เทียบเท่า ไฟล์จะระบุกฎต่อบรรทัด โดยในกรณีนี้กฎคือรูปแบบสำหรับการจับคู่กับเมธอดหรือคลาสในไลบรารี ไวยากรณ์ของกฎเหล่านี้เป็นซูเปอร์เซ็ตของรูปแบบโปรไฟล์ ART ที่มนุษย์อ่านได้ ซึ่งใช้เมื่อใช้adb shell profman --dump-classes-and-methods ...กฎเหล่านี้มี 2 รูปแบบเพื่อกำหนดเป้าหมายไปยังเมธอดหรือคลาสกฎของเมธอดจะมีรูปแบบดังนี้
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>และกฎของชั้นเรียนจะมีรูปแบบดังนี้
<CLASS_DESCRIPTOR>โดย
<FLAGS>คืออักขระH,SและPอย่างน้อย 1 ตัวเพื่อระบุว่าควรติดแฟล็กวิธีนี้เป็น "มาแรง" "สตาร์ทอัป" หรือ "หลังสตาร์ทอัป" หรือไม่<CLASS_DESCRIPTOR>คือตัวอธิบายสำหรับคลาสที่เมธอดเป้าหมายเป็นของ เช่น คลาสandroidx.compose.runtime.SlotTableจะมีตัวอธิบายเป็นLandroidx/compose/runtime/SlotTable;<METHOD_SIGNATURE>คือลายเซ็นของเมธอด ซึ่งรวมถึงชื่อ ประเภทพารามิเตอร์ และประเภทการคืนค่าของเมธอด เช่น เมธอดfun isPlaced(): BooleanในLayoutNodeมีลายเซ็นisPlaced()Zรูปแบบเหล่านี้มีไวลด์การ์ด (
**,*และ?) ได้เพื่อให้กฎเดียวครอบคลุมหลายวิธีหรือหลายคลาส
กฎมีหน้าที่อะไร
เมธอดที่มีแฟล็ก
Hแสดงว่าเมธอดนี้เป็นเมธอด "ยอดนิยม" และควรคอมไพล์ล่วงหน้าเมธอดที่มีแฟล็ก
Sแสดงว่าเป็นเมธอดที่เรียกใช้เมื่อเริ่มต้น และควรคอมไพล์ล่วงหน้าเพื่อหลีกเลี่ยงค่าใช้จ่ายในการคอมไพล์และตีความเมธอดเมื่อเริ่มต้นเมธอดที่มีแฟล็ก
Pแสดงว่าเป็นเมธอดที่เรียกใช้หลังจากเริ่มต้นคลาสที่มีอยู่ในไฟล์นี้บ่งบอกว่ามีการใช้คลาสในระหว่างการเริ่มต้นระบบ และควรจัดสรรล่วงหน้าในฮีปเพื่อหลีกเลี่ยงค่าใช้จ่ายในการโหลดคลาส
ระบบนี้ทำงานอย่างไร
- ไลบรารีสามารถกำหนดกฎเหล่านี้ซึ่งจะรวมอยู่ในอาร์ติแฟกต์ AAR เมื่อสร้างแอปที่มีอาร์ติแฟกต์เหล่านี้ ระบบจะผสานรวมกฎเหล่านี้เข้าด้วยกันและใช้กฎที่ผสานรวมเพื่อสร้างโปรไฟล์ ART แบบไบนารีขนาดกะทัดรัดที่เฉพาะเจาะจงสำหรับแอปนั้นๆ จากนั้น ART จะใช้ประโยชน์จากโปรไฟล์นี้เมื่อติดตั้งแอปในอุปกรณ์เพื่อคอมไพล์ล่วงหน้าซึ่งเป็นชุดย่อยที่เฉพาะเจาะจงของแอปพลิเคชันเพื่อปรับปรุงประสิทธิภาพของแอปพลิเคชัน โดยเฉพาะการเรียกใช้ครั้งแรก โปรดทราบว่าการดำเนินการนี้จะไม่มีผลกับแอปพลิเคชันที่แก้ไขข้อบกพร่องได้
เวอร์ชัน 1.0.0-beta08
2 มิถุนายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-beta08 เวอร์ชัน 1.0.0-beta08 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
State<T>เปลี่ยนชื่อเป็นState<out T>แล้ว (I69049)ControlledCompositionการเปลี่ยนแปลง API เพื่อเปิดใช้การสร้างใหม่ การเปลี่ยนแปลงในการสร้างใหม่แบบครั้งเดียว (Iaafd1, b/184173932)
เวอร์ชัน 1.0.0-beta07
18 พฤษภาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-beta07 เวอร์ชัน 1.0.0-beta07 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม API คอมไพเลอร์ Compose ใหม่ที่อนุญาตให้ นำข้อมูลแหล่งที่มาซึ่งคอมไพเลอร์สร้างขึ้น ออกได้ในระหว่างการลดขนาดแหล่งที่มา (Ia34e6)
เปิดตัว
ReusableContentซึ่งจะพยายามนำโหนดในเนื้อหามาใช้ซ้ำแทนที่จะแทนที่เมื่อมีการเปลี่ยนคีย์ เมื่อมีการเปลี่ยนแปลงคีย์ ระบบจะไม่สนใจค่าก่อนหน้าในตารางช่องของเนื้อหา ยกเว้นโหนดที่สร้างขึ้นและค่าที่ใช้ในการอัปเดตโหนดเปิดตัว
ReusableComposeNodeที่จะนำโหนด ที่ปล่อยออกมากลับมาใช้ซ้ำแทนที่จะแทนที่ตามที่ทำสำหรับComposeNode(I1dd86)@ComposeCompilerApiไม่@RequiresOptInอีกต่อไป (Iab690)
การแก้ไขข้อบกพร่อง
- ตอนนี้ LazyColumn/Row จะเก็บรายการที่มองเห็นก่อนหน้านี้ไว้สูงสุด 2 รายการให้ทำงานอยู่ (ไม่ได้ทิ้ง) แม้ว่าจะเลื่อนออกไปแล้วก็ตาม ซึ่งจะช่วยให้คอมโพเนนต์นำองค์ประกอบย่อยที่ใช้งานอยู่กลับมาใช้ซ้ำได้เมื่อเราต้องสร้างรายการใหม่ ซึ่งจะช่วยปรับปรุงประสิทธิภาพการเลื่อน (Ie5555)
เวอร์ชัน 1.0.0-beta06
5 พฤษภาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-beta06 เวอร์ชัน 1.0.0-beta06 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
@ComposeCompilerApiไม่@RequiresOptInอีกต่อไป (Iab690)
เวอร์ชัน 1.0.0-beta05
21 เมษายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-beta05 เวอร์ชัน 1.0.0-beta05 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- นำ
@InternalComposeApiออกสำหรับการอ่านและเขียนสแนปชอตที่บันทึกไว้ (Id134d)
การแก้ไขข้อบกพร่อง
- ตอนนี้ไฟล์ AndroidManifest จาก ui-test-manifest และ ui-tooling-data เข้ากันได้กับ Android 12 แล้ว (I6f9de, b/184718994)
เวอร์ชัน 1.0.0-beta04
7 เมษายน 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-beta04 เวอร์ชัน 1.0.0-beta04 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
ก่อนการเปลี่ยนแปลงนี้ ฟังก์ชันที่ใช้ร่วมกันได้ในเครื่องจะข้ามได้ตามพารามิเตอร์ หลังจากการเปลี่ยนแปลงนี้ ฟังก์ชันที่ใช้ร่วมกันได้ในเครื่องจะไม่ข้าม การเปลี่ยนแปลงนี้เกิดขึ้นเนื่องจากฟังก์ชันในเครื่องมักจะดึงพารามิเตอร์จากฟังก์ชันระดับบน และการข้ามพารามิเตอร์ดังกล่าวเป็นแหล่งที่มาของข้อบกพร่องที่พบบ่อย
โดยสรุป ให้พิจารณาตัวอย่างต่อไปนี้
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }ก่อนการเปลี่ยนแปลงนี้
ShowCountฟังก์ชันที่ประกอบกันได้จะข้ามเสมอ แม้หลังจากอัปเดตพารามิเตอร์countแล้วก็ตาม แต่เหตุการณ์ดังกล่าวจะไม่เกิดขึ้นแล้ว (I5648a)แก้ไขปัญหาเมื่อ
rememberSaveable()กู้คืนค่าเก่าเมื่อใช้กับพารามิเตอร์อินพุต (I1b110, b/182403380)
เวอร์ชัน 1.0.0-beta03
24 มีนาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-beta03 เวอร์ชัน 1.0.0-beta03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
DefaultMonotonicFrameClockเลิกใช้งานแล้ว การเรียกใช้withFrameNanosหรือRecomposer.runRecomposeAndApplyChangesที่ไม่มีMonotonicFrameClockจะทำให้เกิดIllegalStateException(I4eb0d)
เวอร์ชัน 1.0.0-beta02
10 มีนาคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-beta02 เวอร์ชัน 1.0.0-beta02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- บังคับใช้ข้อจำกัดในการใช้งาน API เวอร์ชันทดลองแบบสาธารณะ (I6aa29, b/174531520)
- แก้ไขปัญหา
rememberSaveable { mutableStateOf(0) }ที่ใช้งานไม่ได้เมื่อใช้ภายในปลายทางของ Navigation Compose (I1312b, b/180042685, b/180701630)
เวอร์ชัน 1.0.0-beta01
24 กุมภาพันธ์ 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-beta01 เวอร์ชัน 1.0.0-beta01 มีคอมมิตเหล่านี้
นี่คือรุ่นแรกของ Compose 1.0.0 Beta
การเปลี่ยนแปลง API
- เพิ่ม
Recomposer.runRecomposeConcurrentlyAndApplyChangesAPI ทดลองสําหรับการสร้างองค์ประกอบที่ใช้ไม่ได้ใหม่นอกลูปเฟรมหลัก (I342d0) - ตอนนี้ระบบจะตรวจสอบ Composable ที่ทำเครื่องหมายด้วย @ReadOnlyComposable ในเวลาคอมไพล์เพื่อให้แน่ใจว่า Composable เหล่านั้นจะเรียกใช้เฉพาะ @ReadOnlyComposable อื่นๆ เท่านั้น (I58961)
ตอนนี้คุณต้องระบุ
defaultFactoryสำหรับcompositionLocalOfและstaticCompositionLocalOfแทนที่จะระบุหรือไม่ระบุก็ได้การเปลี่ยนแปลงนี้จะนำข้อผิดพลาดเกี่ยวกับประเภทที่อาจเกิดขึ้นสำหรับประเภทที่ไม่ใช่ Null ออก ในกรณีที่ไม่ได้ระบุโรงงานเริ่มต้น ก่อนหน้านี้ จะให้การอ้างอิงเป็น Null สำหรับประเภทที่กำหนดให้ต้องมีค่า
สำหรับประเภทที่กำหนดให้เป็น Null ได้ ให้พิจารณาใส่
{ null }เป็นค่าเริ่มต้น factoryเราไม่แนะนำให้ใช้ locales กับประเภทที่กำหนดให้ต้องมีค่า เว้นแต่จะระบุค่าเริ่มต้นที่เหมาะสมได้ หากไม่มีค่าเริ่มต้นที่เหมาะสม Lambda
defaultFactoryควรส่งข้อยกเว้น อย่างไรก็ตาม การส่งข้อยกเว้นหมายความว่าผู้ใช้ภาษาจะมี การอ้างอิงโดยนัยถึงการระบุภาษาดังกล่าว ซึ่งระบบประเภทไม่ได้บังคับ (Ifbd2a)นำสัญลักษณ์ที่เลิกใช้งานแล้วออกจากรันไทม์การเขียน (I3252c)
นำ
emptyContent()ที่เลิกใช้งานแล้วออก โปรดใช้{}แทน (Idb33f, b/179432510)เปลี่ยนชื่อ Providers เป็น CompositionLocalProvider แล้ว
- ตัวสร้าง Composition ไม่รับพารามิเตอร์คีย์อีกต่อไปและเลิกใช้งานแล้ว
- currentCompositeKeyHash ได้เปลี่ยนเป็นพร็อพเพอร์ตี้ระดับบนสุดที่ประกอบกันได้แทนที่จะเป็นฟังก์ชันระดับบนสุดที่ประกอบกันได้
- ย้าย CompositionData และ CompositionGroup ไปยังเนมสเปซ androidx.compose.runtime.tooling แล้ว
- เราได้เปลี่ยน ComposableLambda ให้เป็นอินเทอร์เฟซแทนที่จะเป็นคลาสที่เฉพาะเจาะจง และไม่มีพารามิเตอร์ประเภทอีกต่อไป
- เราได้เปลี่ยน ComposableLambdaN ให้เป็นอินเทอร์เฟซแทนที่จะเป็นคลาสที่เฉพาะเจาะจง และไม่มีพารามิเตอร์ประเภทอีกต่อไป
- ฟังก์ชัน snapshotFlow ย้ายไปที่เนมสเปซ androidx.compose.runtime แล้ว
- วิธีการผสานของ SnapshotMutationPolicy ไม่ใช่เวอร์ชันทดลองอีกต่อไป
- ระบบได้นำฟังก์ชัน clearRoots ระดับบนสุด @TestOnly ออกแล้ว ไม่จำเป็นต้องดำเนินการอีกต่อไป
- ระบบได้นำฟังก์ชัน keySourceInfoOf และ resetSourceInfo ออกแล้ว จึงไม่จำเป็นต้องใช้แล้ว
- มีการนำ Composer.collectKeySourceInformation ออกแล้ว ไม่จำเป็นต้องดำเนินการอีกต่อไป
- นำเมธอด isJoinedKey, joinedKeyLeft และ joinedKeyRight ออกแล้ว จึงไม่จำเป็นต้องใช้แล้ว
- เราได้ย้ายและจัดระเบียบ API ระดับบนสุดต่างๆ ไปยังไฟล์อื่น เนื่องจากความหมายของคลาสไฟล์ของ Kotlin การดำเนินการนี้จะทำให้ความเข้ากันได้แบบไบนารีใช้งานไม่ได้ แต่ความเข้ากันได้ของแหล่งที่มาจะยังคงใช้งานได้ ดังนั้นจึงไม่น่าจะเป็นปัญหาสำหรับผู้ใช้ส่วนใหญ่
- (I99b7d, b/177245490)
SnapshotStateObserver ไม่ใช่เวอร์ชันทดลองอีกต่อไป (Id2e6a)
ลบ API บางรายการที่เลิกใช้งานไปก่อนหน้านี้ (Ice5da, b/178633932)
ทำการเปลี่ยนแปลง Material API ดังนี้
- เพิ่มพารามิเตอร์ contentPadding ลงใน Top/BottomAppBar เพื่อให้ปรับแต่งระยะเว้นเริ่มต้นได้
- จัดเรียงพารามิเตอร์ใหม่ใน BackdropScaffold เพื่อให้เป็นไปตามหลักเกณฑ์ของ API สำหรับพารามิเตอร์ที่จำเป็นซึ่งอยู่ก่อนพารามิเตอร์ที่ไม่บังคับ
- ย้ายพารามิเตอร์
iconใน BottomNavigationItem ไปไว้หลังselectedและonClick - เปลี่ยนชื่อพารามิเตอร์
alwaysShowLabelsใน BottomNavigationItem เป็นalwaysShowLabel - เปลี่ยนชื่อพารามิเตอร์
bodyContentในคอมโพเนนต์บางรายการเป็นcontent - พารามิเตอร์ที่จัดเรียงใหม่ใน
ButtonDefaults.buttonColors()โปรดทราบว่าเนื่องจากประเภทของพารามิเตอร์ไม่ได้เปลี่ยนแปลง การดำเนินการนี้จึงไม่ทำให้เกิดข้อผิดพลาดในโค้ด โปรดตรวจสอบว่าคุณใช้พารามิเตอร์ที่มีชื่อหรืออัปเดตลำดับด้วยตนเอง มิฉะนั้นโค้ดจะทำงานไม่เหมือนเดิม - เพิ่มพารามิเตอร์
secondaryVariantไปยังdarkColors()แล้ว โดยปกติแล้ว สีนี้จะเหมือนกับsecondaryในธีมมืด แต่เราได้เพิ่มสีนี้เพื่อให้มีความสอดคล้องกันและปรับแต่งเพิ่มเติมได้ - นำ ElevationDefaults และ animateElevation() ออกจาก API สาธารณะเนื่องจากไม่ได้ใช้กันทั่วไปและไม่มีประโยชน์
- เปลี่ยนชื่อ
onValueChangeEndในSliderเป็นonValueChangeFinishedและทำให้เป็นค่า Null ได้ - เปลี่ยนชื่อพารามิเตอร์
textในSnackbarเป็นcontentเพื่อให้สอดคล้องกัน - เพิ่มพารามิเตอร์
contentPaddingลงในDropdownMenuItemเพื่ออนุญาตให้ปรับแต่งระยะเว้นเริ่มต้น และทำให้contentเป็นส่วนขยายในRowScope - เปลี่ยนชื่อ
ModalDrawerLayoutเป็นModalDrawerแล้ว - เปลี่ยนชื่อ
BottomDrawerLayoutเป็นBottomDrawerแล้ว - (I1cc66)
เวอร์ชัน 1.0.0-alpha12
10 กุมภาพันธ์ 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha12 เวอร์ชัน 1.0.0-alpha12 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- นำการรองรับ ViewGroup ออกจาก UiApplier แล้ว นำ Composable ของ emitView ที่เลิกใช้งานแล้วออก (Ifb214)
- เปลี่ยนชื่อ CompositionReference เป็น CompositionContext (I53fcb)
- ComponentActivity.setContent ได้ย้ายไปอยู่ที่ androidx.activity.compose.setContent ในโมดูล androidx.activity:activity-compose แล้ว (Icf416)
- เราได้อัปเดต Snapshot API ให้สอดคล้องกับ หลักเกณฑ์ของ API มากขึ้น รวมถึงซ่อนคลาสการติดตั้งใช้งานภายใน จาก API สาธารณะ (Id9e32)
- เปลี่ยนชื่อ Ambients ให้ตรงกับการเปลี่ยนชื่อ Ambient -> CompositionLocal เดิมชื่อของ Ambients คือ AmbientFoo แต่ตอนนี้ CompositionLocals เปลี่ยนชื่อเป็น LocalFoo แล้ว (I2d55d)
- เปลี่ยนชื่อ Ambient เป็น CompositionLocal และ ambientOf / staticAmbientOf เป็น compositionLocalOf / staticCompositionLocalOf ตามลำดับ การเปลี่ยนแปลงนี้ช่วยให้วัตถุประสงค์ของ CompositionLocal ชัดเจนยิ่งขึ้น นั่นคือ กลไกในการระบุ / ดึงค่าที่เฉพาะเจาะจงกับองค์ประกอบ อินสแตนซ์ CompositionLocal ควรมีคำนำหน้าเป็น
Localเช่น val LocalFoo = compositionLocalOf { Foo() } (Ia55b6) - takeMutableSnapshot และ takeSnapshot ได้ ย้ายไปเป็นเมธอดคู่ของ Snapshot แล้ว (I91f19)
@ComposableContractถูกเลิกใช้งานแล้วเพื่อแทนที่ด้วยคำอธิบายประกอบที่เฉพาะเจาะจงมากขึ้น 3 รายการ@ComposableContract(restartable = false)ได้เป็นรายชื่อติดต่อที่เชื่อถือได้ของ@NonRestartableComposableแล้ว@ComposableContract(readonly = true)ได้เป็นรายชื่อติดต่อที่เชื่อถือได้ของ@ReadOnlyComposableแล้ว@ComposableContract(preventCapture = true)ได้เป็นรายชื่อติดต่อที่เชื่อถือได้ของ@DisallowComposableCallsแล้ว ระบบนำ@ComposableContract(tracked = true)ออกแล้ว (I60a9d)เราเลิกใช้งานฟังก์ชันยูทิลิตี emptyContent() และ (@Composable () -> Unit).orEmpty() แล้ว เนื่องจากไม่มีผลต่อประสิทธิภาพหรือคุณค่าในเชิงบวกอีกต่อไป (I0484d)
snapshotFlowและwithMutableSnapshotไม่ใช่ฟีเจอร์ ทดลองอีกต่อไป (I6a45f)ตอนนี้คุณปิด Recomposers ได้แล้ว Recomposer ที่ปิดอยู่จะ ทำการ Recompose ต่อไปจนกว่าโคโรทีนย่อยของการ Composition จะเสร็จสมบูรณ์ เปลี่ยนชื่อ Recomposer.shutDown เป็น cancel เพื่อให้แตกต่างจาก close (Ib6d76)
ตอนนี้เราเลิกใช้งานอาร์ติแฟกต์
compose:runtime-dispatchแล้ว ตอนนี้คุณจะพบ MonotonicFrameClock ใน compose:runtime และ AndroidUiDispatcher ใน compose:ui (Ib5c36)เราได้ปรับโครงสร้าง API ที่ปลั๊กอินคอมไพเลอร์ Compose กำหนดเป้าหมาย เพื่อใช้อินเทอร์เฟซแทน คลาสที่เฉพาะเจาะจง นอกจากนี้ อินเทอร์เฟซยังไม่ใช้พารามิเตอร์ประเภทอีกต่อไป
การเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงภายในซึ่งไม่ควรส่งผลต่อความเข้ากันได้ของซอร์สโค้ด แต่เป็นการเปลี่ยนแปลงแบบไบนารีที่ทำให้เกิดการหยุดทำงาน (I3b922, b/169406779)
มีการเปิดตัว SnapshotMutableState (Icfd03)
เปลี่ยนชื่อ DisposableEffectDisposable เป็น DisposaleEffectResult (Ica7c6)
นำ Recomposer.current() ออกแล้ว [Abstract]ตอนนี้ ComposeView จะใช้ Recomposer ที่สร้างขึ้นแบบเลื่อนเวลาและมีขอบเขตระดับหน้าต่างโดยค่าเริ่มต้น ซึ่งขับเคลื่อนโดย ViewTreeLifecycleOwner สำหรับหน้าต่าง ระบบจะหยุดการสร้างใหม่และเครื่องหมายภาพเคลื่อนไหวตาม withFrameNanos ชั่วคราวขณะที่หยุดวงจรของโฮสต์ (I38e11)
Recomposer.runningRecomposers มี StateFlow ทั่วโลกของ RecomposerInfo แบบอ่านอย่างเดียวสําหรับการสังเกตสถานะการจัดองค์ประกอบที่กําลังดําเนินอยู่ใน กระบวนการ ควรใช้ API นี้แทน Recomposer.current() ซึ่งตอนนี้เลิกใช้งานแล้ว (If8ebe)
เปลี่ยนชื่อ DisposableEffectDisposable เป็น DisposaleEffectResult (I3ea68)
เวอร์ชัน 1.0.0-alpha11
28 มกราคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha11 เวอร์ชัน 1.0.0-alpha11 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- onCommit, onDispose และ onActive ถูกเลิกใช้งานแล้วเพื่อรองรับ SideEffect และ DisposableEffect API (If760e)
- เราเลิกใช้งาน API emit() และการโอเวอร์โหลดทั้งหมดแล้ว และเปลี่ยนชื่อเป็น ComposeNode API เหมือนกันทุกประการ เพียงแต่ใช้ชื่อต่างกันเพื่อให้เป็นไปตามรูปแบบการตั้งชื่อของ Compose (I4137b)
- ตอนนี้เราเลิกใช้งาน invalidate และ compositionReference() แล้ว และแนะนำให้ใช้ currentRecomposeScope และ rememberCompositionReference แทนตามลำดับ (I583a8)
โปรดทราบว่า RememberObserver จะแทนที่ CompositionLifecycleObserver และตอนนี้ CompositionLifecycleObserver เลิกใช้งานแล้ว
RememberObserverเป็นการแทนที่CompositionLifecycleObserverโดยมีการแก้ไขความหมายและ เปลี่ยนชื่อเมธอด การเปลี่ยนไปใช้ API ใหม่สามารถทำได้โดยอัตโนมัติ สำหรับออบเจ็กต์ที่ระบบจดจำเพียงครั้งเดียว ซึ่งเป็นแนวทางที่แนะนำและยังคงเป็นแนวทางที่แนะนำ ต่อไป อย่างไรก็ตาม หากมีการจดจำการอ้างอิงมากกว่า 1 ครั้งในองค์ประกอบonRememberedจะเรียกใช้ สำหรับการอ้างอิงแต่ละรายการโดยที่onEnterจะเรียกใช้เพียงครั้งเดียวonEnterถูกเรียกใช้หลายครั้งหากใช้ออบเจ็กต์ในองค์ประกอบย่อย เช่นWithConstraintsและScaffoldทำให้การเรียกใช้onEnterครั้งเดียวไม่น่าเชื่อถือและถูกนำออกสำหรับRememberObserverRememberObserverเพิ่มonAbandonedซึ่งจะเรียกใช้หากมีการส่งคืนอินสแตนซ์RememberObserverจากการเรียกกลับที่ส่งไปยังrememberแต่ไม่ได้จดจำไว้ในสถานะการเรียบเรียง และด้วยเหตุนี้ จึงจะไม่มีการเรียกใช้onRememberedปัญหานี้อาจเกิดขึ้นหากข้อยกเว้นสิ้นสุดการคอมโพสก่อนที่จะเสร็จสมบูรณ์ หรือระบบทิ้งการคอมโพสเนื่องจากสถานะที่ใช้สร้างการคอมโพสไม่เป็นปัจจุบันอีกต่อไป หรือไม่จำเป็นอีกต่อไป หากอินสแตนซ์ของRememberObserverที่ตามคำแนะนำการอ้างอิงเดียวด้านบนติดตามแหล่งข้อมูลภายนอก ทั้งonForgottenและonAbandonedจะระบุว่า ไม่จำเป็นต้องใช้แหล่งข้อมูลอีกต่อไป หากออบเจ็กต์ติดตามงานที่เริ่มหรือทรัพยากรที่จัดสรรในonRememberedคุณสามารถละเว้นonAbandonedได้เนื่องจากระบบจะไม่เรียกใช้หากเรียกใช้onRemembered(I02c36)อย่าทำเครื่องหมายฟังก์ชัน
collectAsState()เป็นแบบอินไลน์ (Ia73e4)
การแก้ไขข้อบกพร่อง
- เราได้ปรับปรุง WithConstraints เป็น BoxWithConstraints และย้ายไปที่ foundation.layout (I9420b, b/173387208)
- ใช้ประโยชน์จาก TestCoroutineDispatcher ในการทดสอบ (I532b6)
เวอร์ชัน 1.0.0-alpha10
13 มกราคม 2021
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha10 เวอร์ชัน 1.0.0-alpha10 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
การปรับโครงสร้าง API ของคอมไพเลอร์ภายใน ช่วยให้สามารถจัดกลุ่มการเปลี่ยนแปลงไปยังโหนดที่สร้างขึ้น อันเป็นผลมาจากการคอมโพสิตเป็นเฟส "ใช้การเปลี่ยนแปลง" ของการคอมโพสิตได้หลังจากที่ฟังก์ชัน
@Composableทั้งหมด เสร็จสมบูรณ์แล้วนี่เป็นการเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้องด้านลักษณะการทำงาน ซึ่งอาจส่งผลต่อโค้ดแอปพลิเคชันเนื่องจากโหนดจะไม่พร้อมใช้งานจาก API ภายในและ API ทดลองจนกว่าจะมีการใช้การเปลี่ยนแปลง โดยปกติแล้ว คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดย ล้อมรอบโค้ดที่มีการอ้างอิงดังกล่าวใน
SideEffectComposable เพื่อเลื่อนการเรียกใช้ โค้ดจนกว่าจะสร้างและ เริ่มต้นโหนดแล้ว (I018da)
การเปลี่ยนแปลง API
- เพิ่มวิธีติดตามว่า เครื่องมือจัดองค์ประกอบใหม่ได้ใช้การเปลี่ยนแปลงหรือไม่ (I1b3e2)
ขยาย [Abstract]ComposeView APIs เพื่ออนุญาตการรีไซเคิล มุมมองที่อิงตาม Compose โดยทิ้งการจัดองค์ประกอบเพื่อสร้างใหม่ ในภายหลัง เพิ่ม API สำหรับการติดตั้งและค้นหา Recomposer ที่มีขอบเขตระดับหน้าต่าง และ CompositionReference สำหรับการสร้างองค์ประกอบย่อย
เพิ่ม ViewCompositionStrategy เพื่อกำหนดค่ากลยุทธ์การทิ้งองค์ประกอบของ [Abstract]ComposeViews ลักษณะการทำงานเริ่มต้นคือการทิ้งเมื่อหน้าต่างถูกยกเลิกการเชื่อมต่อ (I860ab)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Recomposer จะแสดง Flow ของสถานะปัจจุบัน ซึ่งช่วยให้ตรวจสอบกิจกรรมของ Recomposer และกิจกรรมของเอฟเฟกต์ที่เชื่อมโยงได้ (Ifb2b9)
- ตอนนี้คุณเข้าถึง keyEvent ดั้งเดิมได้แล้วผ่าน keyEvent.nativeKeyEvent (I87c57, b/173086397)
เวอร์ชัน 1.0.0-alpha09
16 ธันวาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha09 เวอร์ชัน 1.0.0-alpha09 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
นำ SlotTable, SlotReader และ SlotWriter ออกจาก API สาธารณะ ก่อนหน้านี้มีการทำเครื่องหมายว่า InternalComposeAPI ตอนนี้ฟีเจอร์ดังกล่าวอยู่ภายใน โมดูล Compose
เราได้เพิ่ม CompositionData และ CompositionGroup เพื่อใช้แทน API เครื่องมือ UI ในการดึงข้อมูลองค์ประกอบ API เหล่านี้เป็นแบบสาธารณะ แต่ไม่ได้มีไว้สำหรับใช้ภายนอก API เครื่องมือ UI เนื่องจากมีข้อมูลดิบที่ API เครื่องมือ UI ตีความ (I31a9c)
ระบบจะไม่ถือว่าคลาส Applier เป็น (Id85b0) อีกต่อไป
Applierอินเทอร์เฟซมีการเปลี่ยนแปลงเพื่อลดความซับซ้อน ในการสร้างแผนผังจากล่างขึ้นบนแทนที่จะเป็นจากบนลงล่างเปลี่ยนชื่อเมธอด
insert()เป็นinsertTopDown()แล้วเพิ่มวิธีการใหม่
insertBottomUp()แล้วแอปพลิเคชันจะแทรกโหนดลงในทรีที่กำลังแก้ไข โดยใช้
insertTopDown()หรือinsertBottomUp()ขึ้นอยู่กับ ว่าตัวใดทำงานได้ดีกว่าต้นไม้บางต้น เช่น
LayoutNodeและViewสร้างจากล่างขึ้นบนได้มีประสิทธิภาพมากกว่าจากบนลงล่าง ก่อนการเปลี่ยนแปลงนี้ ต้องมีสแต็กของแทรกเพื่อใช้การสร้างจากล่างขึ้นบน ซึ่ง ต้องคัดลอกไปยังทุกแอปพลิเคชันที่ต้องมีการสร้างจากล่างขึ้นบน เพื่อประสิทธิภาพ การเปลี่ยนแปลงนี้จะApplierลบล้างinsertBottomUp()เพื่อสร้างโครงสร้างแบบต้นไม้จากล่างขึ้นบน และinsertTopDown()เพื่อสร้างโครงสร้างแบบต้นไม้จากบนลงล่าง (Icbdc2)Compose รองรับตัวรับพร็อพเพอร์ตี้ที่สร้างการเรียกใช้ที่ใช้ร่วมกันได้ เราจะยังคงรองรับการดำเนินการนี้ต่อไป แต่ไวยากรณ์สำหรับการประกาศตัวรับค่าพร็อพเพอร์ตี้เป็น @Composable จะมีการเปลี่ยนแปลง
ไวยากรณ์ที่เลิกใช้งานแล้วในตอนนี้สำหรับการดำเนินการนี้คือการใส่คำอธิบายประกอบในพร็อพเพอร์ตี้เอง ดังนี้
@Composable val someProperty: Int get() = ...ไวยากรณ์ที่ถูกต้องในปัจจุบันสำหรับการดำเนินการนี้คือการใส่คำอธิบายประกอบให้กับตัวรับของพร็อพเพอร์ตี้
val someProperty: Int @Composable get() = ...ไวยากรณ์ทั้ง 2 แบบจะใช้งานได้สักระยะหนึ่ง แต่ในที่สุดไวยากรณ์แบบแรกที่เลิกใช้งานแล้วจะกลายเป็นข้อผิดพลาดในการคอมไพล์ (Id9197)
การแก้ไขข้อบกพร่อง
- AndroidOwner สร้างภายใน (Ibcad0, b/170296980)
- เปลี่ยนให้ subcomposeInto(LayoutNode) เป็นแบบภายใน (Id724a)
เวอร์ชัน 1.0.0-alpha08
2 ธันวาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha08 เวอร์ชัน 1.0.0-alpha08 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เพิ่มการตรวจสอบ Lint สำหรับการตั้งชื่อและการวางตำแหน่งพารามิเตอร์ Lambda ที่ใช้ร่วมกันได้ เพื่อตรวจสอบความสอดคล้องกับหลักเกณฑ์ของ Compose
นอกจากนี้ ยังย้ายข้อมูล API บางรายการโดยใช้
childrenเป็นชื่อสำหรับ Lambda ต่อท้ายเป็นcontentตามการตรวจสอบและคำแนะนำของ Lint (Iec48e) - Recomposer ไม่รับ EmbeddingContext อีกต่อไป ระบบจะรับการขึ้นต่อกันในการจัดกำหนดการที่จำเป็นจาก effectCoroutineContext เลิกใช้งาน FrameManager แล้ว การผสานรวมแพลตฟอร์มควรเริ่มต้น การจัดการสแนปชอตส่วนกลางของตนเอง (I02369)
- ฟังก์ชัน RestorableStateHolder.withRestorableState เปลี่ยนชื่อเป็น RestorableStateProvider (I66640)
การแก้ไขข้อบกพร่อง
- เลิกใช้งาน Ambients ที่เลิกใช้งานแล้วซึ่งมี
Ambientเป็นคำต่อท้าย และแทนที่ด้วยพร็อพเพอร์ตี้ใหม่ที่ขึ้นต้นด้วย Ambient ตามหลักเกณฑ์อื่นๆ ของ Ambient และ Compose API (I33440) - นำโมดูล ui-test เก่าและ Stub ออก (I3a7cb)
เวอร์ชัน 1.0.0-alpha07
11 พฤศจิกายน 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha07 เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
การเปลี่ยนแปลง API
- เราเลิกใช้งานคำอธิบายประกอบ
@UnionTypeแล้ว (I57cde) - เพิ่ม provideDefault เป็นทางเลือกแทน provide สำหรับการระบุแอมเบียนท์ และใช้เพื่อระบุค่าแอมเบียนท์ที่จะตั้งค่าก็ต่อเมื่อไม่มีค่าแอมเบียนท์ที่ระบุไว้แล้วเท่านั้น (Id6635, b/171024925)
- เราได้เปลี่ยนชื่อ LaunchedTask เป็น LaunchedEffect เพื่อให้สอดคล้องกับ SideEffect และ DisposableEffect API ไม่อนุญาตให้ใช้ LaunchedEffect โดยไม่มีพารามิเตอร์ เรื่องเพื่อส่งเสริมแนวทางปฏิบัติแนะนำ (Ifd3d4)
- ตอนนี้ Applier มีการเรียกกลับ onBeginChanges/onEndChanges ซึ่งจะเรียกใช้เมื่อ Composer เริ่ม/เสร็จสิ้นการใช้การเปลี่ยนแปลงกับทรี ซึ่งอาจใช้สำหรับการจัดการทรัพยากรแบบเป็นชุดได้หากจำเป็น (Icf476)
- ตอนนี้ Recomposer ต้องมี CoroutineContext ในการสร้าง (Ic4610)
- การเปลี่ยนแปลงการใช้งาน SlotTable ภายในซึ่ง ไม่ควรส่งผลต่อ API สาธารณะ (If9828)
- นำอะแดปเตอร์ rxjava2 ที่เลิกใช้งานแล้วซึ่งไม่ใช้ค่าเริ่มต้นออก (Idb72f)
การแก้ไขข้อบกพร่อง
- เลิกใช้งาน foundation.Text แล้วและแทนที่ด้วย material.Text ดู API ข้อความพื้นฐานที่ไม่แสดงความคิดเห็นซึ่งไม่ได้ใช้ค่าจากธีมได้ที่ androidx.compose.foundation.BasicText (If64cb)
- เลิกใช้งาน BaseTextField แล้ว โปรดใช้ BasicTextField แทน (I896eb)
- เราได้ย้ายสัญลักษณ์ที่เกี่ยวข้องกับเลย์เอาต์หลายรายการจาก androidx.compose.ui ไปยัง androidx.compose.layout.ui (I0fa98, b/170475424)
การมีส่วนร่วมภายนอก
- เพิ่มโมดูล
runtime-rxjava3สำหรับ Compose แล้ว คล้ายกับruntime-rxjava2(I02cbf)
เวอร์ชัน 1.0.0-alpha06
28 ตุลาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha06 เวอร์ชัน 1.0.0-alpha06 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Recomposer เป็น CompositionReference และเป็น องค์ประกอบหลักที่ถูกต้องแล้ว ตอนนี้คุณต้องใช้ Explicit Recomposer ในที่ต่างๆ น้อยลงแล้ว (I4036f)
- เพิ่ม API ที่เทียบเท่า DisposableEffect ลงใน SideEffect เพื่อทำหน้าที่
onCommit-with-params แต่ต้องมี onDispose
- เพิ่ม API rememberUpdatedState เพื่อเผยแพร่ข้อมูลจากการจัดองค์ประกอบใหม่ไปยังกระบวนการที่กำลังดำเนินอยู่หรือกระบวนการที่มีอายุการใช้งานยาวนาน เช่น DisposableEffect หรือ LaunchedTask
- (Id50b9)
- ตอนนี้ MutableVector รองรับ RandomAccess แล้ว (I85d73, b/170461551)
- เพิ่ม Composable SideEffect สำหรับใช้ผลข้างเคียงของ การคอมโพสกับออบเจ็กต์ที่จัดการโดยการคอมโพส SideEffect is intended to replace the onCommit composable. (Ia77c2)
- RestorableStateHolder API เวอร์ชันทดลองใหม่ ซึ่งจะช่วยให้บันทึกสถานะที่กำหนดด้วย [savedInstanceState] และ [rememberSavedInstanceState] สำหรับ Subtree ก่อนที่จะทิ้ง เพื่อให้สามารถเขียนกลับได้ในครั้งถัดไปด้วยสถานะที่กู้คืน (I66884, b/166586419)
การแก้ไขข้อบกพร่อง
- เปิดใช้การเปลี่ยนฉากใน ComposeTestRule และนำตัวเลือกในการ เปิดใช้เคอร์เซอร์กะพริบออกจาก ComposeTestRule (If0de3)
เวอร์ชัน 1.0.0-alpha05
14 ตุลาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha05 เวอร์ชัน 1.0.0-alpha05 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ตัวแก้ไขทดลอง Modifier.pointerInput ที่ระงับตัวแก้ไขอินพุต (Ia77d2)
- ประสิทธิภาพการเลื่อนของ LazyColumn/Row ได้รับการปรับปรุงโดยการทำงานในองค์ประกอบย่อยน้อยลงในการเลื่อนทุกครั้ง เราได้เพิ่มเมธอด hasInvalidations() ใหม่สำหรับคลาส Composition และเปลี่ยนชื่อเมธอด hasPendingChanges() จาก Recomposer เป็น hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371)
- เพิ่ม API produceState สำหรับการเปิดใช้โครูทีนจากการจัดองค์ประกอบ
ที่อัปเดตค่า
State<T>เดียวเมื่อเวลาผ่านไป (Id4a57) - เปลี่ยนชื่อ launchInComposition เป็น LaunchedTask เพื่อให้เป็นไปตามหลักเกณฑ์ของ Compose API (I99a8e)
- ตอนนี้ลำดับการเรียก place() ในเลย์เอาต์ที่กำหนดเองจะกำหนดลำดับการวาดสำหรับองค์ประกอบย่อย (Ibc9f6)
เวอร์ชัน 1.0.0-alpha04
1 ตุลาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha04 เวอร์ชัน 1.0.0-alpha04 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม OwnerScope เพื่ออนุญาตให้รวบรวม ขอบเขตการสังเกตเลย์เอาต์และการวาดเมื่อ ไม่ถูกต้องอีกต่อไป (Ic4cf8)
- เพิ่ม API derivedStateOf เพื่อสร้างออบเจ็กต์ State ตามการคำนวณที่อาจอ่าน (และได้มาจาก) ออบเจ็กต์ State อื่นๆ (If758b)
- เพิ่ม TestOnly API สำหรับ SnapshotStateObserver (I6e2a9)
การแก้ไขข้อบกพร่อง
- เลิกใช้งาน foundation.Box แล้ว โปรดใช้ foundation.layout.Box แทน (Ie5950, b/167680279)
เวอร์ชัน 1.0.0-alpha03
16 กันยายน 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha03 เวอร์ชัน 1.0.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
CompositionCoroutineScopeไม่ได้ใช้MonotonicFrameClockอีกต่อไป ผู้เรียกใช้withFrameNanosควรนำเข้าฟังก์ชันระดับบนสุด อย่างชัดเจน (Icb642, b/166778123)
การแก้ไขข้อบกพร่อง
- ตอนนี้ฟังก์ชันการทดสอบส่วนกลาง เช่น
onNodeหรือwaitForIdleเลิกใช้งานแล้ว โปรดย้ายข้อมูลไปยังฟังก์ชันใหม่ที่กำหนดไว้ใน ComposeTestRule (I7f45a) launchInCompositionจะไม่เปิดใช้ Coroutine ที่ไม่ได้ส่งอีกต่อไป (Ief6af, b/166486000)
เวอร์ชัน 1.0.0-alpha02
2 กันยายน 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha02 เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม API
snapshotFlowและwithMutableSnapshotสำหรับการใช้ และการสร้างการเปลี่ยนแปลงข้อมูลสแนปชอต (I3e722) รูปแบบการเรียกฟังก์ชันที่ประกอบกันได้มีการเปลี่ยนแปลง นี่เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบแบบไบนารี ต้อง คอมไพล์ไลบรารีทั้งหมดอีกครั้งเพื่อให้ทำงานร่วมกับปลั๊กอินคอมไพเลอร์ Compose เวอร์ชันนี้ได้
การเปลี่ยนแปลงนี้ไม่ได้สร้างการเปลี่ยนแปลงที่ทําให้เกิดข้อขัดข้องในระดับแหล่งที่มา เนื่องจากมีเพียง API ของคอมไพเลอร์เท่านั้นที่เปลี่ยนแปลงและต้องเลือกใช้โดยชัดแจ้ง (I7afd2, b/158123185)
นำวิธีการตั้งเวลาออกจาก EmbeddingContext (I7b9be)
เลิกใช้งาน onPreCommit แล้ว ตอนนี้ onCommit มีลักษณะการทำงานของ onPreCommit
ตอนนี้ onCommit และ onActive จะทํางานในเฟรม Choreographer เดียวกัน ซึ่งการเปลี่ยนแปลงองค์ประกอบจะได้รับการคอมมิตในเฟรมนั้นแทนที่จะเป็นที่จุดเริ่มต้นของเฟรม Choreographer ถัดไป (I70403)
เวอร์ชัน 1.0.0-alpha01
26 สิงหาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:1.0.0-alpha01 เวอร์ชัน 1.0.0-alpha01 มีคอมมิตต่อไปนี้
เวอร์ชัน 0.1.0-dev
เวอร์ชัน 0.1.0-dev17
19 สิงหาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:0.1.0-dev17 เวอร์ชัน 0.1.0-dev17 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Custom emits สามารถประกาศได้ว่าสามารถข้ามตัวตั้งค่าอย่างน้อย 1 รายการ และสามารถประกอบใหม่ได้โดยไม่ขึ้นอยู่กับ emit (Ibbd13)
นำการเรียก FrameManager ที่เลิกใช้งานแล้วออก
มีการเปลี่ยนแปลง API การเขียนภายในเพื่อลดปริมาณ ค่าใช้จ่ายในการติดตามออบเจ็กต์สถานะ เช่น
mutableStateof()(I80ba6)ตอนนี้เราเลิกใช้งาน
state { ... }ที่ใช้ร่วมกันได้แล้วเพื่อ การเรียกใช้remember { mutableStateOf(...) }อย่างชัดเจนเพื่อความชัดเจน ซึ่งจะช่วยลดพื้นผิว API โดยรวมและจำนวนแนวคิดสำหรับการจัดการสถานะ รวมถึงตรงกับรูปแบบby mutableStateOf()สำหรับการมอบสิทธิ์พร็อพเพอร์ตี้ของคลาส (Ia5727)ตอนนี้ Flow.collectAsState จะกำหนด Dispatcher เริ่มต้นจากการ คอมโพสิตเองแทนที่จะใช้ Dispatchers.Main เป็นค่าเริ่มต้น (I9c1d9)
แก้ไขข้อขัดข้องเมื่อมีการใช้สิ่งที่บันทึกสถานะภายในลูป for ตอนนี้ระบบอนุญาตให้มีคีย์เดียวกันใน savedInstanceState() แล้ว และเราได้ปรับ API ของ UiSavedStateRegistry ให้เป็นไปตามข้อกำหนดใหม่นี้ (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
การแก้ไขข้อบกพร่อง
emitViewถูกเลิกใช้งานแล้ว หากเป็นไปได้ ให้ใช้AndroidViewแทนเพื่อส่ง View ภายใน Compose โปรดทราบว่าในอนาคตเราจะไม่รองรับการสร้าง View และ ViewGroup โดยตรง เว้นแต่จะเป็นองค์ประกอบสุดท้ายในแผนผังการเรียบเรียง ซึ่งในกรณีนี้สามารถทำได้โดยใช้ AndroidView (I29b1e, b/163871221)
เวอร์ชัน 0.1.0-dev16
5 สิงหาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:0.1.0-dev16 เวอร์ชัน 0.1.0-dev16 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
นโยบายการเปลี่ยนแปลงเริ่มต้นของ
mutableStateOf(),ambientOf()และsavedInstanceStateOf()เปลี่ยนเป็นstructuralEqualityPolicy()แทนreferentialEqualityPolicy()แล้วค่าเริ่มต้นสำหรับการตัดสินว่าค่าใหม่ที่กำหนดให้กับอินสแตนซ์
mutableStateOf()ถือเป็นการเปลี่ยนแปลงหรือไม่คือการใช้==แทนการใช้===ดู https://kotlinlang.org/docs/reference/equality.html
ambientOf()และsavedInstanceStateOf()ใช้mutableStateOf()ในการติดตั้งใช้งาน จึงมีการเปลี่ยนแปลงเพื่อให้สอดคล้องกับmutableStateOf()การใช้ความเท่าเทียมกันเชิงโครงสร้างจะสอดคล้องกับความคาดหวังของนักพัฒนาซอฟต์แวร์มากขึ้น
ตัวอย่างเช่น
val state = mutableStateOf(1f)ตามด้วย
state.value = 1fจะไม่ถือว่าเป็นการเปลี่ยนแปลงใน
stateและการใช้stateระหว่างการเรียบเรียงเพลงจะไม่จำเป็นต้องเรียบเรียงเพลงใหม่การเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง แต่ในกรณีส่วนใหญ่ (เช่น เมื่อใช้คลาสที่ไม่ได้ลบล้าง
equals()) การเปลี่ยนแปลงนี้จะไม่มีผลที่สังเกตเห็นได้ในแอปพลิเคชันชั้นเรียนที่ลบล้าง
equals()เช่น ชั้นเรียนdataอาจเห็นประสิทธิภาพลดลงเนื่องจากตอนนี้ระบบจะเรียกใช้equals()เมธอด โดยค่าเริ่มต้นเมื่อมีการมอบหมายให้กับmutableStateOf()คุณสามารถคืนค่าลักษณะการทำงานก่อนหน้าได้โดยการเพิ่มพารามิเตอร์นโยบาย
policy = referentialEqualityPolicy()ลงในการเรียกไปยังmutableStateOf(),ambientOf()และsavedInstanceStateOf()(Ic21a7)ตอนนี้
RowและColumnเป็นฟังก์ชันแบบอินไลน์แล้ว ซึ่งช่วยลดค่าใช้จ่ายในการใช้งานได้อย่างมาก (I75c10)
การแก้ไขข้อบกพร่อง
- เลิกใช้งาน setViewContent แล้ว ควรใช้ setContent แทน (I7e497, b/160335130)
เพิ่ม MonotonicFrameAnimationClock ที่ช่วยให้คุณใช้ MonotonicFrameClock เป็น AnimationClockObservable เพื่อเชื่อมช่องว่าง ระหว่างนาฬิกาและ API ใหม่ที่อิงตามโครูทีนกับนาฬิกาและ API เก่าที่ยังคงใช้ นาฬิกาที่อิงตามการเรียกกลับ
ตอนนี้ MonotonicFrameClock ที่เทียบเท่ากับ ManualAnimationClock คือ ManualFrameClock (I111c7, b/161247083)
เราได้ปรับปรุงและเปลี่ยนชื่อ Modifier.stateDraggable ใหม่ทั้งหมด เป็น Modifier.swipeable มีการเปิดตัวคลาส SwipeableState ใหม่ และมีการปรับโครงสร้าง DrawerState และ BottomDrawerState เพื่อรับค่าจากคลาสนี้ [Modal/Bottom]DrawerLayout ไม่รับพารามิเตอร์ onStateChange อีกต่อไป (I72332, b/148023068)
เลิกใช้งาน Modifier.plus แล้ว โปรดใช้ Modifier.then แทน คำว่า "จากนั้น" มีสัญญาณการเรียงลำดับที่ชัดเจนกว่า และยังห้ามพิมพ์
Modifier.padding().background() + anotherModifierซึ่งจะทำให้ลำดับขาดตอนและอ่านยากขึ้น (Iedd58, b/161529964)เพิ่ม SubcomposeLayout แล้ว เป็นองค์ประกอบระดับต่ำที่ช่วยให้เราจัดวางองค์ประกอบย่อยในระหว่างการวัดได้ หากต้องการใช้ค่าบางอย่างที่ใช้ได้ในภายหลังระหว่างการวัดสำหรับการจัดวางองค์ประกอบย่อย เช่น WithConstraints ไม่ได้ใช้ SubcomposeLayout (I25cc8)
เราเปลี่ยนชื่อ Material FilledTextField เป็น TextField และเปลี่ยนชื่อ TextField พื้นฐานเป็น BaseTextField เพื่อให้ค้นพบและใช้งาน API ที่ต้องการได้ง่ายที่สุด (Ia6242, b/155482676)
เปลี่ยนชื่อ Modifier.drawBackground เป็น Modifier.background (I13677)
เวอร์ชัน 0.1.0-dev15
22 กรกฎาคม 2020
ระบบจะถอนการอ้างสิทธิ์androidx.compose.runtime:runtime-*:0.1.0-dev15 เวอร์ชัน 0.1.0-dev15 มีคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- หากต้องการใช้ Compose เวอร์ชัน
0.1.0-dev15คุณจะต้องอัปเดตการอ้างอิง ตามข้อมูลโค้ดใหม่ที่แสดงด้านบนในส่วนการประกาศการอ้างอิง
การเปลี่ยนแปลง API
ตอนนี้เราเลิกใช้งานคำอธิบายประกอบ
@Modelแล้ว ใช้ state และ mutableStateOf แทน การตัดสินใจเลิกใช้งานนี้เกิดขึ้นหลังจากที่เราได้พูดคุยกันอย่างละเอียดถี่ถ้วนเหตุผล
เหตุผลรวมถึงแต่ไม่จำกัดเพียง
- ลดพื้นที่ผิวของ API และแนวคิดที่เราต้องสอน
- สอดคล้องกับชุดเครื่องมืออื่นๆ ที่เทียบเคียงได้ (Swift UI, React, Flutter) มากขึ้น
- การตัดสินใจที่ย้อนกลับได้ เราสามารถนำ
@Modelกลับมาได้ทุกเมื่อ - นำการใช้งานในกรณีที่พบได้ยากและคำถามที่ตอบยากเกี่ยวกับการกำหนดค่า
@Modelออก เนื่องจากเป็นสิ่งที่เราต้องจัดการ @Modelคลาสข้อมูล เท่ากับ แฮชโค้ด ฯลฯ- ฉันจะให้ระบบ "สังเกต" ที่พักบางแห่งและไม่สังเกตที่พักอื่นๆ ได้อย่างไร
- ฉันจะระบุความเท่าเทียมเชิงโครงสร้างเทียบกับความเท่าเทียมเชิงอ้างอิงที่จะใช้ในการสังเกตได้อย่างไร
- ลด "ความมหัศจรรย์" ในระบบ จะช่วยลดโอกาสที่ผู้ใช้จะคิดว่าระบบฉลาดกว่าที่เป็นจริง (เช่น ระบบรู้ว่าต้องเปรียบเทียบรายการอย่างไร)
- ทำให้ความละเอียดของการสังเกตการณ์ใช้งานง่ายขึ้น
- ปรับปรุงการรีแฟกเตอร์จากตัวแปร -> พร็อพเพอร์ตี้ในคลาส
- อาจเปิดโอกาสในการเพิ่มประสิทธิภาพเฉพาะรัฐที่สร้างขึ้นเอง
- สอดคล้องกับส่วนอื่นๆ ของระบบนิเวศมากขึ้น และลดความคลุมเครือเกี่ยวกับสถานะที่ไม่เปลี่ยนแปลงหรือการ "ยอมรับสถานะที่เปลี่ยนแปลงได้"
หมายเหตุเกี่ยวกับการย้ายข้อมูล
การใช้งาน
@Modelที่มีอยู่เกือบทั้งหมดจะได้รับการแปลงอย่างง่ายๆ ใน 2 วิธี ตัวอย่างด้านล่างมีคลาส@Modelที่มีพร็อพเพอร์ตี้ 2 รายการเพื่อเป็นตัวอย่างเท่านั้น และมีการใช้ใน Composable@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 } ) }วิธีที่ 1: ใช้
State<OriginalClass>แล้วสร้างสำเนาซึ่งทำได้ง่ายขึ้นด้วยคลาสข้อมูลของ Kotlin กล่าวโดยสรุปคือ ให้เปลี่ยนพร็อพเพอร์ตี้
varทั้งหมดก่อนหน้านี้เป็นพร็อพเพอร์ตี้valของคลาสข้อมูล จากนั้นใช้stateแทนrememberและกำหนดค่าสถานะให้กับสำเนาที่โคลนของต้นฉบับโดยใช้เมธอดความสะดวกของคลาสข้อมูลcopy(...)โปรดทราบว่าวิธีนี้จะใช้ได้ก็ต่อเมื่อการเปลี่ยนแปลงในคลาสนั้นๆ เกิดขึ้นในขอบเขตเดียวกันกับที่สร้างอินสแตนซ์
Stateหากคลาสมีการเปลี่ยนแปลงภายในตัวเองนอกขอบเขตการใช้งาน และคุณอาศัยการสังเกตการณ์ดังกล่าว แนวทางถัดไปคือแนวทางที่คุณควรใช้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) } ) }วิธีที่ 2: ใช้ mutableStateOf และตัวแทนพร็อพเพอร์ตี้
วิธีนี้ทำได้ง่ายขึ้นด้วยตัวแทนพร็อพเพอร์ตี้ของ Kotlin และ
mutableStateOfAPI ซึ่งช่วยให้คุณสร้างอินสแตนซ์ MutableState นอกการจัดองค์ประกอบได้ โดยพื้นฐานแล้ว ให้แทนที่พร็อพเพอร์ตี้varทั้งหมดของคลาสเดิมด้วยพร็อพเพอร์ตี้varที่มีmutableStateOfเป็นผู้มอบสิทธิ์พร็อพเพอร์ตี้ ซึ่งมีข้อดีคือการใช้งานคลาสจะไม่เปลี่ยนแปลงเลย มีเพียงการใช้งานภายในเท่านั้นที่จะเปลี่ยนแปลง อย่างไรก็ตาม ลักษณะการทำงานจะไม่เหมือนกับตัวอย่างเดิมโดยสมบูรณ์ เนื่องจากตอนนี้แต่ละพร็อพเพอร์ตี้จะได้รับการสังเกต/ติดตามแยกกัน ดังนั้นการจัดองค์ประกอบใหม่ที่คุณเห็นหลังจากรีแฟคเตอร์นี้อาจแคบลง (ซึ่งเป็นเรื่องดี)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)
เปลี่ยนกลยุทธ์การสร้างโค้ดของคอมไพเลอร์ของ Compose ก่อนการเปลี่ยนแปลงนี้ คอมไพเลอร์ Compose จะแปลงการเรียกฟังก์ชันที่ประกอบกันได้ การเปลี่ยนแปลงนี้ทำให้เราสามารถเปลี่ยนเนื้อหาของฟังก์ชันที่ประกอบกันได้และปล่อยให้ Callsite ไม่เปลี่ยนแปลง (ส่วนใหญ่)
ซึ่งหมายความว่าตรรกะส่วนใหญ่ที่สื่อสารกับรันไทม์ของ Compose จะเกิดขึ้นที่จุดเริ่มต้นของเนื้อหาฟังก์ชัน แทนที่จะเป็นที่ Callsite
การเปลี่ยนแปลงนี้ควรเข้ากันได้กับแหล่งที่มาสำหรับการใช้งาน Compose ทั้งหมด ผู้ใช้ Compose ส่วนใหญ่ไม่จำเป็นต้องอัปเดตโค้ดใดๆ อันเป็นผลมาจากการเปลี่ยนแปลงนี้
เราได้เปลี่ยนลายเซ็น JVM ของฟังก์ชันที่ใช้ร่วมกันได้ทั้งหมดเพื่อรองรับการทำงานนี้ ฟังก์ชันที่ประกอบกันได้ซึ่งรับพารามิเตอร์เดียวจะเปลี่ยนเป็นฟังก์ชันที่รับพารามิเตอร์ 3 รายการ โดยพารามิเตอร์เพิ่มเติมคือ Composer ซึ่งเป็นจำนวนเต็ม "คีย์" และจำนวนเต็มบิตมาสก์ที่ใช้ในการส่งต่อข้อมูลเมตาผ่านการเรียก
ตอนนี้ Compose จะแปลงอาร์กิวเมนต์เริ่มต้นเป็นฟังก์ชันที่ประกอบกันได้ด้วย โดยการดำเนินการนี้จะไม่ทำให้ฟังก์ชันเองมีโอเวอร์โหลดเริ่มต้นแบบสังเคราะห์เพิ่มเติม ดังนั้นการเปลี่ยนแปลงนี้จะส่งผลให้มีการกำหนดฟังก์ชันน้อยลง
การเปลี่ยนแปลงลักษณะการทำงานที่ทราบและตั้งใจให้เกิดขึ้นจากสิ่งนี้มีดังนี้
- การโทรบางสายจะข้ามในกรณีที่ก่อนหน้านี้จะไม่ข้าม
- ตอนนี้ระบบจะติดตามและจัดการนิพจน์ที่ประกอบได้ในนิพจน์อาร์กิวเมนต์เริ่มต้นอย่างถูกต้องแล้ว
การดำเนินการนี้รวมถึงการเพิ่มประสิทธิภาพบางอย่าง ดังนี้ 1. ผลลัพธ์ของการเปรียบเทียบพารามิเตอร์จะเผยแพร่ผ่านกราฟการเรียกไปยังฟังก์ชันอื่นๆ ที่ประกอบได้ ซึ่งจะส่งผลให้มีการเปรียบเทียบน้อยลงในขณะรันไทม์ ลดขนาดตารางสล็อต รวมถึงข้ามฟังก์ชันที่ใช้ร่วมกันได้มากขึ้นซึ่งก่อนหน้านี้ไม่ได้ข้าม 2. ระบบจะไม่เปรียบเทียบหรือจัดเก็บพารามิเตอร์ที่พิจารณาว่า "คงที่" ในเวลาคอมไพล์ในรันไทม์อีกต่อไป ซึ่งจะช่วยลดจำนวนการเปรียบเทียบและลดขนาดตารางช่อง 3. ระบบจะใช้โครงสร้างโฟลว์การควบคุมของเนื้อหาฟังก์ชันเพื่อลดจำนวนกลุ่มที่สร้างขึ้น ซึ่งจะช่วยลดขนาดตารางสล็อตและทำให้รันไทม์ 4 ทำงานน้อยลง ระบบจะไม่รวมพารามิเตอร์การเรียกใช้และพารามิเตอร์ผู้รับที่ไม่ได้ใช้ไว้ในการพิจารณาว่าฟังก์ชันข้ามได้หรือไม่ หากไม่ได้ใช้พารามิเตอร์เหล่านั้นภายในเนื้อหาของฟังก์ชัน
การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้องส่วนใหญ่เป็น API ที่คอมไพเลอร์กำหนดเป้าหมายโดยตรง และการใช้ Compose โดยทั่วไปจะไม่ได้รับผลกระทบ 1. นำ Composer::startExpr ออกแล้ว 2. นำ Composer::endExpr ออกแล้ว 3. เลิกใช้งาน Composer::call 4. เราได้นำการโอเวอร์โหลดที่ไม่ใช่ varargs ของ
keyออกแล้ว ตั้งแต่นี้ไปให้ใช้vararg5. เราเลิกใช้งานคำอธิบายประกอบที่สำคัญแล้ว ใช้keyแทน 6. มีการเปลี่ยนแปลง ScopeUpdateScope::updateScope เพื่อให้คาดหวัง Function3 แทน Function1 7 มีการอัปเดต restartableFunction และ restartableFunctionN เพื่อรวมพารามิเตอร์เวลาคอมไพล์เพิ่มเติม (I60756, b/143464846)เพิ่ม sortWith และ removeRange ลงใน MutableVector (Icccf7)
เพิ่มการใช้งานเมธอดเริ่มต้นสำหรับ CompositionLifecycleObserver (I24289)
ตอนนี้ Applier ต้องมีเมธอด clear() สำหรับการทิ้ง องค์ประกอบ (Ibe697)
เพิ่ม asMutableList() ลงใน MutableVector เพื่อให้ส่งไปยัง API สาธารณะได้โดยไม่ต้องคัดลอกทั้งลิสต์ (I298df)
เพิ่ม rememberCoroutineScope() เพื่อรับ CoroutineScope ที่มีการจัดการ ใน Composition สำหรับการเปิดใช้ Job เพื่อตอบสนองต่อเหตุการณ์ (I0e264)
MutableVector เป็นคอลเล็กชันใหม่ที่ไม่ได้ ใช้ส่วนติดต่อ Collection มาตรฐานใดๆ คอลเล็กชันนี้ มีความเร็วสูงกว่าข้อกำหนดอื่นๆ และ มีไว้ใช้ในการติดตั้งใช้งานภายในเท่านั้น (I8ebd6)
นำ
StableMutableListและStableMutableMapออกชั่วคราว เพื่อหลีกเลี่ยงปัญหาในเวอร์ชันของ Kotlin Compose ที่จำเป็น เราจะนำอินเทอร์เฟซเหล่านี้กลับมาใช้ใหม่เมื่ออัปเดต Compose เป็น Kotlin เวอร์ชันที่ไม่มีปัญหาตอนนี้
SnapshotStateListและSnapshotStateMapเป็นแบบสาธารณะแล้ว แต่จะเลิกใช้งานเมื่อกู้คืนStableMutableListและStableMutableMapแล้ว (Ia7769)เพิ่มฟังก์ชัน withFrameNanos ระดับบนสุดสำหรับเวลาของภาพเคลื่อนไหว (Ie34c5)
เราเลิกใช้งาน @Untracked annotation แล้ว แทนที่ด้วย @ComposableContract(tracked=false) (Id211e)
เราได้เปลี่ยนชื่อ RestartableFunction และ API ที่เกี่ยวข้องเป็น ComposableLambda เป็นต้น API เหล่านี้มีเป้าหมายเป็นคอมไพเลอร์เท่านั้น ดังนั้นจึงไม่ควรส่งผลต่อความเข้ากันได้ที่ระดับแหล่งที่มาตามปกติ การเปลี่ยนชื่อนี้มีขึ้นเพื่อสื่อสารให้ดีขึ้นว่าคลาสนี้คืออะไรเมื่อปรากฏใน Stack Trace (I7eb25)
คำอธิบายประกอบ @Composable จะใช้กับคลาสไม่ได้อีกต่อไป (Ia5f02)
Ambient<T>ตอนนี้เป็น @Stable แทน @Immutable (I0b4bb)ก่อนการเปลี่ยนแปลงนี้ ปลั๊กอินคอมไพเลอร์ Compose จะดักจับการเรียกไปยังตัวสร้างภายในฟังก์ชัน @Composable อย่างไม่เหมาะสมหากมี (I5205a, b/158123804)
Composable ของ Recompose ไม่ใช่การแยกส่วนที่มีประโยชน์อีกต่อไป การเขียนคอมโพสใหม่ส่วนใหญ่ควรเกิดขึ้นจากการกำหนด MutableState หากต้องการดำเนินการอื่นๆ นอกเหนือจากนี้ เราขอแนะนำให้คุณใช้
invalidateฟังก์ชันเพื่อทริกเกอร์การจัดองค์ประกอบขอบเขตปัจจุบันใหม่ (Ifc992)Observe ไม่ใช่การแยกส่วนที่มีประโยชน์อีกต่อไป หากต้องการทำซ้ำ คุณสามารถทำซ้ำการใช้งานได้โดยเพียงแค่สร้างฟังก์ชันที่ประกอบกันได้ซึ่งจะเรียกใช้พารามิเตอร์ Lambda ที่ประกอบกันได้ เช่น
@Composable fun Observe(body: @Composable () -> Unit) = body()(I40d37)เลิกใช้งาน @Direct แล้วเพื่อใช้ @ComposableContract(restartable=false) แทน (If4708)
เพิ่มอแดปเตอร์สำหรับ StateFlow ที่เพิ่งเปิดตัว ซึ่งช่วยให้เราป้อนค่าเริ่มต้นล่วงหน้าได้เพื่อให้ State ที่แสดงผลเป็นแบบไม่เป็น Null (I61dd8, b/156233789)
เพิ่มอะแดปเตอร์สำหรับ Flow ตัวอย่างการใช้งาน: val value by flow.collectAsState() (If2198, b/153375923)
ย้ายตัวดำเนินการมอบสิทธิ์พร็อพเพอร์ตี้ [Mutable]State ไปยังส่วนขยาย เพื่อรองรับการเพิ่มประสิทธิภาพการมอบสิทธิ์พร็อพเพอร์ตี้ Kotlin 1.4 ผู้โทรต้องเพิ่ม การนำเข้าเพื่อใช้
by state { ... }หรือby mutableStateOf(...)ต่อไป (I5312c)ย้าย androidx.compose.ViewComposer ไปยัง androidx.ui.node.UiComposer นำ androidx.compose.Emittable ออกแล้ว เนื่องจากซ้ำซ้อนกับ ComponentNode. androidx.compose.ViewAdapters จึงถูกนำออก ซึ่งเป็นกรณีการใช้งานที่ไม่รองรับแล้ว เลิกใช้งาน Compose.composeInto แล้ว โปรดใช้
setContentหรือsetViewContentแทน เลิกใช้งาน Compose.disposeComposition แล้ว ใช้เมธอดdisposeในCompositionที่setContentส่งคืนแทน androidx.compose.Compose.subcomposeInto ย้ายไปที่ androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt เปลี่ยนชื่อเป็น ComponentNode#insertAt ComponentNode#emitRemoveAt เปลี่ยนชื่อเป็น ComponentNode#removeAt ComponentNode#emitMode เปลี่ยนชื่อเป็น ComponentNode#move (Idef00)อัปเดตฟีเจอร์
ComposeFlags.COMPOSER_PARAMเป็นtrueซึ่งจะเปลี่ยนกลยุทธ์การสร้างโค้ดสำหรับปลั๊กอินการเขียน ในระดับสูง การดำเนินการนี้จะทำให้มีการสร้างฟังก์ชัน @Composable พร้อมพารามิเตอร์สังเคราะห์เพิ่มเติม ซึ่งจะส่งผ่านไปยังการเรียก @Composable ที่ตามมาเพื่อให้รันไทม์จัดการการดำเนินการได้อย่างเหมาะสม นี่เป็นการเปลี่ยนแปลงที่สำคัญในไบนารี อย่างไรก็ตาม การเปลี่ยนแปลงนี้ควรคงความเข้ากันได้ระดับแหล่งที่มาในการใช้งาน Compose ที่ได้รับอนุญาตทั้งหมด (I7971c)การเปลี่ยนแปลงที่ไม่รองรับการทำงานย้อนหลังใน Ambient API ดูรายละเอียดได้ในบันทึกและเอกสารประกอบของ
Ambient<T>(I4c7ee, b/143769776)เพิ่ม ui-livedata - อาร์ติแฟกต์ใหม่ที่มีอะแดปเตอร์สำหรับ LiveData ตัวอย่างการใช้งาน: val value by liveData.observeAsState() (Ie9e8c, b/150465596)
เราเลิกใช้งาน Rx Adapter ที่ไม่มีค่าเริ่มต้นที่ชัดเจนแล้ว การใช้ค่า Null ไม่ใช่ค่าเริ่มต้นที่ดีที่สุดเสมอไป เช่น เมื่อคุณมีรายการ การเริ่มต้นด้วย emptyList() หรือค่าเริ่มต้นอื่นๆ ที่สมเหตุสมผลจะดีกว่า (I00025, b/161348384)
เพิ่ม ui-rxjava2 - อาร์ติแฟกต์ใหม่ที่มีอะแดปเตอร์สำหรับ RxJava2 ตัวอย่างการใช้งาน: val value by observable.subscribeAsState() (Ifab4b, b/153369097)
savedInstanceState()สามารถใช้กับประเภทที่กำหนดให้เป็น Null ได้แล้ว (I6847f, b/153532190)ฟังก์ชัน listSaver() และ mapSaver() ใหม่เพื่อให้เขียนออบเจ็กต์ Saver ที่กำหนดเองได้ง่ายขึ้น (I8cf68, b/152331508)
ฟังก์ชันใหม่: savedInstanceState() และ rememberSavedInstanceState() ฟังก์ชันเหล่านี้คล้ายกับ state() และ remember() แต่มีการรองรับสถานะอินสแตนซ์ที่บันทึกไว้ในตัว (If1987, b/152025209)
การแก้ไขข้อบกพร่อง
- เปลี่ยนชื่อเป็น
runOnIdle(I83607)runOnIdleCompose - ทำให้ LayoutNode เป็น API การทดลอง (I4f2e9)
- เลิกใช้งาน androidx.ui.foundation.TextFieldValue และ androidx.ui.input.EditorValue แล้ว นอกจากนี้ เรายังเลิกใช้งาน Composable TextField, FilledTextField และ CoreTextField ที่ใช้ประเภทดังกล่าวด้วย โปรดใช้ androidx.ui.input.TextFieldValue แทน (I4066d, b/155211005)
- นำ DrawBackground API ที่เลิกใช้งานแล้วออกเพื่อใช้ drawBackground extension API ใน Modifier แทน ปรับโครงสร้าง การใช้งานสี แปรง และ paint drawBackground เพื่อลดเส้นทางโค้ด รวมถึงนำข้อกำหนดในการสร้าง Modifier เป็นส่วนหนึ่งของการคอมโพสออก (I0343a)
- อัปเดต API Compose ระดับสูงขึ้น ที่แสดง Canvas เพื่อ แสดง CanvasScope แทน ซึ่งจะช่วยลดความจำเป็นที่ผู้บริโภคต้องดูแลออบเจ็กต์ Paint ของตนเอง สำหรับผู้บริโภคที่ยังต้องการเข้าถึง Canvas สามารถใช้วิธีส่วนขยาย drawCanvas ซึ่งมีแฮนเดิลการเรียกกลับเพื่อออก คำสั่งวาดภาพด้วย Canvas พื้นฐาน (I80afd)
- มีการเปลี่ยนแปลง API ของ Lambda ที่ต่อท้าย WithConstraints ตอนนี้แทนที่จะมี 2 พารามิเตอร์ ก็จะมีขอบเขตตัวรับซึ่งนอกเหนือจากข้อจำกัดและ layoutDirection แล้ว ยังมีพร็อพเพอร์ตี้ minWidth, maxWidth, minHeight และ maxHeight ใน Dp (I91b9a, b/149979702)
- เพิ่มตัวแก้ไขระยะห่างจากขอบแบบสมมาตร (I39840)
- อัปเดต wrapContentWidth และ wrapContentHeight เพื่อให้คาดหวังการจัดแนวแนวตั้งหรือแนวนอนแทนที่จะเป็นการจัดแนวใดก็ได้ เราได้อัปเดตตัวแก้ไขแรงโน้มถ่วงเพื่อให้ยอมรับการจัดแนวแนวตั้งหรือแนวนอน อัปเดตแถว คอลัมน์ และกองซ้อนให้รองรับการจัดแนวต่อเนื่องที่กำหนดเองแล้ว (Ib0728)
- เปลี่ยนชื่อโมดูล ui-text เป็น ui-text-core (I57dec)
- ปรับปรุง DrawModifier API ดังนี้
- สร้างขอบเขตตัวรับสำหรับ draw() ContentDrawScope
- นำพารามิเตอร์ทั้งหมดใน draw() ออก
- DrawScope มีอินเทอร์เฟซเหมือนกับ CanvasScope รุ่นก่อน
- ContentDrawScope มีเมธอด drawContent() (Ibaced, b/152919067)
- เลิกใช้งาน ColoredRect แล้ว โปรดใช้
Box(Modifier.preferredSize(width, height).drawBackground(color))แทน (I499fa, b/152753731) - แทนที่ตัวแก้ไขและตัวดำเนินการด้วยฟังก์ชันส่วนขยายของโรงงาน (I225e4)
- ตอนนี้สมาชิก RowScope และ ColumnScope สามารถเข้าถึงได้นอกแถวและคอลัมน์ (I3a641)
- เปลี่ยนชื่อ LayoutFlexible เป็น LayoutWeight เปลี่ยนชื่อพารามิเตอร์ "แน่น" เป็น "เติม" (If4738)
- WithConstraints มีพารามิเตอร์ LayoutDirection (I6d6f7)
- เปลี่ยนชื่อพื้นหลังเป็น DrawBackground และตั้งค่าให้จดจำได้โดยค่าเริ่มต้น (Ia0bd3)
- แทนที่ ButtonStyle ด้วยฟังก์ชันที่แตกต่างกันและนำการโอเวอร์โหลดข้อความ (สตริง) ออก ดูตัวอย่างที่อัปเดตแล้วสำหรับข้อมูลการใช้งาน (If63ab, b/146478620, b/146482131)
runOnIdleComposeและrunOnUiThreadเป็นฟังก์ชันส่วนกลางแล้ว แทนที่จะเป็นเมธอดใน ComposeTestRule (Icbe8f)
การมีส่วนร่วมภายนอก
- นำ API ที่ไม่จำเป็นออก เช่น Looper และ Handler จากเลเยอร์การย้ายข้อมูล Compose Runtime (I6847d)
- เลิกใช้งาน
Flow<T>.collectAsState()ที่ไม่มีค่าเริ่มต้น โปรดใช้StateFlow<T>หรือส่งค่าเริ่มต้นที่ชัดเจนแทน (I63f98, b/157674865)