بيئة تشغيل Compose

الوحدات الأساسية لنموذج البرمجة وإدارة الحالة في Compose، ووقت التشغيل الأساسي الذي يستهدفه مكوّن Compose Compiler الإضافي
آخر تعديل الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار التجريبي الأول
11 كانون الأول (ديسمبر) 2024 1.7.6 - - 1.8.0-alpha07

البنية

Compose هو عبارة عن مجموعة من 7 أرقام تعريف مجموعات Maven ضمن androidx. تحتوي كل مجموعة على مجموعة فرعية مستهدفة من الوظائف، ولكل مجموعة مجموعة خاصة بها من ملاحظات الإصدار.

يوضّح هذا الجدول المجموعات والروابط لكل مجموعة من ملاحظات الإصدار.

مجموعةالوصف
compose.animationإنشاء صور متحركة في تطبيقات Jetpack Compose لتحسين تجربة المستخدم
compose.compilerحوِّل دوالّ @Composable وفعِّل التحسينات باستخدام مكوّن إضافي لمجمّع لغة Kotlin.
compose.foundationيمكنك كتابة تطبيقات Jetpack Compose باستخدام وحدات أساسية جاهزة للاستخدام وتوسيع الأساس لإنشاء أجزاء نظام التصميم الخاص بك.
compose.materialأنشئ واجهات مستخدم Jetpack Compose باستخدام مكونات Material Design الجاهزة للاستخدام. هذه هي نقطة الدخول ذات المستوى الأعلى في أداة "الإنشاء"، وهي مصمّمة لتوفير مكوّنات تتطابق مع تلك الموضّحة على www.material.io.
compose.material3أنشئ واجهات مستخدم Jetpack Compose باستخدام مكونات Material Design 3، وهي الإصدار التالي من Material Design. يتضمّن Material 3 ميزات تخصيص Material You، مثل الألوان الديناميكية، وتصميمًا جديدًا للعناصر والمظاهر، وهو مصمّم ليتوافق مع التصميم المرئي الجديد لنظام Android 12 وواجهة مستخدم النظام.
compose.runtimeالوحدات الأساسية لنموذج البرمجة وإدارة الحالة في Compose، ووقت التشغيل الأساسي الذي يستهدفه مكوّن Compose Compiler الإضافي
compose.uiالمكونات الأساسية لواجهة المستخدم الخاصة بإنشاء الرسائل اللازمة للتفاعل مع الجهاز، بما في ذلك التنسيق والرسم والإدخال

الإعلان عن التبعيات

لإضافة تبعية على Compose، يجب إضافة مستودع Google Maven إلى مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.

أضِف التبعيات للعناصر التي تحتاج إليها في ملف build.gradle ل تطبيقك أو وحدتك:

رائع

dependencies {
    implementation "androidx.compose.runtime:runtime:1.7.5"
    implementation "androidx.compose.runtime:runtime-livedata:1.7.5"
    implementation "androidx.compose.runtime:runtime-rxjava2:1.7.5"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

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

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

لمزيد من المعلومات عن العناصر الاعتمادية، اطّلِع على مقالة إضافة عناصر الاعتماد الخاصة بالإنشاء.

ملاحظات

تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا واجهت مشاكل جديدة أو كان لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مكتبة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية عن طريق النقر على زر النجمة.

إنشاء مشكلة جديدة

اطّلِع على مستندات أداة تتبُّع المشاكل لمزيد من المعلومات.

الإصدار 1.7 من ميزة "تتبُّع وقت التشغيل"

الإصدار 1.7.0-rc01

18 أيلول (سبتمبر) 2024

تم إصدار androidx.compose.runtime:runtime-tracing:1.7.0-rc01. يتضمّن الإصدار 1.7.0-rc01 عمليات الربط هذه.

الإصدار 1.0 من ميزة "تتبُّع وقت التشغيل"

الإصدار 1.0.0-beta01

29 تشرين الثاني (نوفمبر) 2023

تم إصدار androidx.compose.runtime:runtime-tracing:1.0.0-beta01. يحتوي الإصدار 1.0.0-beta01 على هذه المراجعات.

الإصدار 1.0.0-alpha05

15 تشرين الثاني (نوفمبر) 2023

تم إصدار androidx.compose.runtime:runtime-tracing:1.0.0-alpha05. يحتوي الإصدار 1.0.0-alpha05 على هذه المراجعات.

إصلاح الأخطاء

  • الاعتمادات المثبّتة على أدنى إصدارات مستقرة متوافقة (مثل compose-runtime وtracing-perfetto): إصلاح مشكلة تؤدي إلى جلب إصدار أحدث من compose-runtime إلى التطبيق من خلال compose-runtime-tracing

الإصدار 1.0.0-alpha04

23 آب (أغسطس) 2023

تم إصدار androidx.compose.runtime:runtime-tracing:1.0.0-alpha04. يحتوي الإصدار 1.0.0-alpha04 على هذه المراجعات.

الميزات الجديدة

  • تتوافق مع أحدث إصدارات Perfetto لأدوات قياس الأداء وأدوات تتبُّع الأداء، ما يتيح إتاحة ميزة تتبُّع الأداء عند بدء تشغيل التطبيق (التشغيل الأوّلي)، مثل أدوات قياس الأداء في AndroidX و"استوديو Android" (بدءًا من الإصدار 2 من الإصدار التجريبي من Hedgehog).

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة تسمية androidx.tracing.perfetto.Trace إلى androidx.tracing.perfetto.PerfettoSdkTrace. (I44af8)
  • جعل واجهات برمجة تطبيقات Tracing Perfetto SDK متوافقة مع android.os.Trace (I73ba0، b/282199917)
  • المتطلبات الأساسية للتتبُّع عند بدء تشغيل التطبيق (Iad890)
  • دمج ملفات واجهة برمجة التطبيقات التجريبية والعلنية (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.8

الإصدار 1.8.0-alpha07

11 كانون الأول (ديسمبر) 2024

تم إصدار androidx.compose.runtime:runtime-*:1.8.0-alpha07. يتضمّن الإصدار 1.8.0-alpha07 عمليات الربط هذه.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة واجهة برمجة تطبيقات للأدوات تساعد "أداة فحص التنسيق" في ربط التصاميم الفرعية بالتصميم الأصلي في الحالات التي لا يتم فيها استخدام عقدة لربط التصاميم معًا. (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 عمليات الربط هذه.

تغييرات واجهة برمجة التطبيقات

  • تغييرات في واجهة برمجة التطبيقات PausableComposition هذه التغييرات الأساسية في ما يتعلّق بالإصدارات السابقة من الإصدار 1.8.0-alpha (بدءًا من الإصدار 1.8.0-alpha02)، ولكن بما أنّ هذه واجهات برمجة تطبيقات جديدة في الإصدار 1.8.0، لا يتم الحفاظ على التوافق مع الإصدارات القديمة لأنّ واجهات برمجة التطبيقات لا تزال في مرحلة الإصدار التجريبي. (I39819)
  • إضافة واجهات برمجة تطبيقات للأدوات من أجل مراقبة إنشاء تركيبات جديدة ضمن أداة Recomposer (Iaeb7e)
  • تمت إضافة snapshotId من النوع Long إلى Snapshot وتم إيقاف id نهائيًا. تم تغيير رقم تعريف اللقطة من Int إلى Long لتجنُّب تجاوز رقم تعريف اللقطة الحد الأقصى المسموح به على الأنظمة التي تتميز بمعدّلات عرض صور عالية جدًا وصور متحركة تستغرق وقتًا طويلاً. تم ضبط النوع على "متوقّع" أو "فعلي" للسماح بأن يكون هذا النوع Int أو نوعًا آخر على المنصات التي لا تتضمّن نوع Long أصليًا. بالنسبة إلى المنصات التي لا تتضمّن Long أصليًا، مثل JavaScript، يجب تجنُّب معدلات اللقطات العالية (أكثر من 1000 لقطة في الثانية) التي قد تؤدي إلى تجاوز Int كل 24 يومًا تقريبًا. (I38ac3، b/374821679)

إصلاح الأخطاء

الإصدار 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 بإزالة طلبات runtimeCheck لتشغيل تصحيح الأخطاء (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.6

11 كانون الأول (ديسمبر) 2024

تم إصدار 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 لمكتبات الإنشاء. يؤدي ذلك إلى زيادة كفاءة الرمز الذي تم إنشاؤه لجميع الدوال المُركّبة غير القابلة لإعادة التشغيل في androidx. ونخطّط لتفعيل هذه الميزة تلقائيًا في المستقبل. I(acbc08)
  • إلغاء صلاحية الدوالّ القابلة للتجميع في العناصر الفرعية للتركيب في الإطار نفسه (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)

تغييرات واجهة برمجة التطبيقات

  • يمكن الوصول إلى عناصر الحالة المنشأة حديثًا على الفور من اللقطات الأخرى، بما في ذلك اللقطة الشاملة، مع حالتها الأولية. ولا تظهر أي تعديلات لاحقة إلى أن يتم تطبيق اللقطة التي تم إنشاء العنصر فيها.
  • الحالة الأولية لـ 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)
  • تجنُّب حدوث مشكلة في "إعادة التركيب" عند الوصول إلى ساعة اللقطة (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 مرة واحدة لكل ملاحظة في التركيب (b882b2)
  • إزالة تخصيص أداة التكرار غير المقصودة في snapshotFlow (231e56)
  • فعِّل nonSkippingGroupOptimization لمكتبات الإنشاء. يؤدي ذلك إلى زيادة كفاءة الرمز الذي تم إنشاؤه لجميع الدوال المُركّبة غير القابلة لإعادة التشغيل في androidx. ونخطّط لتفعيل هذه الميزة تلقائيًا في المستقبل. I(acbc08)

الإصدار 1.7.0-alpha03

21 شباط (فبراير) 2024

تم إصدار androidx.compose.runtime:runtime-*:1.7.0-alpha03. يحتوي الإصدار 1.7.0-alpha03 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • إدخال مجموعات الاستبدال لتحسين رصد التغييرات (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 على هذه المراجعات.

إصلاح الأخطاء

  • إلغاء صلاحية الدوالّ القابلة للتجميع في العناصر الفرعية في الإطار نفسه (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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • نشر قيم ثبات معيّنة في التعليق التوضيحي (274a4c)

إصلاح الأخطاء

  • استخدِم سياسة المرجعية لحالة النطاق المحلي للتركيب في السياق. (83361c)
  • حصر عملية الالتقاط باستخدام دالة $dirty في الدوالّ البرمجية المضمّنة (acfca0)
  • حلّ مشكلة تلقّي المحتوى القابل للنقل أحيانًا لبيانات محلية غير صحيحة للتركيب (035cd6)
  • استخدِم خرائط التجزئة غير المخصّصة الأسرع في RecomposeScopeImpl. (d79494)
  • يمكنك استخدام ObjectIntMap في DerivedState. (21862e)
  • استخدِم IntRef للعدد الصحيح 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تم وضع علامة 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)

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة طريقة لإيقاف 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)

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة حمولة زائدة خاصة للحالة CompositionLocalProviders تتجنّب التكاليف الإضافية المستخدَمة لجعل تقديم قيم متعدّدة أسرع، ولكنها تُعدّ تكلفة إضافية عند تقديم قيمة واحدة. (I6d640، b/288169379)

إصلاح الأخطاء

  • إصلاح تسرُّب ذاكرة جدول الخانات (73fcfe)
  • إصلاح طريقة استعادة rememberSaveable عندما يعرض stateSaver قيمة فارغة (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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمّت إزالة عمليات التوزيع في إعادة التركيب والصور المتحركة بالألوان وAndroidComposeView. (Ib2bfa)
  • تمت إضافة تعليق توضيحي @StateFactoryMarker لتمييز الدوال التي تنشئ حالات ويجب تضمينها في طلب remember. (I64550)
  • إضافة إصدارات بدائية من State وMutableState (fb3d89)
  • تمت إضافة Snapshot.isApplyObserverNotificationPending (I672a5)
  • تمت إضافة إصدارات أساسية من واجهة برمجة التطبيقات State، ما يتيح تتبُّع قيم Int وLong وFloat وDouble في عناصر State بدون التعرّض لعقوبات بسبب التجميع التلقائي. استخدِم طرق المصنع الجديدة mutableIntState(Int) وmutableFloatStateOf(Float) وما إلى ذلك لاستخدام هذه العناصر. (I48e43)

إصلاح الأخطاء

  • تخطّي إعادة إنشاء التراكيب الفرعية التي ستتم إزالتها (Ieeb99، b/254645321)
  • عدم الاحتفاظ بإشارة إلى اللقطة في ComposerImpl (0206f7)
  • عدم تطبيق التركيب مرتين (f5791b)
  • التأكّد من إلغاء صلاحية قيم الحالة المستمدة غير المُنشَأة (aa2a92)
  • اتصل برقم onEndChanges أثناء التخلص من المكوّنات. (62cc8c)
  • حلّ مشكلة نقل المحتوى إلى تركيبة فرعية (4beb41)
  • حلّ حالات التوقف المحتمَلة (c1a425 و8edce0)
  • سيحظر الآن مُعاد التركيب الذي تم إنشاؤه لإحدى نوافذ Android المكالمات إلى withFrameNanos فقط بدلاً من جميع عمليات التركيب عند تلقّيه إشعار ON_STOP. وهذا يعني أنّ النوافذ المرتبطة بالأنشطة المتوقفة ستستمر في إعادة التركيب لتغييرات البيانات، ولكن سيتم حظر الصور المتحركة أو أي عنصر آخر يستدعي withFrameNanos. (Id9e7f، b/240975572)
  • تنفيذ عمليات الاستدعاء لإيقاف LayoutNode قبل التخلص من التأثيرات 3784073
  • حلّ مشكلة العلامات التي تم تغييرها في وظائف Lambda التي تمت إعادة تشغيلها ea81df9
  • إصلاح مشكلة تراجع الأداء في ميزة "التعديل المباشر" في ميزة "التصميم القابل للتجميع" باستخدام العقد 73fd4d8
  • يجب أن يؤدي ON_STOP إلى إيقاف عمليات بث ساعة اللقطة مؤقتًا بدلاً من التركيب ae276f1.
  • إلغاء صلاحية نطاقات SnapshotStateObserver للحالات المشتقة التي لم تتغيّر 84d9b1c
  • حلّ مشكلة التوقف المفاجئ المحتمَل عند التخلص من التراكيب 28761fc
  • حلّ مشكلة نقل المحتوى إلى تركيبة فرعية 92d4156
  • حلّ مشكلة العلامات التي تم تغييرها لوظائف Lambda التي تمت إعادة تشغيلها (8a03e9)
  • تنفيذ عمليات الاستدعاء لإيقاف LayoutNode قبل التخلص من التأثيرات (8b0fa4)
  • إصلاح endToMarker() عند إنهاء مجموعات العقد (d71d980)
  • استخدام مجموعة SlotWriter الحالية للتحقّق من إيقاف الميزة (a0b518b)
  • أزِل الرمز fill في SlotTable.moveSlotGapTo() وانقله إلى الإغلاق (81f9935).
  • إصلاح عمليات الإبطال غير المتوفّرة أثناء نقل المحتوى القابل للنقل (1d7c024)
  • إصلاح عمليات الإبطال الفورية للمحتوى القابل للنقل الذي تم نقله (8676618)

تحسينات على الأداء

  • تجنَّب احتساب readableHash في DerivedState إذا لم يتم تعديل اللقطة. (307102)
  • عمليات التوزيع المنخفضة (I65c09 وd7ea77 و727974 و445808)
  • إلغاء سريع لإنشاء CoroutineScopes (a55362 وbd382f)
  • استبدال سجلات عناصر الحالة بسجلات حالة يتعذّر الوصول إليها (c986960)
  • استخدِم مؤلف النطاق الصحيح عند إنشاء المجموعات (9a5e5b6).
  • استخدِم IdentityArraySet لتخزين عمليات إبطال صلاحية اللقطات (7f60cca).
  • تقليل عمليات التوزيع لملاحظات اللقطات (5bc535f)

الإصدار 1.5.0-rc01

26 تموز (يوليو) 2023

تم إصدار androidx.compose.runtime:runtime-*:1.5.0-rc01. يحتوي الإصدار 1.5.0-rc01 على هذه المراجعات.

إصلاح الأخطاء

  • تأجيل إعادة قراءة الحالات المشتقة إلى أن يتم تسجيل التغييرات (f38099)

  • يتوفّر فحص اختياري لاقتراح نقل طلبات mutableStateOf() إلى الأنواع المخصّصة لها من العناصر الأساسية. رقم تعريف أداة تصحيح الأخطاء هو 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمّت إزالة عمليات التوزيع في إعادة التركيب والصور المتحركة بالألوان وAndroidComposeView (Ib2bfa)
  • تمت إضافة تعليق توضيحي @StateFactoryMarker لتمييز الدوال التي تنشئ حالات ويجب تضمينها في طلب remember. (I64550)
  • إضافة إصدارات بدائية من State وMutableState (fb3d89)
  • تمت إضافة Snapshot.isApplyObserverNotificationPending (I672a5)

إصلاح الأخطاء

  • عمليات التوزيع المنخفضة (I65c09 وd7ea77 و727974 و445808)
  • عدم الاحتفاظ بإشارة إلى اللقطة في ComposerImpl (0206f7)
  • إلغاء سريع لإنشاء CoroutineScopes (a55362 وbd382f)
  • لا تطبِّق تركيبة مرتين (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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة إصدارات أساسية من واجهة برمجة التطبيقات State، ما يتيح تتبُّع قيم Int وLong وFloat وDouble في عناصر State بدون التعرّض لعقوبات بسبب التجميع التلقائي. استخدِم طرق المصنع الجديدة 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • سيحظر الآن مُعاد التركيب الذي تم إنشاؤه لإحدى نوافذ Android المكالمات إلى withFrameNanos فقط بدلاً من جميع عمليات التركيب عند تلقّيه إشعار ON_STOP. وهذا يعني أنّ النوافذ المرتبطة بالأنشطة المتوقفة ستستمر في إعادة التركيب لتغييرات البيانات، ولكن سيتم حظر الصور المتحركة أو أي عنصر آخر يستدعي withFrameNanos. (Id9e7f، b/240975572)

إصلاح الأخطاء

  • حلّ مشكلة احتمال حدوث "قفل لحام" في قائمة اللقطات وخريطة 5c1a425
  • تنفيذ عمليات الاستدعاء لإيقاف LayoutNode قبل التخلص من التأثيرات 3784073
  • حلّ مشكلة العلامات التي تم تغييرها لوظائف Lambda التي تمت إعادة تشغيلها ea81df9
  • إصلاح مشكلة تراجع التعديل المباشر في ميزة "التصميم القابل للتجميع" باستخدام العقد 73fd4d8
  • يجب أن يؤدي ON_STOP إلى إيقاف عمليات بث ساعة اللقطة مؤقتًا بدلاً من التركيب ae276f1.
  • إلغاء صلاحية نطاقات SnapshotStateObserver للحالات المشتقة التي لم تتغيّر 84d9b1c
  • حلّ مشكلة التوقف المفاجئ المحتمَل عند التخلص من التراكيب 28761fc
  • حلّ مشكلة نقل المحتوى إلى تركيبة فرعية 92d4156

الإصدار 1.5.0-alpha02

5 نيسان (أبريل) 2023

تم إصدار androidx.compose.runtime:runtime-*:1.5.0-alpha02. يحتوي الإصدار 1.5.0-alpha02 على هذه المراجعات.

الميزات الجديدة

  • يمكن الآن دمج عامل التشغيل getValue في لغة Kotlin (f174f6e).

إصلاح الأخطاء وتحسينات على الأداء

  • استبدال سجلات عناصر الحالة بسجلات حالة يتعذّر الوصول إليها (c986960)
  • استخدِم مؤلف النطاق الصحيح عند إنشاء المجموعات (9a5e5b6).
  • حلّ مشكلة endToMarker() عند إنهاء مجموعات العقد (d71d980)
  • استخدام مجموعة SlotWriter الحالية للتحقّق من إيقاف الميزة (a0b518b)
  • استخدِم IdentityArraySet لتخزين عمليات إبطال صلاحية اللقطات (7f60cca).
  • أزِل الرمز fill من SlotTable.moveSlotGapTo() وانقله إلى الإغلاق (81f9935).
  • إصلاح الأخطاء المتعلّقة بعمليات الإبطال غير المتوفّرة أثناء نقل المحتوى القابل للنقل (1d7c024)
  • إصلاح عمليات الإبطال الفورية للمحتوى القابل للنقل الذي تم نقله (8676618)
  • تقليل عمليات التوزيع لملاحظات اللقطات (5bc535f)

الإصدار 1.5.0-alpha01

22 آذار (مارس) 2023

تم إصدار androidx.compose.runtime:runtime-*:1.5.0-alpha01. يحتوي الإصدار 1.5.0-alpha01 على هذه المراجعات.

الميزات الجديدة

  • إضافة Modifier.Node#coroutineScope للسماح Modifier.Nodes بتشغيل وظائف coroutines (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

إصلاح الأخطاء وتحسينات على الأداء

  • محو فهرسَي النطاق في SnapshotStateObserver 29f4a3e
  • أضِف المجموعات المطلوبة في نص الدوالّ lambda التي لا يمكن تخطّيها 7d06752.
  • تحسين خصائص مرجع الذاكرة لحالة "اللقطة" 93fcae8
  • إزالة الحظر في عمليات البحث المحلية للتركيب 0875717
  • استخدِم المفتاح الصحيح لمجموعات العقد غير القابلة لإعادة الاستخدام 6388d8d.
  • حماية SnapshotStateObserver من عمليات التطبيق المتكررة والمتزامنة 98cb6ba
  • تمت إضافة عملية التحقّق من حدود الفهرس في طريقة IdentityArraySet "get" 35a77d3
  • تعديل وحدة إنشاء الرسائل لاستخدام إضافات ViewTreeLifecycleOwner 21c2122
  • إرسال إشعارات التطبيق بعد انتهاء "أداة إعادة التركيب" من إنشاء اللقطة 98f2641
  • إصلاح تعطُّل الفهرس خارج الحدود عند إلغاء إعادة التركيب 8f8656f
  • فرض إعادة التركيب دائمًا إذا تغيّر مقدّمو المحتوى الرئيسيون لـ Composition 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة ComposeNodeLifecycleCallback التي تتيح مراقبة دورة حياة عقد Compose (I3731b).
  • تمت إضافة @TestOnly إلى Composer.disableSourceInformation() لأنّه لا يمكن استدعاء هذه الدالة إلا في اختبار. (I896c8)

إصلاح الأخطاء

  • إزالة الحظر في عمليات البحث المحلية للتركيب (62f66a)
  • تحسين خصائص مرجع الذاكرة لحالة Snapshot (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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • المزيد من أنواع/قيم القيمة الخالية للدوالّ المضمّنة/المخفية غير المُستخدَمة (I24f91)

الإصدار 1.4.0-alpha04

11 كانون الثاني (يناير) 2023

تم إصدار androidx.compose.runtime:runtime-*:1.4.0-alpha04. يحتوي الإصدار 1.4.0-alpha04 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • يستخدم TestMonotonicFrameClock الآن التعليق التوضيحي التجريبي الصحيح. (I95c9e)

إصلاح الأخطاء

  • حماية SnapshotStateObserver من عمليات التطبيق المتكررة والمتزامنة (d902fb)

الإصدار 1.4.0-alpha03

7 كانون الأول (ديسمبر) 2022

تم إصدار androidx.compose.runtime:runtime-*:1.4.0-alpha03. يحتوي الإصدار 1.4.0-alpha03 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • إضافة طريقة عامة جديدة إلى فئة 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • يتضمّن 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 على هذه المراجعات.

إصلاح الأخطاء

  • تم تعديلها لتتوافق مع الإصدار 1.3.2 من androidx.compose.ui

الإصدار 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. سيؤدي ذلك إلى الإبلاغ عن خطأ في عمليات الإرجاع المبكر بدلاً من السماح بالإرجاع المبكر، ما سيؤدي إلى الإبلاغ عن خطأ داخلي لاحقًا.
  • يمكن أن يؤدّي هذا التغيير إلى ظهور أخطاء جديدة في المُجمِّع تتطلّب إزالة النتائج غير المحلية من الدوالّ اللامدا التي يتم تمريرها إلى هذه الدوالّ. (Ibea62)

الإصدار 1.3.0-beta02

7 أيلول (سبتمبر) 2022

تم إصدار androidx.compose.runtime:runtime-*:1.3.0-beta02. يحتوي الإصدار 1.3.0-beta02 على هذه المراجعات.

إصلاح الأخطاء

  • واجهة برمجة التطبيقات المعدَّلة (I64ca0)

الإصدار 1.3.0-beta01

24 آب (أغسطس) 2022

تم إصدار androidx.compose.runtime:runtime-*:1.3.0-beta01. يحتوي الإصدار 1.3.0-beta01 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة طريقة find إلى CompositionData للسماح لأدوات المطوّرين التي تستخدم واجهة برمجة التطبيقات هذه بالعثور بسرعة على مجموعة فرعية من التركيب باستخدام هويتها. (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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة إضافة ComposerKt.traceEventStart(Int, String) للحفاظ على التوافق مع الإصدارات القديمة (I6e6de)

الإصدار 1.3.0-alpha01

29 حزيران (يونيو) 2022

تم إصدار androidx.compose.runtime:runtime-*:1.3.0-alpha01. يحتوي الإصدار 1.3.0-alpha01 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • نقل وظيفة الأداة إلى وقت التشغيل (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

  • تم تقديم عدد من الميزات في الإصدار 1.2.0 من Compose Runtime، بالإضافة إلى العديد من إصلاحات الأخطاء التي تساهم في تحسين الأداء. كانت مقدمة movableContentOfAPI هي الميزة الجديدة الأكثر أهمية، والتي يمكن استخدامها لتفعيل تجربة مستخدم معقّدة، مثل عمليات النقل للعناصر المشتركة. تحوّل واجهة برمجة التطبيقات movableContentOf دالة lambda قابلة للتجميع إلى دالة lambda تنقل حالتها والعقد المقابلة لها إلى أي موقع جديد يتم استدعاؤها فيه. عندما تغادر المكالمة السابقة التركيب، يتم الاحتفاظ بالحالة مؤقتًا، وإذا دخلت مكالمة جديدة إلى دالة lambda في التركيب، يتم نقل الحالة والعقد المرتبطة بها إلى موقع المكالمة الجديدة. في حال عدم إضافة مكالمة جديدة، تتم إزالة الحالة نهائيًا ويتم إشعار المراقبين.

  • إذا تمّ استدعاء دالة movableContentOf lambda عدّة مرّات في التركيب نفسه، يتمّ إنشاء حالة وعقد جديدة لكلّ استدعاء، وعندما تغادر المكالمات التركيب وتدخل مكالمات جديدة، يتمّ نقل الحالة من أوّل المكالمات التي تغادر إلى المكالمات التي تدخل بترتيب استدعائها. تتم إزالة جميع الحالات التي لم يتمّ تأكيدها من خلال المكالمات الجديدة نهائيًا.

  • بالإضافة إلى ذلك وبعض الميزات الجديدة الأخرى، تمّت إزالة العديد من الأخطاء في نظام وقت التشغيل ونظام حالة "لقطة الشاشة". تمت إزالة العديد من عمليات تسرُّب الذاكرة وتحسين مسارات الرموز البرمجية.

  • في ما يلي قائمة ملخّصة بالتغييرات:

الميزات الجديدة في 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • يتم الآن إنشاء الواجهات في مكتبات 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.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة Snapshot.unsafeEnter/unsafeLeave التجريبي (I108f3)
  • تمت إضافة واجهة برمجة التطبيقات التجريبية Snapshot.asContextElement() (Iff072)
  • يمكن الآن استخدام التعليق التوضيحي @ComposableTarget والتعليقات التوضيحية التي تم وضع علامة @ComposableTargetMarker عليها في نطاق الملف باستخدام البادئة @file. سيؤدي استخدام تعليق توضيحي مستهدَف في نطاق الملف إلى افتراض المُجمِّع أنّه من المُفترَض أن تستهدف جميع الدوالّ القابلة للتجميع في الملف المُطبِّق المرتبط. على سبيل المثال، يشير استخدام @file:UiComposable إلى أنّ جميع دوال @Composable تستهدف أداة تطبيق واجهة مستخدم Compose. يجب أن تقدّم الدالة التي تحتاج إلى استهداف مستخدم آخر توضيحًا لعلامة الاستهداف للمستخدم المطلوب. (I40804)

الإصدار 1.2.0-alpha08

20 نيسان (أبريل) 2022

تم إصدار androidx.compose.runtime:runtime-*:1.2.0-alpha08. يحتوي الإصدار 1.2.0-alpha08 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة TracingInProgress إلى واجهة CompositionTracer. (Ic6f12)
  • إضافة recomposeScopeIdentity إلى "أداة إنشاء المحتوى" (I0c873)
  • تم حظر واجهات برمجة تطبيقات التتبُّع (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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة الدالة الجديدة 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة ComposableTarget وComposableTargetMarker و ComposableOpenTarget التي تتيح إعداد تقارير وقت الترجمة عند استدعاء دالة مركّبة تستهدف عامل تطبيق لم يتم تصميمها لاستخدامه.

    في معظم الحالات، يمكن استنتاج التعليقات التوضيحية من خلال المكوّن الإضافي لـ compiler compose، لذا يجب استخدام هذه التعليقات التوضيحية مباشرةً بشكلٍ نادر . وتشمل الحالات التي لا يمكن استنتاجها إنشاء واستخدام أداة تطبيق مخصّصة أو وظائف قابلة للإنشاء مجردة (مثل methods الواردة في الواجهة) أو حقول أو متغيّرات عالمية هي دالات لامبدا قابلة للإنشاء (يتم استنتاج المتغيّرات المحلية والمَعلمات)، أو عند استخدام ComposeNode أو وظائف قابلة للإنشاء ذات صلة.

    بالنسبة إلى أدوات التطبيق المخصّصة، يجب أن تضيف الدوالّ القابلة للتجميع التي تستدعي دالة ComposeNode أو ReusableComposeNode تعليقًا توضيحيًا CompoableTarget للدالة وأي أنواع مَعلمات LAMBDA قابلة للتجميع. ومع ذلك، ننصح بإنشاء تعليق توضيحي تمّت الإشارة إليه باستخدام 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة movableContentOf التي تحوّل دالة lambda قابلة للتركيب إلى دالة lambda تنقل حالتها والعقد المقابلة إلى أيّ موقع جديد يتمّ استدعاؤها فيه. عندما تغادر المكالمة السابقة التركيبة، يتم الاحتفاظ بالحالة مؤقتًا، وإذا دخلت مكالمة جديدة إلى دالة lambda في التركيبة، يتم نقل الحالة والعناصر المرتبطة بها إلى موقع المكالمة الجديدة. في حال عدم إضافة مكالمة جديدة، تتم إزالة الحالة نهائيًا ويتم إعلام المراقبين.

    إذا تمّ استدعاء دالة movableContentOf lambda عدّة مرّات في التركيب نفسه، يتمّ إنشاء حالة وعقد جديدة لكلّ استدعاء، وبينما تغادر المكالمات التركيب وتدخل مكالمات جديدة، يتمّ نقل الحالة من أوّل المكالمات التي تغادر إلى المكالمات التي تدخل بالترتيب الذي يتمّ فيه استدعاؤها. تتم إزالة كل البيانات التي لم يتمّ تأكيدها من خلال مكالمات جديدة بشكل نهائي. (Ib4850)

  • تمت إضافة واجهة برمجة تطبيقات للتتبّع إلى التركيب لتفعيل الأدوات في تقديم تتبّع أكثر تفصيلاً للوظائف القابلة للتجميع. يُنشئ المُجمِّع الآن طلبات بيانات إلى واجهة برمجة التطبيقات للتتبُّع التي تتضمّن معلومات مصدر. (Ib0eb5)

    لإزالة هذه الطلبات ومعلومات المصدر المرتبطة بها من إصدار الإصدار، أضِف قاعدة Proguard التالية:

      -assumenosideeffects public class androidx.compose.runtime.ComposerKt {
          boolean isTraceInProgress();
          void traceEventStart(int,java.lang.String);
          void traceEventEnd();
      }
    
  • أضِف InternalComposeScope الذي يمنح الأدوات القدرة على تحديد عنصر قابل للتجميع أثناء عمليات إعادة التركيب. (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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة الحقل identity إلى CompositionData لإنشاء عناوين تعريف ثابتة في "أداة فحص التنسيق". (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)
  • تم إصلاح اتجاه النص من اليمين إلى اليسار في 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، ما يضمن سلوكًا متسقًا في حال خلط Views وCompose. يضمن هذا التغيير أيضًا استيفاء الحد الأدنى من متطلبات تسهيل الوصول إلى مساحات اللمس عند إنشاء واجهة المستخدم باستخدام مكونات Compose Material.
  • إتاحة شريط التنقّل بشكل ثابت
  • ترقية عدد من واجهات برمجة التطبيقات التجريبية إلى إصدارات مستقرة
  • التوافق مع الإصدارات الأحدث من 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تم تقسيم رمز اللقطة إلى ملفات متعددة، ولكن لا يزال كلّه متوفّرًا في فئة 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة 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" (1.0). قبل هذا التغيير، كان "مجمّع Compose" متوافقًا فقط مع "وقت تشغيل Compose" من الإصدار نفسه أو الإصدارات الأحدث. بعد هذا التغيير، أصبح "مجمّع Compose" متوافقًا مع إصدار قديم من "وقت تشغيل Compose" (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 على عمليات الربط هذه.

تم تعديله ليتوافق مع إصدار 1.0.2 من تطبيق Compose. لا يزال الإصدار 1.0.2 من أداة الإنشاء متوافقًا مع الإصدار 1.5.21 من Kotlin.

الإصدار 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 للحصول على مزيد من التفاصيل.

المشاكل المعروفة

  • إذا كنت تستخدم الإصدار 4 من Android Studio Bumblebee Canary أو الإصدار 7.1.0-alpha04/7.1.0-alpha05 من AGP، قد تواجه الخطأ التالي:

      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 على هذه المراجعات.

  • تم إصلاح حالات السباق في SnapshotStateObserver التي كانت تتسبّب في حدوث أخطاء NullPointerExceptions بشكل عشوائي. (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 .... تتّخذ هذه القواعد أحد شكلَين لاستهداف الطرق أو الفئات.

  • سيكون لقاعدة الطريقة النمط التالي:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • وسيكون لنمط قاعدة الفئة الشكل التالي:

    <CLASS_DESCRIPTOR>
    
  • يشير الرمز <FLAGS> إلى حرف واحد أو أكثر من الأحرف H وS وP للإشارة إلى ما إذا كان يجب وضع علامة على هذه الطريقة على أنّها "مهام نشطة" أو "مهام بدء التشغيل" أو "مهام ما بعد بدء التشغيل".

  • <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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • State<T> أصبح الآن State<out T> (I69049)
  • ControlledComposition تغيير في واجهة برمجة التطبيقات لتفعيل إعادة التركيب التغييرات في عملية إعادة تركيب واحدة (Iaafd1، b/184173932)

الإصدار 1.0.0-beta07

18 أيار (مايو) 2021

تم إصدار androidx.compose.runtime:runtime-*:1.0.0-beta07. يحتوي الإصدار 1.0.0-beta07 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة واجهات برمجة تطبيقات جديدة لمحرِّر الإنشاء تتيح إزالة معلومات المصدر التي ينشئها المُحرِّر أثناء تصغير المصدر. (Ia34e6)
  • يعرِض ReusableContent الذي سيحاول إعادة استخدام العقد في محتواه بدلاً من استبدالها عند تغيير المفتاح. عند تغيير المفتاح، يتم تجاهل القيم السابقة في جدول المربّعات للمحتوى باستثناء العقد التي تم إنشاؤها والقيم المستخدَمة لتعديل العقد.

    يُعرِض ReusableComposeNode الذي سيعيد استخدام العقدة المُرسَلة بدلاً من استبدالها كما هو الحال مع ComposeNode. (I1dd86)

  • لم يعُد @ComposeCompilerApi @RequiresOptIn (Iab690)

إصلاح الأخطاء

  • سيحافظ الآن LazyColumn/Row على نشاط ما يصل إلى عنصرَين كانا مرئيَين سابقًا (بدون إزالتهما) حتى بعد الانتقال إلى أعلى الصفحة. يتيح ذلك للمكوّن إعادة استخدام العناصر الفرعية النشطة عندما نحتاج إلى إنشاء عنصر جديد يُحسِّن أداء الانتقال للأعلى أو للأسفل. (Ie5555)

الإصدار 1.0.0-beta06

5 أيار (مايو) 2021

تم إصدار androidx.compose.runtime:runtime-*:1.0.0-beta06. يحتوي الإصدار 1.0.0-beta06 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • لم يعُد @ComposeCompilerApi @RequiresOptIn (Iab690)

الإصدار 1.0.0-beta05

21 نيسان (أبريل) 2021

تم إصدار androidx.compose.runtime:runtime-*:1.0.0-beta05. يحتوي الإصدار 1.0.0-beta05 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة@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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف 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 على هذه المراجعات.

إصلاح الأخطاء

  • فرض قيود على الاستخدام العلني لواجهات برمجة التطبيقات التجريبية (I6aa29 وb/174531520)
  • إصلاح مشكلة عدم عمل الرمز rememberSaveable { mutableStateOf(0) } عند استخدامه داخل وجهة Compose-navigation (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.

تغييرات واجهة برمجة التطبيقات

  • إضافة Recomposer.runRecomposeConcurrentlyAndApplyChanges واجهة برمجة تطبيقات تجريبية لإعادة إنشاء التراكيب التي تم إلغاء صلاحيتها خارج حلقة الإطار الرئيسي (I342d0)
  • يتم الآن التحقّق من أيّ مكونات قابلة للتجميع تم وضع علامة @ReadOnlyComposable عليها في وقت الترجمة للتأكّد من أنّها لا تُجري سوى طلبات إلى مكونات قابلة للتجميع أخرى تحمل العلامة @ReadOnlyComposable (I58961).
  • أصبح الآن استخدام defaultFactory لـ compositionLocalOf و staticCompositionLocalOf مطلوبًا بدلاً من اختياريًا.

    تزيل هذه التغييرات خطأً محتمَلاً في النوع لأنواع غير القابلة للحذف التي لم يتم توفير مصنع تلقائي لها. في السابق، كان هذا الإجراء يؤدي إلى تقديم مرجع فارغ لنوع لا يمكن أن يكون فارغًا.

    بالنسبة إلى الأنواع التي يمكن أن تكون فارغة، ننصحك بتوفير { null } كمصنع التلقائي.

    لا ننصح باستخدام متغيرات محلية مع أنواع غير فارغة ما لم يكن بإمكانك توفير قيمة تلقائية معقولة. إذا لم تتوفّر قيمة تلقائية معقولة، من المفترض أن تُلقي دالة defaultFactory lambda استثناءً. ومع ذلك، فإنّ طرح استثناء يعني أنّ مستخدِمي القيمة المحلية سيكون لديهم تبعية ضمنية لتقديمها لا يفرضها نظام الأنواع. (Ifbd2a)

  • تمت إزالة الرموز المتوقّفة نهائيًا من وقت تشغيل ميزة "الإنشاء" (I3252c).

  • تمت إزالة العنصر emptyContent() الذي تم إيقافه نهائيًا. استخدِم {} بدلاً من ذلك. (Idb33f، b/179432510)

  • تمت إعادة تسمية Providers إلى CompositionLocalProvider.

    • لم يعُد مُنشئ Composition يقبل مَعلمة مفتاح، وتم إيقافه نهائيًا.
    • تم تحويل currentCompositeKeyHash إلى سمة قابلة للتجميع من المستوى الأعلى بدلاً من دالة قابلة للتجميع من المستوى الأعلى.
    • تم نقل CompositionData وCompositionGroup إلى مساحة الاسم androidx.compose.runtime.tooling.
    • تم تحويل ComposableLambda إلى واجهة بدلاً من فئة محدّدة، ولم تعُد تحتوي على مَعلمات أنواع.
    • تم تحويل ComposableLambdaN إلى واجهة بدلاً من فئة محدّدة، ولم تعُد تحتوي على مَعلمات نوع.
    • تم نقل الدالة snapshotFlow إلى مساحة الاسم androidx.compose.runtime.
    • لم تعُد طريقة الدمج في SnapshotMutationPolicy تجريبية.
    • تمت إزالة دالة clearRoots ذات المستوى الأعلى من العلامة @TestOnly. لم تعُد هذه الخطوة ضرورية.
    • تمّت إزالة الدالتَين keySourceInfoOf وresetSourceInfo. لم تعُد هذه الخطوات ضرورية.
    • تمت إزالة Composer.collectKeySourceInformation. لم تعُد هذه الخطوة ضرورية.
    • تمّت إزالة الطُرق isJoinedKey وjoinedKeyLeft وjoinedKeyRight. لم تعُد هذه الخطوات ضرورية.
    • تم نقل واجهات برمجة تطبيقات مختلفة من المستوى الأعلى وإعادة تنظيمها في ملفات مختلفة. بسبب الدلالات المتعلقة بفئة الملفات في Kotlin، سيؤدي ذلك إلى إيقاف التوافق مع الثنائيات ولكن ليس مع المصدر، لذا من المفترض ألا يشكّل ذلك مشكلة لمعظم المستخدمين.
    • (I99b7d، b/177245490)
  • لم تعُد SnapshotStateObserver ميزة تجريبية (Id2e6a)

  • تم حذف بعض واجهات برمجة التطبيقات التي تم إيقافها نهائيًا سابقًا (Ice5da وb/178633932)

  • تم إجراء التغييرات التالية على Material API:

    • تمت إضافة مَعلمة contentPadding إلى Top/BottomAppBar للسماح بتخصيص الحشو التلقائي.
    • تم إعادة ترتيب المَعلمات في BackdropScaffold لاتّباع إرشادات واجهة برمجة التطبيقات بأن تكون المَعلمات المطلوبة قبل المَعلمات الاختيارية.
    • تم نقل المَعلمة icon في BottomNavigationItem لتظهر بعد selected وonClick.
    • تمت إعادة تسمية المَعلمة alwaysShowLabels في BottomNavigationItem إلى alwaysShowLabel.
    • تمت إعادة تسمية مَعلمات bodyContent في بعض المكوّنات إلى content فقط.
    • إعادة ترتيب المَعلمات في ButtonDefaults.buttonColors() يُرجى العِلم أنّه لن يحدث خطأ في الرمز البرمجي لأنّ نوع المَعلمات لم يتغيّر. يُرجى التأكّد من استخدام مَعلمات مُسمّاة أو تعديل الترتيب يدويًا، وإلا لن يعمل الرمز البرمجي بالطريقة نفسها التي كان يعمل بها في السابق.
    • تمت إضافة المَعلمة secondaryVariant إلى darkColors(). يكون هذا اللون عادةً مطابقًا للون secondary في المظهر الداكن، ولكن يتم إضافته للحفاظ على الاتساق وإجراء المزيد من التخصيص.
    • تمت إزالة ElevationDefaults و‎animateElevation()‎ من واجهة برمجة التطبيقات العامة لأنّهما لم يكونا رائجَين أو مفيدين.
    • تمت إعادة تسمية onValueChangeEnd في Slider إلى onValueChangeFinished وجعلتها nullable.
    • تمت إعادة تسمية المَعلمة 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة إمكانية استخدام ViewGroups من UiApplier. تمّت إزالة العناصر المركّبة emitView التي تمّ إيقافها نهائيًا. (Ifb214)
  • تم تغيير اسم CompositionReference إلى CompositionContext (I53fcb)
  • تم نقل ComponentActivity.setContent إلى androidx.activity.compose.setContent في الوحدات androidx.activity:activity-compose. (Icf416)
  • تم تعديل Snapshot API لتكون أكثر اتساقًا مع ارشادات واجهة برمجة التطبيقات، بالإضافة إلى إخفاء فئات التنفيذ الداخلية من واجهة برمجة التطبيقات المتاحة للجميع. (Id9e32)
  • تمت إعادة تسمية الخلفيات المتغيرة لتتطابق مع إعادة تسمية Ambient -> CompositionLocal. كان يُطلق على الخلفيات اسم AmbientFoo، والآن يُطلق على CompositionLocals اسم LocalFoo. (I2d55d)
  • تمت إعادة تسمية Ambient إلى CompositionLocal، وambientOf / staticAmbientOf إلى compositionLocalOf / staticCompositionLocalOf على التوالي. يساعد هذا التغيير في توضيح الغرض من CompositionLocal: آلية لتوفير / استرداد القيم المحلية للتكوين. يجب أن تحتوي نُسخ CompositionLocal على البادئة Local، مثل val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6)
  • تم نقل takeMutableSnapshot وtakeSnapshot ليصبحا من طُرق Snapshot المصاحبة. (I91f19)
  • تم إيقاف @ComposableContract نهائيًا واستبداله بثلاثة تعليقات توضيحية أكثر تحديدًا.

    تم تغيير @ComposableContract(restartable = false) إلى @NonRestartableComposable تم تغيير @ComposableContract(readonly = true) إلى @ReadOnlyComposable تم تغيير @ComposableContract(preventCapture = true) إلى @DisallowComposableCalls تمّت إزالة @ComposableContract(tracked = true). (I60a9d)

  • تم إيقاف الأداتَين emptyContent() و (@Composable () -> Unit).orEmpty() نهائيًا لأنّهما لم تعُد تُحقّق أي تأثير إيجابي في الأداء أو تُضيف أي قيمة (I0484d).

  • لم تعُد الإصدارات snapshotFlow وwithMutableSnapshot تجريبية (I6a45f)

  • يمكن الآن إغلاق أدوات إعادة التركيب. سيواصل مُعادِلو التركيب المغلقين إعادة التركيب إلى أن تكتمل عمليات التشغيل المتعدّد للوظائف غير المتزامنة الفرعية للتركيب. تمت إعادة تسمية Recomposer.shutDown إلى cancel للتمييز بينه وبين close. (Ib6d76)

  • تم إيقاف العنصر compose:runtime-dispatch نهائيًا. يمكن الآن العثور على MonotonicFrameClock في compose:runtime و AndroidUiDispatcher في compose:ui. (Ib5c36)

  • تمّت إعادة صياغة واجهة برمجة التطبيقات التي يستهدفها المكوّن الإضافي لمحرِّر Compose لاستخدام واجهة بدلاً من فئة محدّدة. لم تعُد الواجهة تستخدم أيضًا مَعلمة type.

    هذا تغيير داخلي من المفترض ألا يؤثر في توافق ملف رمز المصدر، ولكنه تغيير يؤدي إلى إيقاف تشغيل الإصدار الثنائي. (I3b922، b/169406779)

  • تمّ تقديم SnapshotMutableState (Icfd03)

  • تمت إعادة تسمية DisposableEffectDisposable إلى DisposaleEffectResult (Ica7c6).

  • تمت إزالة Recomposer.current(). [Abstract]ComposeView الآن تلقائيًا إلى Recomposers التي تم إنشاؤها بشكل كسول على مستوى النافذة ويتم تشغيلها من قِبل ViewTreeLifecycleOwner للنافذة. يتم إيقاف إعادة التركيب وعلامات الصور المتحركة المستندة إلى withFrameNanos مؤقتًا أثناء إيقاف Lifecycle المضيف. (I38e11)

  • يوفّر Recomposer.runningRecomposers الآن مسار StateFlow عالميًا لـ RecomposerInfo للقراءة فقط من أجل مراقبة حالة الإنشاء الجارية في العملية. ننصحك باستخدام واجهة برمجة التطبيقات هذه بدلاً من Recomposer.current() التي تم تجاهلها الآن. (If8ebe)

  • تمت إعادة تسمية DisposableEffectDisposable إلى DisposaleEffectResult (I3ea68).

الإصدار 1.0.0-alpha11

28 كانون الثاني (يناير) 2021

تم إصدار androidx.compose.runtime:runtime-*:1.0.0-alpha11. يحتوي الإصدار 1.0.0-alpha11 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف وظائف onCommit وonDispose وonActive نهائيًا لصالح واجهات برمجة التطبيقات SideEffect وDisposableEffect (If760e).
  • تم إيقاف واجهة برمجة التطبيقات emit()‎ وجميع عمليات التحميل الزائد نهائيًا وتمت إعادة تسميتها إلى ComposeNode. واجهات برمجة التطبيقات متطابقة، ولكنّها تحمل اسمًا مختلفًا فقط لاتّباع اصطلاحات التسمية في Compose (I4137b).
  • تم إيقاف invalidate وcompositionReference() نهائيًا الآن لصالح currentRecomposeScope وrememberCompositionReference على التوالي. (I583a8)
  • يحلّ RememberObserver محلّ CompositionLifecycleObserver ، وقد تم إيقاف CompositionLifecycleObserver نهائيًا.

    RememberObserver هو بديل لمحاولة CompositionLifecycleObserver مع دلالات معدَّلة ومحاولة أساليب تمت إعادة تسميتها. يمكن إجراء عملية التغيير إلى واجهة برمجة التطبيقات الجديدة بشكل آلي للعناصر التي يتم تذكُّرها مرة واحدة فقط، وهي الممارسة المُقترَحة والتي ستظل كذلك. ومع ذلك، إذا تم تذكُّر مرجع أكثر من مرة في تركيبة، يتم استدعاء 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 على هذه المراجعات.

تغيير قد يؤدي إلى حدوث أعطال

  • تسمح إعادة هيكلة واجهة برمجة التطبيقات الخاصة بالمجمِّع الداخلي بجمع التغييرات في العقد التي تم إنشاؤها نتيجةً للتركيب في مرحلة "تطبيق التغييرات" ، بعد اكتمال جميع وظائف @Composable.

    هذا تغيير سلوكي أساسي قد يؤثر في رمز التطبيق لأنّه لم تعُد العقد متاحة من واجهات برمجة التطبيقات الداخلية والتجريبية إلى أن يتم تطبيق التغيُّرات. يمكن عادةً حلّ هذه المشكلة من خلال إحاطة الرمز البرمجي بهذه التبعيات في ملف SideEffect قابل للتركيب لتأجيل تنفيذ الرمز البرمجي إلى ما بعد إنشاء العقد و تهيئةها. (I018da)

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة طريقة لتتبُّع ما إذا كان المُعاد التركيب قد طبَّق تغييرات. (I1b3e2)
  • توسيع نطاق واجهات برمجة التطبيقات [Abstract]ComposeView للسماح بإعادة استخدام المشاهد المستندة إلى Compose، مع التخلص من تركيبتها لإعادة إنشائها مجددًا لاحقًا أضِف واجهات برمجة تطبيقات لتثبيت واكتشاف أدوات إعادة التركيب على مستوى النافذة وCompositionReferences لإنشاء تركيبات فرعية.

    أضِف ViewCompositionStrategy لضبط استراتيجية التخلص من التركيب في [Abstract]ComposeViews. السلوك التلقائي هو التخلص عند فصل النافذة. (I860ab)

إصلاح الأخطاء

  • يعرض تطبيق 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة SlotTable وSlotReader و SlotWriter من واجهة برمجة التطبيقات المتاحة للجميع. كانت هذه الواجهتَان تحملان سابقًا الاسم InternalComposeAPI. وهي الآن داخلية لوحدة الإنشاء.

    تمّت إضافة CompositionData وCompositionGroup كبديلين لواجهة برمجة التطبيقات ui-tooling API لاستخدامهما في استخراج معلومات التركيب. هذه الواجهات برمجة تطبيقات عامة، ولكنّها ليست مخصّصة للاستخدام خارج واجهة برمجة التطبيقات ui-tooling API لأنّها توفّر المعلومات الأولية التي تفسّرها واجهة برمجة التطبيقات ui-tooling API (I31a9c).

  • لم تعُد فئة Applier تُعتبر (Id85b0).

  • تم تغيير واجهة Applier لتبسيط إنشاء الأشجار من الأسفل إلى الأعلى بدلاً من الأعلى إلى الأسفل.

    تمت إعادة تسمية الطريقة insert() ليصبح اسمها insertTopDown().

    تمت إضافة طريقة جديدة، وهي insertBottomUp().

    يُدخل مُطبِّق العقد في الشجرة التي يعدّلها باستخدام insertTopDown() أو insertBottomUp()، وذلك استنادًا إلى الإجراء الذي يحقّق أداءً أفضل.

    إنّ بعض الأشجار، مثل LayoutNode وView، تكون أكثر فعالية عند إنشائها من أسفل إلى أعلى مقارنةً من أعلى إلى أسفل. قبل هذا التغيير، كان مطلوبًا استخدام حزمة من عمليات الإدراج لتنفيذ الإجراء من الأسفل إلى الأعلى، وكان يجب نسخها إلى كلّ أداة تطبيق تحتاج إلى الإنشاء من الأسفل إلى الأعلى لتحسين الأداء. من خلال هذا التغيير، يتم استبدال Applier بـ insertBottomUp() لإنشاء شجرة من الأسفل إلى الأعلى، insertTopDown() لإنشاء الشجرة من الأعلى إلى الأسفل. (Icbdc2)

  • تتيح ميزة "الإنشاء" الحصول على سمات يمكنها إجراء عمليات استدعاء قابلة للتركيب. لن يتم إيقاف هذه الميزة، ولكن سيتم تغيير بنية تعريف دالة الحصول على خاصية على أنّها @Composable.

    وكانت البنية المتوقّفة نهائيًا لإجراء ذلك هي إضافة تعليقات توضيحية إلى الموقع نفسه:

        @Composable val someProperty: Int get() = ...
    

    إنّ بنية الجملة الصحيحة لتنفيذ ذلك الآن هي من خلال إضافة تعليق توضيحي إلى دالة الحصول على السمة:

       val someProperty: Int @Composable get() = ...
    

    سيعمل كلا الأسلوبَين لبعض الوقت، ولكن سيؤدي أسلوب الربط السابق المتوقف إلى ظهور خطأ في الترجمة في النهاية. (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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة فحص أخطاء لأسماء مَعلمات lambda القابلة للتركيب وموقعها، وذلك للتحقّق من اتّساقها مع إرشادات Compose. تم أيضًا نقل بعض واجهات برمجة التطبيقات التي تستخدم children كاسم لدالة lambda اللاحقة إلى content، وفقًا لفحص الأخطاء الإملائية والإرشادات. (Iec48e)
  • لم تعُد أداة Recomposer تقبل سياق EmbeddingContext، ويتم الحصول على التبعيات المطلوبة لجدولة المهام من effectCoroutineContext. تم إيقاف FrameManager نهائيًا، ويجب أن تبدأ عمليات دمج المنصات في التعامل مع اللقطات الشاملة الخاصة بها. (I02369)
  • تمت إعادة تسمية الدالة RestorableStateHolder.withRestorableState إلى RestorableStateProvider (I66640)

إصلاح الأخطاء

  • تم إيقاف الخلفيات المُدمجة نهائيًا التي تحمل Ambient كلاحقة، وتم استبدالها بخصائص جديدة مسبوقة بـ Ambient، وذلك باتّباع إرشادات الخلفيات المُدمجة وCompose API الأخرى. (I33440)
  • إزالة وحدة اختبار واجهة المستخدم القديمة ووحداتها النموذجية (I3a7cb)

الإصدار 1.0.0-alpha07

11 تشرين الثاني (نوفمبر) 2020

تم إصدار androidx.compose.runtime:runtime-*:1.0.0-alpha07. يحتوي الإصدار 1.0.0-alpha07 على هذه المراجعات.

الميزات الجديدة

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف التعليق التوضيحي @UnionType نهائيًا (I57cde)
  • تمت إضافة provideDefault كبديل لتقديم قيم الإضاءة المحيطة، ويمكن استخدامها لتحديد قيم الإضاءة المحيطة التي لن يتم ضبطها إلا في حال عدم توفّر قيمة الإضاءة المحيطة. (Id6635، b/171024925)
  • تمت إعادة تسمية LaunchedTask إلى LaunchedEffect للحفاظ على الاتساق مع واجهات برمجة التطبيقات SideEffect وDisposableEffect. لا يُسمح باستخدام LaunchedEffect بدونparam subject لتعزيز أفضل الممارسات. (Ifd3d4)
  • يتضمّن "المُطبِّق" الآن وظيفتَي الاستدعاء onBeginChanges/onEndChanges اللتين يتمّ استدعاؤهما عندما يبدأ "المُنشئ" تطبيق التغييرات على الشجرة أو ينتهي منها. ويمكن استخدامها لتجميع إدارة الموارد إذا لزم الأمر. (Icf476)
  • يتطلب Recomposer الآن CoroutineContext عند الإنشاء (Ic4610)
  • تغييرات على طريقة تنفيذ SlotTable الداخلية التي من المفترض ألا تؤثّر في واجهة برمجة التطبيقات العامة (If9828)
  • تمت إزالة محولات rxjava2 المتوقّفة نهائيًا والتي لا تأخذ القيمة الأولية (Idb72f).

إصلاح الأخطاء

  • تم إيقاف عنصر foundation.Text نهائيًا واستبداله بعنصر material.Text. للحصول على واجهة برمجة تطبيقات نصية أساسية لا تتضمّن أي آراء ولا تستخدِم قيمًا من مظهر، اطّلِع على androidx.compose.foundation.BasicText. (If64cb)
  • تم إيقاف BaseTextField نهائيًا. استخدِم BasicTextField بدلاً من ذلك. (I896eb)
  • تم نقل العديد من الرموز ذات الصلة بالتصميم من androidx.compose.ui إلى androidx.compose.layout.ui. (I0fa98، b/170475424)

المساهمة الخارجية

  • تمت إضافة وحدة runtime-rxjava3 لإنشاء الرسائل. مشابه لـ runtime-rxjava2 (I02cbf)

الإصدار 1.0.0-alpha06

28 تشرين الأول (أكتوبر) 2020

تم إصدار androidx.compose.runtime:runtime-*:1.0.0-alpha06. يحتوي الإصدار 1.0.0-alpha06 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • أصبح Recomposer الآن عنصر CompositionReference وأحد عناصر التكوين صالحة. أصبح استخدام ميزة "إعادة التركيب الصريح" مطلوبًا الآن في عدد أقل من الأماكن. (I4036f)
  • تمت إضافة واجهة برمجة التطبيقات الخاصة بـ DisposableEffect إلى SideEffect، ما يؤدي إلى إشغال دور onCommit-with-params ولكن مع إضافة onDispose المطلوبة.
    • تمت إضافة واجهة برمجة التطبيقات rememberUpdatedState لنشر البيانات من عملية إعادة التركيب إلى العمليات الجارية أو التي تستمر لفترة طويلة، مثل DisposableEffects أو LaunchedTasks.
    • (Id50b9)
  • ينفذ MutableVector الآن RandomAccess (I85d73، b/170461551)
  • تمت إضافة SideEffect composable لتطبيق الآثار الجانبية للتركيب على الكائنات التي تديرها التركيبة. يهدف SideEffect إلى استبدال العنصر القابل للتجميع onCommit. (Ia77c2)
  • واجهة برمجة التطبيقات التجريبية الجديدة RestorableStateHolder يسمح هذا الإجراء بحفظ الحالة المحدّدة باستخدام [savedInstanceState] و[rememberSavedInstanceState] للفرع الفرعي قبل التخلص منه لكي يصبح من الممكن إعادة إنشائه في المرة القادمة باستخدام الحالة التي تمّت إعادتها. (I66884، b/166586419)

إصلاح الأخطاء

  • فعِّل الانتقالات في ComposeTestRule، وأزِل خيار تفعيل المؤشر المتمايل من ComposeTestRule. (If0de3)

الإصدار 1.0.0-alpha05

14 تشرين الأول (أكتوبر) 2020

تم إصدار androidx.compose.runtime:runtime-*:1.0.0-alpha05. يحتوي الإصدار 1.0.0-alpha05 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • الإصدار التجريبي من Modifier.pointerInput يوقف مؤقتًا مُعدِّل الإدخال (Ia77d2)
  • تم تحسين أداء الانتقال للأعلى أو للأسفل في LazyColumn/Row من خلال إنجاز عمل أقل في التركيب الفرعي عند كل عملية انتقال. تمت إضافة الطريقة الجديدة hasInvalidations() لفئة Composition. تمت إعادة تسمية الطريقة hasPendingChanges() من Recomposer إلى hasInvalidations() (Ib2f32 وb/168293643 وb/167972292 وb/165028371)
  • إضافة واجهة برمجة التطبيقات 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة OwnerScope للسماح بجمع نطاقات ملاحظات ملف الالتقاط ورسم المخططات بعد أن تصبح غير صالحة. (Ic4cf8)
  • تمت إضافة واجهة برمجة التطبيقات derivedStateOf لإنشاء عناصر State استنادًا إلى عملية حسابية قد تقرأ عناصر State أخرى (أو تستنبط منها) (If758b).
  • تمت إضافة واجهة برمجة تطبيقات TestOnly لواجهة 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • لم تعُد CompositionCoroutineScope تنفِّذ MonotonicFrameClock. يجب أن يستورد المُطلِبون لـ withFrameNanos الدالة ذات المستوى الأعلى صراحةً. (Icb642، b/166778123)

إصلاح الأخطاء

  • تم الآن إيقاف دوال الاختبار الشاملة، مثل onNode أو waitForIdle، نهائيًا، يُرجى نقل البيانات إلى نظيراتها الجديدة التي تم تحديدها في ComposeTestRule (I7f45a).
  • لم يعُد launchInComposition يطلق وظائف الكوروتين غير المُرسَلة (Ief6af، b/166486000).

الإصدار 1.0.0-alpha02

2 أيلول (سبتمبر) 2020

تم إصدار androidx.compose.runtime:runtime-*:1.0.0-alpha02. يحتوي الإصدار 1.0.0-alpha02 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • أضِف واجهات برمجة التطبيقات snapshotFlow وwithMutableSnapshot لاستخدام وإنشاء تغييرات في بيانات "الملخّص". (I3e722)
  • لقد تغيّرت اصطلاحات استدعاء الدوالّ القابلة للتجميع. هذا تغيير يؤدي إلى إيقاف الإصدار الثنائي. يجب مجددًا compiling جميع المكتبات للعمل مع هذا الإصدار من المكوّن الإضافي لمحرِّر الترجمة.

    لا يؤدي هذا التغيير إلى إنشاء تغيير ينطبق على مستوى المصدر، لأنّه لم يتم تغيير سوى واجهات برمجة التطبيقات الخاصة بالمنشئ التي تم تفعيلها بوضوح. (I7afd2، b/158123185)

  • تمّت إزالة طرق الجدولة من EmbeddingContext (I7b9be)

  • تم إيقاف الإجراء onPreCommit نهائيًا، وأصبح الإجراء onCommit ينفِّذ الآن سلوك onPreCommit.

    يتم الآن تشغيل onCommit وonActive في إطار العارض نفسه الذي يتم فيه تنفيذ التغيُّرات في التركيب بدلاً من بداية إطار العارض التالي. (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 على عمليات الربط هذه.

تغييرات واجهة برمجة التطبيقات

  • يمكن الآن لعمليات البث المخصّصة أن تحدّد أنّه يمكن تخطّي واحد أو أكثر من أدوات الضبط وإعادة تركيبها بشكل مستقل عن عملية البث. (Ibbd13)
  • تمت إزالة طلبات FrameManager المتوقّفة نهائيًا.

    تم تغيير واجهات برمجة التطبيقات الداخلية لإنشاء المحتوى من أجل تقليل مقدار الوقت المستغرَق لتتبُّع عناصر الحالة، مثل mutableStateof() (I80ba6).

  • تم إيقاف العنصر القابل للتجميع state { ... } نهائيًا، وأصبح من الأفضل استخدام طلبات صريحة لremember { mutableStateOf(...) } من أجل الوضوح. ويؤدي ذلك إلى تقليل مساحة عرض واجهة برمجة التطبيقات الإجمالية وعدد المفاهيم المتعلّقة بإدارة الحالة، كما يتطابق مع نمط by mutableStateOf() لمنح إذن الوصول إلى سمة الخطوة. (Ia5727)

  • يحدِّد Flow.collectAsState الآن أداة التوجيه التلقائية من التركيبة نفسها بدلاً من الضبط التلقائي على Dispatchers.Main. (I9c1d9)

  • تم إصلاح مشكلة تعطُّل التطبيق عند استخدام شيء يحفظ الحالة داخل حلقة for. أصبح من المسموح به الآن استخدام المفتاح نفسه في savedInstanceState()، وتم تعديل واجهة برمجة التطبيقات الخاصة بـ UiSavedStateRegistry لتلبية هذا الشرط الجديد (I4ab76 وb/160042650 وb/156853976 وb/159026663 وb/154920561).

إصلاح الأخطاء

  • تم إيقاف emitView نهائيًا. استخدِم AndroidView بدلاً من ذلك إن أمكن لعرض المشاهد داخل 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 على هذه المراجعات.

تغييرات واجهة برمجة التطبيقات

  • تم تغيير سياسة الطفرة التلقائية في 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 لسد الفجوة بين الساعات الجديدة المستندة إلى وحدات معالجة المهام المتزامنة وواجهات برمجة التطبيقات التي لا تزال تستخدم الساعات القديمة المستندة إلى callback.

    أصبح العنصر ManualFrameClock هو العنصر المكافئ لعنصر MonotonicFrameClock في ManualAnimationClock. (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 لتسهيل اكتشاف واستخدام أبسط واجهة برمجة تطبيقات مطلوبة (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 على هذه المراجعات.

تعديل التبعيات

  • لاستخدام الإصدار 0.1.0-dev15 من Compose، عليك تعديل التبعيات وفقًا لمقتطفات الرموز الجديدة الموضّحة أعلاه في تعريف التبعيات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف التعليق التوضيحي @Model نهائيًا. استخدِم state وmutableStateOf كبدائل. تم اتخاذ قرار إيقاف هذه الميزة نهائيًا بعد الكثير من المناقشات الدقيقة.

    السبب

    ويشمل ذلك على سبيل المثال لا الحصر:

    • تقليل مساحة عرض واجهة برمجة التطبيقات والمفاهيم التي نحتاج إلى تدريسها
    • تتوافق بشكلٍ أكبر مع مجموعات الأدوات المشابهة الأخرى (Swift UI وReact وFlutter)
    • قرار قابل للتراجع يمكننا إعادة عرض @Model لاحقًا.
    • إزالة حالات الاستخدام الخاصة وإزالة الأسئلة الصعبة الإجابة حول ضبط @Model كأشياء يجب التعامل معها
    • فئات بيانات @Model، وequals، وhashcode، وما إلى ذلك
    • كيف يمكنني "مراقبة" بعض المواقع الإلكترونية وعدم مراقبة أخرى؟
    • كيف يمكنني تحديد المساواة الهيكلية مقابل المساواة المرجعية لاستخدامها في الملاحظة؟
    • تقليل "السحر" في النظام سيقلّل ذلك من احتمالية افتراض أحد الأشخاص أنّ النظام أكثر ذكاءً مما هو عليه (أي أنّه يعرف كيفية المقارنة بين قائمتين).
    • تجعل درجة دقة المراقبة أكثر سهولة.
    • تحسين قابلية إعادة التنظيم من المتغيّر -> السمة في الصف
    • قد تفتح فرصًا لإجراء تحسينات مخصّصة يدويًا حسب الولاية
    • تتوافق بشكلٍ وثيق مع بقية المنظومة المتكاملة وتقلل من الغموض بشأن الحالة الثابتة أو "تقبُّلنا للحالة المتغيّرة"

    ملاحظات حول نقل البيانات

    يمكن تحويل جميع استخدامات @Model الحالية تقريبًا بسهولة باستخدام إحدى الطريقتَين التاليتَين: يتضمّن المثال أدناه فئة @Model تتضمّن سمتَين فقط لأغراض العرض، ويتم استخدامها في عنصر قابل للتجميع.

    @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 التي تتيح لك إنشاء نُسخ من 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. من المفترض ألّا يحتاج معظم مستخدمي ميزة "الإنشاء" إلى تعديل أي رمز نتيجةً لهذا التغيير.

    ولتفعيل هذا الإجراء، تم تغيير توقيع JVM لجميع الدوال القابلة للتجميع. يتم تحويل دالة قابلة للتجميع تقبل مَعلمة واحدة إلى دالة تقبل 3 مَعلمات، والمَعلمات الإضافية هي "المُنشئ"، وهو عدد صحيح "مفتاح"، وعدد صحيح لقناع بتات يُستخدَم لنشر البيانات الوصفية من خلال طلبات البيانات.

    تعمل ميزة "الإنشاء" الآن أيضًا على تحويل الوسيطات التلقائية إلى دالة قابلة للإنشاء. ويتم ذلك بدون إدخال حمولة زائدة تلقائية اصطناعية إضافية للدالة نفسها، لذا سيؤدي هذا التغيير إلى تحديد عدد أقل من الدوالّ.

    التغييرات السلوكية المتعمّدة المعروفة الناتجة عن ذلك:

    1. سيتم تخطّي بعض المكالمات التي لم يكن من الممكن تخطّيها في السابق
    2. تم الآن الاشتراك في التعبيرات القابلة للتجميع في تعبيرات الوسيطة التلقائية ومعالجتها بشكل صحيح.

    شمل هذا العمل بعض التحسينات: 1. يتم نشر نتيجة مقارنات المَعلمات من خلال مخطّط استدعاء الدوال إلى الدوال الأخرى القابلة للتجميع. سيؤدي ذلك إلى إجراء عدد أقل من المقارنات أثناء التشغيل، وإلى تقليل حجم جدول الفتحات، بالإضافة إلى زيادة عدد عمليات تخطّي الدوالّ القابلة للتجميع التي لم يتم تخطّيها في السابق 2. لا تتمّ مقارنة المَعلمات التي يتمّ تحديدها على أنّها "ثابتة" في وقت الترجمة أو تخزينها في وقت التشغيل. ويؤدي ذلك إلى تقليل عدد المقارنات وحجم جدول الفتحات. 3- يتم استخدام بنية تدفّق التحكّم في نص الدوالّ لتقليل عدد المجموعات التي يتم إنشاؤها. ويؤدي ذلك إلى تقليل حجم جدول الفتحات ويؤدي إلى تقليل العمل الذي يُجريه وقت التشغيل 4. لا يتم تضمين مَعلمات الإرسال والمُستلِم غير المستخدَمة في الدوالّ عند تحديد إمكانية تخطّي الدالة إذا لم يتم استخدامها داخل نص الدالة.

    كانت معظم التغييرات الأساسية متعلقة بواجهات برمجة التطبيقات التي يستهدفها المُجمِّع مباشرةً، ولن يتأثر الاستخدام المعتاد لـ compose: 1. تمت إزالة Composer::startExpr 2. تمت إزالة Composer::endExpr 3. تم إيقاف Composer::call نهائيًا 4. تمت إزالة طرق العرض الزائدة key التي لا تتضمّن متغيرات عددية متغيرة. استخدِم الإصدار vararg من الآن فصاعدًا. 5. تم إيقاف التعليق التوضيحي "المحوري" نهائيًا. استخدِم key كبديل. 6. تم تغيير ScopeUpdateScope::updateScope لتوقع Function3 بدلاً من Function1 7. تم تعديل restartableFunction وrestartableFunctionN لتضمين مَعلمات إضافية في وقت الترجمة (I60756، b/143464846)

  • تمت إضافة sortWith وremoveRange إلى MutableVector (Icccf7)

  • تمت إضافة عمليات تنفيذ الطريقة التلقائية لسمة CompositionLifecycleObserver (I24289)

  • يتطلب "المُطبِّق" الآن استخدام طريقة clear() للتخلص من التراكيب (Ibe697).

  • تمت إضافة asMutableList() إلى MutableVector للسماح بتمرير العنصر إلى واجهة برمجة التطبيقات العامة بدون الحاجة إلى نسخ العنصر الكلّي. (I298df)

  • تمت إضافة rememberCoroutineScope() للحصول على ملف ‎rememberCoroutineScope مُدار في التركيب لبدء المهام استجابةً للأحداث. (I0e264)

  • MutableVector هي مجموعة جديدة لا تُنفِّذ أيًا من واجهة Collection العادية. توفّر هذه المجموعة سرعة أعلى من المتطلبات الأخرى، وهي مخصّصة للاستخدام في عمليات التنفيذ الداخلية فقط. (I8ebd6)

  • تمت إزالة StableMutableList وStableMutableMap مؤقتًا لتجنُّب مشكلة في إصدار Kotlin compose المطلوب. ستتم إعادة طرح هذه الواجهات بعد تحديث أداة Compose إلى إصدار Kotlin لا يتضمّن المشكلة.

    أصبحت SnapshotStateList وSnapshotStateMap علنية الآن، ولكن سيتم إيقافهما نهائيًا بعد استعادة StableMutableList وStableMutableMap. (Ia7769)

  • إضافة الدالة withFrameNanos من المستوى الأعلى لتحديد توقيت الصور المتحركة (Ie34c5)

  • تم إيقاف التعليق التوضيحي @Untracked نهائيًا. استبدِل ذلك بـ @ComposableContract(tracked=false) (Id211e)

  • تمت إعادة تسمية RestartableFunction وواجهات برمجة التطبيقات المرتبطة بها إلى ComposableLambda، وما إلى ذلك. كان المُجمِّع يستهدف واجهات برمجة التطبيقات هذه فقط، لذا من المفترض ألا يؤثّر ذلك في التوافق على مستوى المصدر بشكلٍ طبيعي. تم إجراء عملية إعادة التسمية بشكل أساسي للإشارة إلى ما يجعل هذه الفئة أفضل عند ظهورها في عمليات تتبُّع تسلسل استدعاء الدوال البرمجية (I7eb25).

  • لم يعُد التعليق التوضيحي @Composable صالحًا في الصفوف (Ia5f02)

  • أصبح Ambient<T> الآن @Stable بدلاً من @Immutable (I0b4bb).

  • قبل إجراء هذا التغيير، كان المكوّن الإضافي لمحرِّر Compose يعرقل بشكلٍ غير بسيط طلبات إنشاء العناصر داخل دالة @Composable في حال توفّر (I5205a، b/158123804)

  • لم تعُد ميزة Recompose composable عنصرًا مجردًا مفيدًا. من المفترض أن تحدث معظم عمليات إعادة التركيب نتيجة عمليات تعيين MutableState. لأيّ شيء آخر، ننصحك باستخدام الدالة invalidate لإعادة تكوين النطاق الحالي. (Ifc992)

  • لم تعُد مراقبة الأداء عملية مجردة مفيدة. إذا كنت بحاجة إلى تكرار ذلك، يمكن تكرار تنفيذه من خلال إنشاء دالة قابلة للتجميع تُنفِّذ مَعلمة lambda قابلة للتجميع. على سبيل المثال، @Composable fun Observe(body: @Composable () -> Unit) = body() (I40d37)

  • تم إيقاف الرمز البرمجي @Direct نهائيًا واستبداله بالرمز البرمجي @ComposableContract(restartable=false) (If4708)

  • تمت إضافة محوِّل لواجهة برمجة التطبيقات StateFlow التي تم طرحها مؤخرًا، ما يتيح لنا تعبئة القيمة الأولية مسبقًا حتى تكون الحالة المعروضة غير فارغة (I61dd8، b/156233789).

  • تمت إضافة محوِّل لتطبيق Flow. مثال على الاستخدام: val value by flow.collectAsState()‎ (If2198, b/153375923)

  • [قابلة للتغيير]تم نقل عوامل تشغيل تفويض حالة العنصر إلى الإضافات لإتاحة تحسينات تفويض العناصر في Kotlin 1.4. على المتصلين إضافة عمليات الاستيراد لمواصلة استخدام by state { ... } أو by mutableStateOf(...). (I5312c)

  • تم نقل androidx.compose.ViewComposer إلى androidx.ui.node.UiComposer تمت إزالة androidx.compose.Emittable. كان هذا العنصر متكررًا مع ComponentNode. تمت إزالة androidx.compose.ViewAdapters. لم تعُد هذه الحالات من حالات الاستخدام المتوافقة. تم إيقاف Compose.composeInto نهائيًا. استخدِم setContent أو setViewContent بدلاً من ذلك. تم إيقاف Compose.disposeComposition نهائيًا. استخدِم طريقة dispose على Composition التي تم إرجاعها بواسطة setContent بدلاً من ذلك. تم نقل androidx.compose.Compose.subcomposeInto إلى androidx.ui.core.subcomposeInto تم تغيير اسم ComponentNode#emitInsertAt إلى ComponentNode#insertAt تم تغيير اسم ComponentNode#emitRemoveAt إلى ComponentNode#removeAt تم تغيير اسم ComponentNode#emitMode إلى ComponentNode#move (Idef00)

  • تم تعديل العلامة ComposeFlags.COMPOSER_PARAM لتصبح true، ما سيؤدي إلى تغيير استراتيجية إنشاء الرموز البرمجية لمكوّن الإنشاء الإضافي. على مستوى عالٍ، يؤدي ذلك إلى إنشاء دوالّ @Composable باستخدام مَعلمة اصطناعية إضافية، ويتم تمريرها إلى عمليات استدعاء @Composable اللاحقة لكي يتمكّن وقت التشغيل من إدارة التنفيذ بشكلٍ سليم. هذا تغيير مهمّ يتسبب في إيقاف الإصدار الثنائي، ولكن من المفترض أن يحافظ على التوافق على مستوى المصدر في جميع حالات استخدام compose المسموح بها. (I7971c)

  • تغييرات جذرية في واجهة برمجة التطبيقات Ambients API اطّلِع على السجلّات ومستندات Ambient<T> للحصول على التفاصيل (I4c7ee، b/143769776).

  • تمت إضافة ui-livedata، وهو عنصر جديد يتضمّن محوّلًا لـ LiveData. مثال على الاستخدام: val value by liveData.observeAsState() (Ie9e8c, b/150465596)

  • تم إيقاف محولات Rx التي لا تحتوي على قيمة أولية صريحة نهائيًا. لا يكون استخدام القيمة null هو الإعداد التلقائي الأفضل في جميع الأوقات. على سبيل المثال، عندما يكون لديك قائمة، من الأفضل البدء باستخدام emptyList() أو أيّ إعداد تلقائي معقول آخر (I00025 أو b/161348384).

  • تمت إضافة ui-rxjava2، وهو عنصر جديد يتضمّن محولات لـ RxJava2. مثال على الاستخدام: val value by observable.subscribeAsState() (Ifab4b, b/153369097)

  • يمكن الآن استخدام savedInstanceState() مع الأنواع التي يمكن أن تكون فارغة (I6847f وb/153532190).

  • دالة listSaver()‎ وmapSaver()‎ الجديدة لتسهيل كتابة عناصر Saver المخصّصة (I8cf68، b/152331508)

  • دوالّ جديدة: savedInstanceState() وrememberSavedInstanceState()، وهما مشابهتان لدالةَي state() وremember()، ولكنهما تتضمّنان ميزة مدمجة تتيح حفظ حالة العنصر (If1987، b/152025209)

إصلاح الأخطاء

  • تمت إعادة تسمية runOnIdleCompose إلى runOnIdle (I83607)
  • تمّت إتاحة واجهة برمجة التطبيقات التجريبية LayoutNode (I4f2e9)
  • تم إيقاف androidx.ui.foundation.TextFieldValue و androidx.ui.input.EditorValue نهائيًا. إنّ العناصر المركبة TextField وFilledTextField وCoreTextField التي تستخدم هذا النوع متوقّفة نهائيًا أيضًا. يُرجى استخدام androidx.ui.input.TextFieldValue بدلاً من ذلك (I4066d، b/155211005).
  • تمت إزالة واجهة برمجة التطبيقات DrawBackground API المتوقّفة نهائيًا لصالح واجهات برمجة تطبيقات إضافة drawBackground API في "المعدِّل". تمّت إعادة صياغة تنفيذات drawBackground لللون والفرشاة والطلاء بهدف تقليل مسارات الرموز البرمجية، بالإضافة إلى إزالة شرط إنشاء Modifier كجزء من التركيب. (I0343a)
  • تم تعديل واجهات برمجة التطبيقات التي تُنشئ رسومًا أكبر حجمًا لتعرض Canvas بدلاً من CanvasScope. ويؤدي ذلك إلى عدم إلزام المستهلكين بصيانة عناصر Paint الخاصة بهم. بالنسبة إلى المستهلكين الذين يحتاجون إلى الوصول إلى Canvas ، يمكنهم استخدام أسلوب drawCanvas الإضافة الذي يقدّم طلبًا للرجوع لإصدار رسومات باستخدام Canvas الأساسية. (I80afd)
  • تم تغيير واجهة برمجة التطبيقات lambda التي تلي WithConstraints. والآن، بدلاً من مَعلمتَين، يحتوي على نطاق مستلِم يقدّم، بالإضافة إلى القيود و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 خارج Row وColumn. (I3a641)
  • تمت إعادة تسمية LayoutFlexible إلى LayoutWeight. تمت إعادة تسمية المَعلمة tight إلى fill. (If4738)
  • تلقّى WithConstraints مَعلمة LayoutDirection‏ (I6d6f7)
  • تمت إعادة تسمية الخلفية إلى DrawBackground وجعلها محفوظة تلقائيًا (Ia0bd3)
  • تم استبدال ButtonStyle بوظائف مختلفة وإزالة التحميل الزائد للنص (السلسلة). اطّلِع على العيّنات المعدَّلة للحصول على معلومات الاستخدام. (If63ab وb/146478620 وb/146482131)
  • أصبحت runOnIdleCompose وrunOnUiThread الآن دالة كليتين بدلاً من طريقتَين في ComposeTestRule. (Icbe8f)

المساهمة الخارجية

  • إزالة واجهات برمجة التطبيقات غير المطلوبة، مثل Looper وHandler من طبقة نقل Compose Runtime (I6847d)
  • إيقاف Flow<T>.collectAsState() نهائيًا بدون قيمة أولية استخدِم StateFlow<T> أو نقْل قيمة أولية صريحة بدلاً من ذلك. (I63f98، b/157674865)