รันไทม์ของ Compose
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(ดูเอกสารประกอบข้อมูลอ้างอิง API สำหรับแพ็กเกจ Compose ทั้งหมด)
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
2 กรกฎาคม 2025 | 1.8.3 | - | 1.9.0-beta02 | - |
โครงสร้าง
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
หากต้องการเพิ่มทรัพยากร Dependency ใน Compose คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูลของคุณ
ดึงดูด
dependencies { implementation "androidx.compose.runtime:runtime:1.8.3" implementation "androidx.compose.runtime:runtime-livedata:1.8.3" implementation "androidx.compose.runtime:runtime-rxjava2:1.8.3" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.8.3") implementation("androidx.compose.runtime:runtime-livedata:1.8.3") implementation("androidx.compose.runtime:runtime-rxjava2:1.8.3") } 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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ไม่มีการเปลี่ยนแปลงฟังก์ชันการทำงาน การเพิ่มประสิทธิภาพหลายรายการในการขึ้นต่อกันของดาวน์สตรีม
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.9
เวอร์ชัน 1.9.0-beta02
2 กรกฎาคม 2025
androidx.compose.runtime:runtime-*:1.9.0-beta02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.9.0-beta02 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ลดอายุการใช้งานอ้างอิงของค่าในตารางช่องระหว่างการจัดองค์ประกอบ ในบางกรณี ข้อมูลอ้างอิงในตารางสล็อตอาจอยู่ได้นานกว่า 1 เฟรม (I49e74, b/418516940)
- นำการดัดแปลง Kotlin สำหรับเมธอด Hot Reload ออก (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 ของเครื่องมือสังเกตการจัดองค์ประกอบเวอร์ชันทดลองเพื่อให้สังเกตสาเหตุของการจัดองค์ประกอบใหม่ได้อย่างครอบคลุมมากขึ้น (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 ของฟังก์ชัน remember ใน Composition ที่หยุดชั่วคราวได้เพื่อหลีกเลี่ยงการเรียกใช้ฟังก์ชัน remember/forget ในการเรียกใช้เดียวกัน (I570b2, b/404645679, b/407931790)
- เปลี่ยนไปใช้โหมดไม่ปลอดภัยใน Compose Multiplatform เพื่อปิดใช้การตรวจสอบ
MainThread
และแก้ไขปัญหาการทำงานแบบหลายเธรดLifecycleRegistry
ดูรายละเอียดได้ที่ CMP-8227 (Icee87)
การมีส่วนร่วมภายนอก
- แก้ไขข้อบกพร่องที่ส่งผลต่อผู้ใช้ Molecule ซึ่งการใช้
RecompositionMode.Immediate
อาจทำให้พลาดการจัดองค์ประกอบใหม่ (I9f3a9, b/419527812) PausableComposition
isApplied
และตัวรับ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 ของเครื่องมือสังเกตการจัดองค์ประกอบเวอร์ชันทดลองเพื่อให้สังเกตสาเหตุของการจัดองค์ประกอบใหม่ได้อย่างครอบคลุมมากขึ้น (I32b6a)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการจัดลำดับการส่ง
onForgotton
ซึ่งอาจทำให้onDispose
ของเอฟเฟกต์แบบใช้แล้วทิ้งทำงานในลำดับที่ไม่ถูกต้อง เป็นต้น (Ic1c91, b/417450712) - แก้ไขการจัดการสถานะที่นำกลับมาใช้ใหม่ในองค์ประกอบที่หยุดชั่วคราวได้ (Ife96e, b/404058957)
- แก้ไขข้อบกพร่องเล็กๆ น้อยๆ เพื่อให้การตรวจหาคอลเล็กชันที่เปลี่ยนแปลงได้เข้ากันได้กับทั้ง K1 และ K2 (Ie4878)
- แก้ไขข้อบกพร่องเล็กน้อยเพื่อให้การค้นหาคำอธิบายประกอบในตัวช่วยการเข้าถึงพร็อพเพอร์ตี้ที่ลบล้างเข้ากันได้กับทั้ง K1 และ K2 (I9900d)
การมีส่วนร่วมภายนอก
- แก้ไขข้อบกพร่องที่ส่งผลต่อผู้ใช้ Molecule ซึ่งการใช้
RecompositionMode.Immediate
อาจทำให้พลาดการจัดองค์ประกอบใหม่ (I9f3a9, b/419527812) - เปิดเผยตัวรับค่า
PausableComposition
isApplied และ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 ที่เกี่ยวข้อง (I83630, b/234042500) - เพิ่ม
@RememberInComposition
: คำอธิบายประกอบที่สามารถทำเครื่องหมายตัวสร้าง ฟังก์ชัน และตัวรับพร็อพเพอร์ตี้ เพื่อระบุว่าต้องไม่เรียกใช้โดยตรงภายใน Composition โดยไม่ต้องจดจำ การตรวจสอบ Lint ที่เกี่ยวข้องจะทำให้เกิดข้อผิดพลาด คำอธิบายประกอบนี้ใช้เพื่อทำเครื่องหมายการประกาศที่ส่งคืนออบเจ็กต์ที่มีสถานะ / เปลี่ยนแปลงได้ ออบเจ็กต์ที่มีการระบุตัวตนที่สำคัญต่อการรักษาไว้ในคอมโพสิต หรือออบเจ็กต์ที่มีค่าใช้จ่ายสูงในการสร้างอินสแตนซ์และควรแคชไว้ในคอมโพสิต (Ie7db0) - เพิ่ม
rememberSaveable
โอเวอร์โหลดใหม่ที่รองรับKSerializer
สำหรับการคงสถานะที่ปลอดภัยต่อประเภทโดยใช้ KotlinX Serialization ระบบยังคงรองรับ API ที่มีอยู่ซึ่งอิงตามSaver
(Iea4ab, b/376028110)
การแก้ไขข้อบกพร่อง
- แก้ไขการเรียกใช้ Observer ของฟังก์ชัน remember ใน Composition ที่หยุดชั่วคราวได้เพื่อหลีกเลี่ยงการเรียกใช้ฟังก์ชัน remember/forget ในการเรียกใช้เดียวกัน (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-เบต้า01
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
- การเปลี่ยนแปลงใน
PausableComposition
API การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้องเหล่านี้เกี่ยวข้องกับรุ่นก่อนหน้าของ 1.8.0-alpha (ตั้งแต่ 1.8.0-alpha02) แต่เนื่องจาก API เหล่านี้เป็น 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 นำการเรียกใช้การตรวจสอบรันไทม์การแก้ไขข้อบกพร่อง (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 ซึ่งจะทำให้โค้ดที่สร้างขึ้นสำหรับฟังก์ชันที่ใช้ 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) - หลีกเลี่ยงการหยุดชะงักในการเข้าถึง Frame Clock ของ 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) - อ่าน
currentRecord
1 ครั้งต่อการสังเกตในองค์ประกอบ (b882b2) - นำการจัดสรรตัววนซ้ำโดยไม่ตั้งใจใน
snapshotFlow
ออก (231e56) - เปิดใช้
nonSkippingGroupOptimization
สำหรับไลบรารี Compose ซึ่งจะทำให้โค้ดที่สร้างขึ้นสำหรับฟังก์ชันที่ใช้ 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) - เพิ่มเวอร์ชันดั้งเดิมของ
State
API ซึ่งช่วยให้ติดตามค่า 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)
- ใช้ Composer ที่มีขอบเขตที่ถูกต้องเมื่อสร้างกลุ่ม (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
- เพิ่มเวอร์ชันดั้งเดิมของ
State
API ซึ่งช่วยให้ติดตามค่า 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)
- ใช้ Composer ที่มีขอบเขตที่ถูกต้องเมื่อสร้างกลุ่ม (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
ไปยังComposableMethod
7b6c7ad
การแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพ
- ล้างดัชนีขอบเขตทั้ง 2 รายการใน
SnapshotStateObserver
29f4a3e - เพิ่มกลุ่มที่จำเป็นในเนื้อหาของ Lambda ที่ข้ามไม่ได้ 7d06752
- ปรับปรุงลักษณะการอ้างอิงหน่วยความจำของสถานะสแนปชอต 93fcae8
- นำการล้อมกรอบในการค้นหาในพื้นที่ขององค์ประกอบออก 0875717
- ใช้คีย์ที่ถูกต้องสำหรับกลุ่มโหนดที่ใช้ซ้ำไม่ได้ 6388d8d
- ป้องกัน
SnapshotStateObserver
จากการใช้แบบเรียกซ้ำและพร้อมกัน 98cb6ba - เพิ่มการตรวจสอบดัชนีที่อยู่นอกขอบเขตในเมธอด
IdentityArraySet
"get" 35a77d3 - อัปเดตโมดูลการเขียนเพื่อใช้ส่วนขยาย
ViewTreeLifecycleOwner
21c2122 - ส่งการแจ้งเตือนการใช้หลังจากที่ Recomposer สร้างเฟรมเสร็จ 98f2641
- แก้ไขข้อขัดข้องของดัชนีที่อยู่นอกขอบเขตเมื่อยกเลิก Recomposer 8f8656f
- บังคับให้จัดองค์ประกอบใหม่เสมอหากผู้ให้บริการระดับบนสุดของการจัดองค์ประกอบมีการเปลี่ยนแปลง 9526fcc
- ความคลาดเคลื่อนในการจัดองค์ประกอบใหม่สำหรับงานที่ยกเลิก 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)
การแก้ไขข้อบกพร่อง
- นำการล้อมกรอบในการค้นหาในพื้นที่ขององค์ประกอบออก (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
- เราได้เพิ่ม
ComposableMethod
API ใหม่เพื่อให้การเรียกใช้ API ที่ประกอบได้โดยอิงตามการสะท้อนมีความน่าเชื่อถือมากขึ้น - ย้าย invokeComposable ไปยังรันไทม์ของ Compose
- ปรับปรุง API เพื่อเรียกใช้เมธอดที่ใช้ร่วมกันได้
การแก้ไขรันไทม์
- แก้ไขการทดสอบช่วงที่ผิดพลาดสำหรับการตรวจสอบตารางสล็อตเพื่อหาเครื่องหมาย
- อนุญาตให้ย้ายเนื้อหาที่ย้ายได้เข้าและออกจาก SubcomposeLayout
- แก้ไขการย้ายเนื้อหาไปยังเนื้อหาใหม่ขององค์ประกอบย่อย
ระบบสแนปชอต
- ระบบสแนปชอตได้รับการปรับปรุงต่างๆ เกี่ยวกับการจัดการหน่วยความจำ ประสิทธิภาพ และความถูกต้อง
- เพิ่มประสิทธิภาพการนำขอบเขตออกใน SnapshotStateObserver
- ทิ้งสแนปชอตที่ซ้อนกันซึ่งสร้างจากสแนปชอตโปร่งใส
- แก้ไขเงื่อนไขการแข่งขันเมื่ออ่านสถานะจากสแนปชอตส่วนกลาง
- รองรับ DerivedState ใน SnapshotStateObserver
- ป้องกันไม่ให้นำสถานะที่ได้มาจากการคอมโพสออกจากคอมโพสเมื่ออ่านในขอบเขตอื่นๆ
- ใช้ IdentityArrayMap แทน HashMap ภายใน DerivedState
- อัปเดต Observer สถานะที่ได้มาเพื่อใช้เวกเตอร์ที่เปลี่ยนแปลงได้
- อัปเดตการล้างสถานะ 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 พร้อมกับการแก้ไขข้อบกพร่องหลายอย่างเพื่อเพิ่มความเสถียร ฟีเจอร์ใหม่ที่สำคัญที่สุดคือการเปิดตัว
movableContentOf
API ซึ่งใช้เพื่อเปิดใช้ UX ที่ซับซ้อน เช่น การเปลี่ยนองค์ประกอบที่ใช้ร่วมกันmovableContentOf
API จะแปลง Lambda ที่ประกอบได้เป็น Lambda ที่ย้ายสถานะและโหนดที่เกี่ยวข้องไปยังตำแหน่งใหม่ที่เรียกใช้ เมื่อการโทรครั้งก่อนออกจากคอมโพสิชัน ระบบจะเก็บรักษาสถานะไว้ชั่วคราว และหากมีการโทรใหม่ไปยัง Lambda เข้าสู่คอมโพสิชัน ระบบจะย้ายสถานะและโหนดที่เชื่อมโยงไปยังตำแหน่งของการโทรใหม่ หากไม่มีการเพิ่มการโทรใหม่ ระบบจะนำสถานะออกอย่างถาวรและแจ้งให้ผู้สังเกตการณ์ทราบหากมีการเรียกใช้
movableContentOf
Lambda หลายครั้งในการจัดองค์ประกอบเดียวกัน ระบบจะสร้างสถานะและโหนดใหม่สำหรับการเรียกใช้แต่ละครั้ง และเมื่อการเรียกใช้สิ้นสุดลงและมีการเรียกใช้ใหม่ สถานะจะย้ายจากการเรียกใช้ที่สิ้นสุดครั้งแรกไปยังการเรียกใช้ใหม่ตามลำดับการเรียกใช้ ระบบจะนำสถานะทั้งหมดที่การเรียกใหม่ไม่ได้อ้างสิทธิ์ออกอย่างถาวรนอกจากฟีเจอร์นี้และฟีเจอร์ใหม่อื่นๆ อีก 2-3 รายการแล้ว เรายังใช้เวลาส่วนใหญ่ไปกับการปรับระบบรันไทม์และสถานะสแนปชอตให้เสถียร นำการรั่วไหลของหน่วยความจำต่างๆ ออกและเพิ่มประสิทธิภาพเส้นทางโค้ด
ดูรายการการเปลี่ยนแปลงโดยสรุปได้ที่ด้านล่าง
ฟีเจอร์ใหม่ใน 1.2
- เพิ่มสแนปชอตทดลองที่ไม่ปลอดภัยEnter/Leave
- เพิ่ม Snapshot.asContextElement API เวอร์ชันทดลอง
- ขอแนะนำ Snapshot.withoutReadObservation
- อนุญาตให้ย้ายสถานะภายในคอมโพสิต
- การติดตามการจัดองค์ประกอบใหม่ใน Compose
ประสิทธิภาพใน 1.2
การแก้ไขข้อบกพร่องใน 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 เข้าสู่การคอมโพส ระบบจะย้ายสถานะและโหนดที่เชื่อมโยง ไปยังตำแหน่งของการโทรใหม่ หากไม่มีการเพิ่มการโทรใหม่ ระบบจะนำสถานะออกอย่างถาวรและจะแจ้งให้ผู้สังเกตการณ์ที่จดจำทราบหากมีการเรียกใช้
movableContentOf
Lambda หลายครั้งในการ คอมโพสเดียวกัน ระบบจะสร้างสถานะและโหนดใหม่สำหรับการเรียกใช้แต่ละครั้ง และเมื่อ การเรียกใช้สิ้นสุดลงและมีการเรียกใช้ใหม่ สถานะจะย้าย จากการเรียกใช้ที่สิ้นสุดครั้งแรกไปยังการเรียกใช้ใหม่ตามลำดับ การเรียกใช้ ระบบจะนำสถานะทั้งหมดที่การเรียกใหม่ไม่ได้อ้างสิทธิ์ออก อย่างถาวร (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 Components และมีลักษณะการทํางานที่สอดคล้องกันหากคุณใช้ทั้ง 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 รองรับ 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 เบต้า
การเปลี่ยนแปลง API
- เพิ่ม
Recomposer.runRecomposeConcurrentlyAndApplyChanges
API ทดลองสําหรับการสร้างองค์ประกอบที่ใช้ไม่ได้ใหม่นอกลูปเฟรมหลัก (I342d0) - ตอนนี้ระบบจะตรวจสอบ Composable ที่ทำเครื่องหมายด้วย @ReadOnlyComposable ในเวลาคอมไพล์เพื่อให้แน่ใจว่า Composable เหล่านั้นจะเรียกใช้เฉพาะ @ReadOnlyComposable อื่นๆ เท่านั้น (I58961)
ตอนนี้คุณต้องระบุ
defaultFactory
สำหรับcompositionLocalOf
และstaticCompositionLocalOf
แทนที่จะระบุหรือไม่ก็ได้การเปลี่ยนแปลงนี้จะนำข้อผิดพลาดเกี่ยวกับประเภทที่อาจเกิดขึ้นสำหรับประเภทที่ไม่ใช่ Nullable ที่ไม่ได้ระบุ Factory เริ่มต้นออก ก่อนหน้านี้ จะให้การอ้างอิงเป็น Null สำหรับประเภทที่กำหนดให้ต้องมีค่า
สำหรับประเภทที่กำหนดให้เป็น Null ได้ ให้พิจารณาใส่
{ null }
เป็นค่าเริ่มต้น factoryเราไม่แนะนำให้ใช้ locales กับประเภทที่กำหนดให้ต้องมีค่า เว้นแต่จะระบุค่าเริ่มต้นที่เหมาะสมได้ หากไม่มีค่าเริ่มต้นที่เหมาะสม Lambda
defaultFactory
ควรส่งข้อยกเว้น อย่างไรก็ตาม การส่งข้อยกเว้นหมายความว่าผู้บริโภคของภาษาจะมี การอ้างอิงโดยนัยถึงการระบุภาษาดังกล่าว ซึ่งระบบประเภทไม่ได้บังคับ (Ifbd2a)นำสัญลักษณ์ที่เลิกใช้งานแล้วออกจากรันไทม์ Compose (I3252c)
นำ
emptyContent()
ที่เลิกใช้งานแล้วออก โปรดใช้{}
แทน (Idb33f, b/179432510)เปลี่ยนชื่อ Providers เป็น CompositionLocalProvider แล้ว
- ตัวสร้างองค์ประกอบไม่รับพารามิเตอร์คีย์อีกต่อไปและเลิกใช้งานแล้ว
- 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
และทำให้เป็นค่าว่างได้ - เปลี่ยนชื่อพารามิเตอร์
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
- นำการรองรับ ViewGroups ออกจาก 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 ที่ปิดอยู่จะ ทำการ Recomposition ต่อไปจนกว่าโคโรทีนของ Composable ลูกจะเสร็จสมบูรณ์ เปลี่ยนชื่อ 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
ครั้งเดียวไม่น่าเชื่อถือและถูกนำออกสำหรับRememberObserver
RememberObserver
เพิ่ม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 ทดลองจนกว่าจะมีการใช้การเปลี่ยนแปลง โดยปกติแล้ว คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดย ล้อมรอบโค้ดที่มีการอ้างอิงดังกล่าวใน
SideEffect
Composable เพื่อเลื่อนการเรียกใช้โค้ด จนกว่าจะสร้างและเริ่มต้นโหนดแล้ว (I018da)
การเปลี่ยนแปลง API
- เพิ่มวิธีติดตามว่า Recomposer ได้ใช้การเปลี่ยนแปลงหรือไม่ (I1b3e2)
ขยาย [Abstract]ComposeView API เพื่ออนุญาตให้รีไซเคิล มุมมองที่อิงตาม 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 เหล่านี้ให้ข้อมูลดิบที่ 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 ตามหลักเกณฑ์อื่นๆ ของ Ambients และ 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 ที่ไม่มีพารามิเตอร์ Subject เพื่อส่งเสริมแนวทางปฏิบัติแนะนำ (Ifd3d4)
- ตอนนี้ Applier มีการเรียกกลับ onBeginChanges/onEndChanges ซึ่งจะเรียกใช้เมื่อ Composer เริ่ม/เสร็จสิ้นการใช้การเปลี่ยนแปลงกับทรี ซึ่งอาจใช้สำหรับการจัดการทรัพยากรแบบเป็นชุดได้หากจำเป็น (Icf476)
- ตอนนี้ Recomposer ต้องใช้ CoroutineContext ในการสร้าง (Ic4610)
- การเปลี่ยนแปลงการใช้งาน SlotTable ภายในซึ่ง ไม่ควรส่งผลต่อ API สาธารณะ (If9828)
- นำอะแดปเตอร์ rxjava2 ที่เลิกใช้งานแล้วซึ่งไม่ใช้ค่าเริ่มต้นออก (Idb72f)
การแก้ไขข้อบกพร่อง
- เลิกใช้งาน foundation.Text แล้วและแทนที่ด้วย material.Text หากต้องการใช้ 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 counterpart ไปยัง 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)
- API RestorableStateHolder เวอร์ชันทดลองใหม่ ซึ่งจะช่วยให้บันทึกสถานะที่กำหนดด้วย [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 ใหม่ที่อิงตามโครูทีนกับนาฬิกาเก่าที่ยังคงใช้ นาฬิกาที่อิงตามการเรียกกลับ
ตอนนี้ 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 และ
mutableStateOf
API ซึ่งช่วยให้คุณสร้างอินสแตนซ์ 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 ทั้งหมด ผู้ใช้ Compose ส่วนใหญ่ไม่จำเป็นต้องอัปเดตโค้ดใดๆ อันเป็นผลมาจากการเปลี่ยนแปลงนี้
เราได้เปลี่ยนลายเซ็น JVM ของฟังก์ชันที่สามารถคอมโพสได้ทั้งหมดเพื่อรองรับการทำงานนี้ ฟังก์ชันที่ใช้ร่วมกันได้ซึ่งยอมรับพารามิเตอร์เดียวจะเปลี่ยนเป็นฟังก์ชันที่ยอมรับ 3 พารามิเตอร์ โดยพารามิเตอร์เพิ่มเติมคือ Composer ซึ่งเป็นจำนวนเต็ม "คีย์" จำนวนเต็มบิตมาสก์ที่ใช้ในการเผยแพร่ข้อมูลเมตาผ่านการเรียก
ตอนนี้ Compose จะแปลงอาร์กิวเมนต์เริ่มต้นเป็นฟังก์ชันที่ใช้ร่วมกันได้ด้วย โดยการดำเนินการนี้จะไม่ทำให้ฟังก์ชันมีการโอเวอร์โหลดเริ่มต้นแบบสังเคราะห์เพิ่มเติม ดังนั้นการเปลี่ยนแปลงนี้จะส่งผลให้มีการกำหนดฟังก์ชันน้อยลง
การเปลี่ยนแปลงพฤติกรรมโดยเจตนาที่ทราบซึ่งเป็นผลมาจากการเปลี่ยนแปลงนี้มีดังนี้
- การโทรบางสายจะข้ามในกรณีที่ก่อนหน้านี้จะไม่ข้าม
- ตอนนี้ระบบจะติดตามและจัดการนิพจน์ที่ประกอบได้ในนิพจน์อาร์กิวเมนต์เริ่มต้นอย่างถูกต้องแล้ว
การทำงานนี้รวมถึงการเพิ่มประสิทธิภาพบางอย่าง ดังนี้ 1. ผลลัพธ์ของการเปรียบเทียบพารามิเตอร์จะเผยแพร่ผ่านกราฟการเรียกไปยังฟังก์ชันอื่นๆ ที่ประกอบได้ ซึ่งจะส่งผลให้มีการเปรียบเทียบน้อยลงในขณะรันไทม์ ลดขนาดตารางสล็อต รวมถึงข้ามฟังก์ชันที่ใช้ร่วมกันได้มากขึ้นซึ่งก่อนหน้านี้ไม่ได้ข้าม 2. ระบบจะไม่เปรียบเทียบหรือจัดเก็บพารามิเตอร์ที่พิจารณาว่า "คงที่" ในเวลาคอมไพล์ในรันไทม์อีกต่อไป ซึ่งจะช่วยลดจำนวนการเปรียบเทียบและลดขนาดตารางช่อง 3. ระบบจะใช้โครงสร้างโฟลว์การควบคุมของเนื้อหาฟังก์ชันเพื่อลดจำนวนกลุ่มที่สร้างขึ้น ซึ่งจะช่วยลดขนาดตารางสล็อตและทำให้รันไทม์ 4 ทำงานน้อยลง ระบบจะไม่รวมพารามิเตอร์การเรียกใช้และพารามิเตอร์ผู้รับที่ไม่ได้ใช้ในฟังก์ชันในการพิจารณาว่าฟังก์ชันข้ามได้หรือไม่ หากไม่ได้ใช้พารามิเตอร์เหล่านั้นภายในเนื้อหาของฟังก์ชัน
การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้องส่วนใหญ่เป็น API ที่คอมไพเลอร์กำหนดเป้าหมายโดยตรง และการใช้งาน Compose โดยทั่วไปจะไม่ได้รับผลกระทบ 1. นำ Composer::startExpr ออกแล้ว 2. นำ Composer::endExpr ออกแล้ว 3. เลิกใช้งาน Composer::call แล้ว 4. เราได้นำโอเวอร์โหลดที่ไม่ใช่ varargs ของ
key
ออกแล้ว ตั้งแต่นี้ไปให้ใช้vararg
5. เราเลิกใช้งานคำอธิบายประกอบที่สำคัญแล้ว ใช้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 ที่มีการจัดการ ในการจัดองค์ประกอบสำหรับการเปิดใช้ Job เพื่อตอบสนองต่อเหตุการณ์ (I0e264)
MutableVector เป็นคอลเล็กชันใหม่ที่ไม่ได้ ใช้ส่วนใดของอินเทอร์เฟซ Collection มาตรฐาน คอลเล็กชันนี้ มีความเร็วสูงกว่าข้อกำหนดอื่นๆ และ มีไว้เพื่อใช้ในการติดตั้งใช้งานภายในเท่านั้น (I8ebd6)
นำ
StableMutableList
และStableMutableMap
ออกชั่วคราว เพื่อหลีกเลี่ยงปัญหาในเวอร์ชันของ Kotlin Compose ที่จำเป็น เราจะนำอินเทอร์เฟซเหล่านี้กลับมาใช้ใหม่เมื่ออัปเดต Compose เป็น Kotlin เวอร์ชันที่ไม่มีปัญหาตอนนี้
SnapshotStateList
และSnapshotStateMap
เป็นแบบสาธารณะแล้ว แต่จะเลิกใช้งานเมื่อกู้คืนStableMutableList
และStableMutableMap
แล้ว (Ia7769)เพิ่มฟังก์ชัน withFrameNanos ระดับบนสุดสำหรับการกำหนดเวลาภาพเคลื่อนไหว (Ie34c5)
เราเลิกใช้งานคำอธิบายประกอบ @Untracked แล้ว แทนที่ด้วย @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 ผู้โทรต้องเพิ่ม imports เพื่อใช้
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 ไม่ใช่ค่าเริ่มต้นที่ดีที่สุดเสมอไป เช่น เมื่อคุณมี List การเริ่มต้นด้วย 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 แทน ปรับโครงสร้าง การใช้งานสี แปรง และการวาดภาพพื้นหลัง เพื่อลดเส้นทางโค้ด รวมถึงนำข้อกำหนดในการสร้าง 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 got LayoutDirection parameter (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)