รันไทม์ของ Compose

ส่วนประกอบพื้นฐานของรูปแบบการเขียนโปรแกรมและการจัดการสถานะของ Compose รวมถึงรันไทม์หลักสำหรับปลั๊กอินคอมไพเลอร์ 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 สำหรับ int SnapshotThreadLocal ใน 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

การจัดการข้อยกเว้น / การสนับสนุนการแก้ไขสด

การติดตามการเรียบเรียง

Composable Reflection APIs

การแก้ไขรันไทม์

ระบบสแนปชอต

เวอร์ชัน 1.3.0-rc01

5 ตุลาคม 2022

androidx.compose.runtime:runtime-*:1.3.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.0-rc01 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • แก้ไข ArrayIndexOutOfBoundsException ที่มาจากตารางสล็อต (b/249076084)

เวอร์ชัน 1.3.0-beta03

21 กันยายน 2022

androidx.compose.runtime:runtime-*:1.3.0-beta03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.0-beta03 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงพฤติกรรมที่ส่งผลกับส่วนอื่นในระบบ

  • พารามิเตอร์ไปยัง remember และ rememberCoroutineScope เปลี่ยนเป็น crossinline แล้ว ซึ่งจะรายงานข้อผิดพลาดสำหรับการกลับคืนก่อนเวลาแทนที่จะอนุญาตให้กลับคืนก่อนเวลา ซึ่งจะทำให้ระบบรายงานข้อผิดพลาดภายในในภายหลัง
  • การเปลี่ยนแปลงนี้อาจทำให้เกิดข้อผิดพลาดของคอมไพเลอร์ใหม่ที่ต้องรายงาน ซึ่งต้องนำการคืนค่าที่ไม่ใช่แบบเฉพาะที่ออกจาก Lambda ที่ส่งไปยังฟังก์ชันเหล่านี้ (Ibea62)

เวอร์ชัน 1.3.0-beta02

7 กันยายน 2022

androidx.compose.runtime:runtime-*:1.3.0-beta02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.0-beta02 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • อัปเดต API (I64ca0)

เวอร์ชัน 1.3.0-beta01

24 สิงหาคม 2022

androidx.compose.runtime:runtime-*:1.3.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.0-beta01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เราได้เพิ่มfindเมธอดลงใน CompositionData เพื่อให้เครื่องมือสำหรับนักพัฒนาแอปที่ใช้ API นี้ค้นหากลุ่มย่อยขององค์ประกอบได้อย่างรวดเร็วโดยใช้ข้อมูลประจำตัวขององค์ประกอบ (I5794f)

เวอร์ชัน 1.3.0-alpha03

10 สิงหาคม 2022

androidx.compose.runtime:runtime-*:1.3.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.0-alpha03 มีคอมมิตต่อไปนี้

เวอร์ชัน 1.3.0-alpha02

27 กรกฎาคม 2022

androidx.compose.runtime:runtime-*:1.3.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.0-alpha02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เพิ่ม ComposerKt.traceEventStart(Int, String) อีกครั้งเพื่อความเข้ากันได้แบบย้อนหลัง (I6e6de)

เวอร์ชัน 1.3.0-alpha01

29 มิถุนายน 2022

androidx.compose.runtime:runtime-*:1.3.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.0-alpha01 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • ย้ายฟังก์ชันการทำงานของยูทิลิตีไปยังรันไทม์ (I4f729)

เวอร์ชัน 1.2

เวอร์ชัน 1.2.1

10 สิงหาคม 2022

androidx.compose.runtime:runtime-*:1.2.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.2.1 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขหน่วยความจำรั่ว: ทิ้งสแนปชอตที่ซ้อนกันซึ่งสร้างจากสแนปชอตโปร่งใส b/239603305

เวอร์ชัน 1.2.0

27 กรกฎาคม 2022

androidx.compose.runtime:runtime-*:1.2.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.2.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงสำคัญตั้งแต่ 1.1.0

  • Compose Runtime มีฟีเจอร์จำนวนหนึ่งที่เปิดตัวในเวอร์ชัน 1.2.0 พร้อมกับการแก้ไขข้อบกพร่องหลายอย่างเพื่อเพิ่มความเสถียร ฟีเจอร์ใหม่ที่สำคัญที่สุดคือการเปิดตัว movableContentOfAPI ซึ่งใช้เพื่อเปิดใช้ UX ที่ซับซ้อน เช่น การเปลี่ยนองค์ประกอบที่ใช้ร่วมกัน movableContentOf API จะแปลง Lambda ที่ประกอบได้เป็น Lambda ที่ย้ายสถานะและโหนดที่เกี่ยวข้องไปยังตำแหน่งใหม่ที่เรียกใช้ เมื่อการโทรครั้งก่อนออกจากคอมโพสิชัน ระบบจะเก็บรักษาสถานะไว้ชั่วคราว และหากมีการโทรใหม่ไปยัง Lambda เข้าสู่คอมโพสิชัน ระบบจะย้ายสถานะและโหนดที่เชื่อมโยงไปยังตำแหน่งของการโทรใหม่ หากไม่มีการเพิ่มการโทรใหม่ ระบบจะนำสถานะออกอย่างถาวรและแจ้งให้ผู้สังเกตการณ์ทราบ

  • หากมีการเรียกใช้ movableContentOf Lambda หลายครั้งในการจัดองค์ประกอบเดียวกัน ระบบจะสร้างสถานะและโหนดใหม่สำหรับการเรียกใช้แต่ละครั้ง และเมื่อการเรียกใช้สิ้นสุดลงและมีการเรียกใช้ใหม่ สถานะจะย้ายจากการเรียกใช้ที่สิ้นสุดครั้งแรกไปยังการเรียกใช้ใหม่ตามลำดับการเรียกใช้ ระบบจะนำสถานะทั้งหมดที่การเรียกใหม่ไม่ได้อ้างสิทธิ์ออกอย่างถาวร

  • นอกจากฟีเจอร์นี้และฟีเจอร์ใหม่อื่นๆ อีก 2-3 รายการแล้ว เรายังใช้เวลาส่วนใหญ่ไปกับการปรับระบบรันไทม์และสถานะสแนปชอตให้เสถียร นำการรั่วไหลของหน่วยความจำต่างๆ ออกและเพิ่มประสิทธิภาพเส้นทางโค้ด

  • ดูรายการการเปลี่ยนแปลงโดยสรุปได้ที่ด้านล่าง

ฟีเจอร์ใหม่ใน 1.2

ประสิทธิภาพใน 1.2

การแก้ไขข้อบกพร่องใน 1.2

เวอร์ชัน 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 ให้ขึ้นอยู่กับ Kotlin 1.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 และ AGP 7.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. ตอนนี้ระบบจะติดตามและจัดการนิพจน์ที่ประกอบได้ในนิพจน์อาร์กิวเมนต์เริ่มต้นอย่างถูกต้องแล้ว

    การทำงานนี้รวมถึงการเพิ่มประสิทธิภาพบางอย่าง ดังนี้ 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)