بيئة تشغيل Compose
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(اطّلِع على مستندات مرجع واجهة برمجة التطبيقات لجميع حِزم compose)
آخر تعديل | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار التجريبي الأول |
---|---|---|---|---|
13 تشرين الثاني (نوفمبر) 2024 | 1.7.5 | - | - | 1.8.0-alpha06 |
البنية
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-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)
إصلاح الأخطاء
- تم إصلاح
providesDefault
لprovides
واحد. (aosp/3318540 b/374263387) - تحسين
ChangeList
(3318538)
الإصدار 1.8.0-alpha05
30 تشرين الأول (أكتوبر) 2024
تم إصدار androidx.compose.runtime:runtime-*:1.8.0-alpha05
. يتضمّن الإصدار 1.8.0-alpha05 عمليات الربط هذه.
إصلاح الأخطاء
- إصلاح مشكلة "تعذُّر معالجة البيانات" عند إضافة
Int.MAX_VALUE
إلىSnapshotIdSet
(b/370536104، Ic4179f6) - التحسينات الدقيقة في وقت التشغيل (I50c60)
- السماح لرموز R8 بإزالة طلبات 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.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)
- Optimize
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 على هذه المراجعات.
ميزات جديدة وتحسينات على الأداء
- Optimize
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 - أضِف المجموعات المطلوبة في نص الدوالّ غير القابلة للتخطّي 7d06752.
- تحسين خصائص مرجع الذاكرة لحالة "اللقطة" 93fcae8
- إزالة الحظر في عمليات البحث المحلية للتركيب 0875717
- استخدِم المفتاح الصحيح لمجموعات العقد غير القابلة لإعادة الاستخدام 6388d8d.
- حماية
SnapshotStateObserver
من عمليات التطبيق المتكررة والمتزامنة 98cb6ba - تمت إضافة عملية التحقّق من حدود الفهرس في طريقة
IdentityArraySet
"get" 35a77d3 - تعديل وحدة إنشاء الرسائل لاستخدام إضافات
ViewTreeLifecycleOwner
21c2122 - إرسال إشعارات التطبيق بعد انتهاء "أداة إعادة التركيب" من إنشاء اللقطة 98f2641
- إصلاح تعطُّل الفهرس خارج الحدود عند إلغاء إعادة التركيب 8f8656f
- فرض إعادة التركيب دائمًا إذا تغيّر مقدّمو المحتوى الرئيسيون للتركيب 9526fcc
- حدّ التسامح في إعادة التركيب للمهام المُلغاة a55f7ed
- تحسين معالجة حالات عدم الصلاحية لعدد كبير من الملحنين 9b7ed67
- إصلاح مشكلة إنشاء مجموعات الإغلاق للإرجاع غير المحلي b6f590c
الإصدار 1.4.0-rc01
8 آذار (مارس) 2023
تم إصدار androidx.compose.runtime:runtime-*:1.4.0-rc01
. يحتوي الإصدار 1.4.0-rc01 على هذه المراجعات.
إصلاح الأخطاء
الإصدار 1.4.0-beta02
22 شباط (فبراير) 2023
تم إصدار androidx.compose.runtime:runtime:1.4.0-beta02
وandroidx.compose.runtime:runtime-saveable:1.4.0-beta02
. يحتوي الإصدار 1.4.0-beta02 على هذه المراجعات.
الإصدار 1.4.0-beta01
8 شباط (فبراير) 2023
تم إصدار androidx.compose.runtime:runtime-*:1.4.0-beta01
. يحتوي الإصدار 1.4.0-beta01 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة
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
التعامل مع الاستثناءات / دعم ميزة "التعديل المباشر"
- لتقديم ميزة التعديل المباشر بشكل أفضل، تمت إضافة واجهات برمجة التطبيقات لتفعيل معالجة الاستثناءات أثناء الإنشاء.
- معالجة أخطاء التركيب لميزة "إعادة التحميل السريع"
- معالجة أخطاء التعديل المباشر عند الحفظ أو الاستعادة
تتبُّع المحتوى
- تمت إضافة واجهات برمجة التطبيقات لتتبُّع وقت التشغيل من أجل إتاحة استخدام أدوات تتبُّع التركيبات الجديدة.
- إنشاء طلبات بدء/إنهاء أحداث التتبّع القابلة للتجميع
- تمت إعادة إضافة ComposerKt.traceEventStart(Int, String)
Composable Reflection APIs
- تمت إضافة واجهة برمجة تطبيقات
ComposableMethod
جديدة للسماح بطلبات استدعاء أكثر موثوقية لواجهات برمجة التطبيقات القابلة للتجميع استنادًا إلى ميزة "العرض المرجعي". - نقل invokeComposable لإنشاء وقت التشغيل
- إعادة صياغة واجهة برمجة التطبيقات لاستدعاء طريقة قابلة للتجميع
الإصلاحات المتعلقة بوقت التشغيل
- إصلاح اختبار النطاق الذي يتضمّن أخطاء في جدول الفتحات للتحقّق من العلامات
- السماح بنقل المحتوى القابل للنقل إلى SubcomposeLayout والخروج منه
- إصلاح مشكلة نقل المحتوى إلى محتوى جديد في تركيبة فرعية
نظام اللقطات
- تم إجراء تحسينات متنوعة على نظام اللقطات في ما يتعلّق بإدارة الذاكرة والأداء وصحة البيانات.
- تحسين إزالة النطاق في SnapshotStateObserver
- التخلص من اللقطات المُدمجة التي تم إنشاؤها من لقطات شفافة
- تم إصلاح مشكلة تعارض العمليات عند قراءة الحالة من اللقطة الشاملة
- إتاحة DerivedState في SnapshotStateObserver
- منع إزالة الحالة المشتقة من التركيب عند قراءتها في نطاقات أخرى
- استخدام IdentityArrayMap بدلاً من HashMap داخل DerivedState
- تعديل مراقبي الحالة المشتقة لاستخدام مصفوفة قابلة للتغيير
- تعديل عملية تنظيف حالة SnapshotStateObserver
- استبدال SnapshotStateObserver.invalidated بـ ArraySet
- تم إصلاح مشكلة تعارض العمليات عند قراءة الحالة من اللقطة الشاملة
- إصلاح استخدام السجلّ القديم في احتساب تجزئة DerivedState
- إصلاح مشكلة تعارض المهام عند الانتقال إلى اللقطة الشاملة
- تسريع تنظيف ملاحظات النطاق في SnapshotStateObserver
الإصدار 1.3.0-rc01
5 تشرين الأول (أكتوبر) 2022
تم إصدار androidx.compose.runtime:runtime-*:1.3.0-rc01
. يحتوي الإصدار 1.3.0-rc01 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح الخطأ
ArrayIndexOutOfBoundsException
الذي ينبع من جدول الشرائح (b/249076084)
الإصدار 1.3.0-beta03
21 أيلول (سبتمبر) 2022
تم إصدار androidx.compose.runtime:runtime-*:1.3.0-beta03
. يحتوي الإصدار 1.3.0-beta03 على هذه المراجعات.
تغيير في السلوك قد يؤدي إلى حدوث أعطال
- تم تغيير المَعلمة إلى
remember
وrememberCoroutineScope
لتكونcrossinline
. سيؤدي ذلك إلى الإبلاغ عن خطأ في عمليات الإرجاع المبكر بدلاً من السماح بالإرجاع المبكر، ما سيؤدي إلى الإبلاغ عن خطأ داخلي لاحقًا. - يمكن أن يؤدّي هذا التغيير إلى ظهور أخطاء جديدة في المُجمِّع تتطلّب إزالة النتائج غير المحلية من الدوالّ اللامدا التي يتم تمريرها إلى هذه الدوالّ. (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، بالإضافة إلى العديد من إصلاحات الأخطاء التي تساهم في تحسين الأداء. كانت مقدمة
movableContentOf
API هي الميزة الجديدة الأكثر أهمية، والتي يمكن استخدامها لتفعيل تجربة مستخدم معقّدة، مثل عمليات النقل بين العناصر المشتركة. تحوّل واجهة برمجة التطبيقاتmovableContentOf
دالة lambda قابلة للتجميع إلى دالة lambda تنقل حالتها والعقد المقابلة لها إلى أي موقع جديد يتم استدعاؤها فيه. عندما تغادر المكالمة السابقة التركيب، يتم الاحتفاظ بالحالة مؤقتًا، وإذا دخلت مكالمة جديدة إلى دالة lambda في التركيب، يتم نقل الحالة والعقد المرتبطة بها إلى موقع المكالمة الجديدة. في حال عدم إضافة مكالمة جديدة، تتم إزالة الحالة نهائيًا ويتم إشعار المراقبين.إذا تمّ استدعاء دالة
movableContentOf
lambda عدّة مرّات في التركيب نفسه، يتمّ إنشاء حالة وعقد جديدة لكلّ استدعاء، وعندما تغادر المكالمات التركيب وتدخل مكالمات جديدة، يتمّ نقل الحالة من أوّل المكالمات التي تغادر إلى المكالمات التي تدخل بترتيب استدعائها. تتم إزالة جميع الحالات التي لم يتمّ تأكيدها من خلال المكالمات الجديدة نهائيًا.بالإضافة إلى ذلك وبعض الميزات الجديدة الأخرى، تمّت مراجعة نظام وقت التشغيل ونظام حالة "لقطة الشاشة" بشكل مكثّف. تمت إزالة العديد من عمليات تسرُّب الذاكرة وتحسين مسارات الرموز البرمجية.
في ما يلي قائمة ملخّصة بالتغييرات:
الميزات الجديدة في 1.2
- إضافة ميزة "الخروج/الدخول غير الآمن" في اللقطة التجريبية
- إضافة واجهة برمجة التطبيقات التجريبية Snapshot.asContextElement
- تقديم Snapshot.withoutReadObservation
- السماح بنقل الحالة داخل تركيبة
- تتبُّع عمليات إعادة التركيب في "إنشاء"
الأداء في 1.2
- تحسين الأداء المحلي للتركيب
- يجب اشتقاق الملفات الشخصية الأساسية لإنشاء المحتوى باستخدام مقاييس الأداء
إصلاح الأخطاء في 1.2
- إزالة معلومات التتبُّع من نطاقات إعادة تركيب الإصدار
- منع إزالة الحالة المشتقة من التركيب عند قراءتها في نطاقات أخرى
- استخدام removeScope() بشكل أكثر فعالية في SnapshotStateObserver
- إزالة التبعيات للحالة المشتقة في التركيب
- إصلاح تغيُّر currentCompositeKeyHash بعد إعادة التركيب الداخلي داخل المحتوى القابل للنقل
- تنظيف التركيبات غير الصالحة أثناء التخلص منها
- إصلاح قراءة حالة الاستخراج أثناء إعادة التركيب
- إصلاح تسرُّب الذاكرة عند مراقبة عناصر الحالة المشتقة
- تم إصلاح مفتاح التجزئة المركب movableContent ليكون متسقًا
- إصلاح مشكلة تؤدي إلى تعطُّل أداة إنشاء المحتوى
- التأكّد من أنّ إلغاء صلاحية مجموعة بشكلٍ قسري يؤدي إلى إعادة التركيب
- إصلاح خطأ في استعادة rememberSaveable مع الإدخال بالترتيب غير الصحيح
الإصدار 1.2.0-rc03
29 حزيران (يونيو) 2022
تم إصدار androidx.compose.runtime:runtime-*:1.2.0-rc03
. يحتوي الإصدار 1.2.0-rc03 على هذه المراجعات.
إصلاح الأخطاء
- في السابق، كانت تتم إزالة ملاحظات الحالة المشتقة بشكل غير مشروط من نطاق إعادة التركيب والتركيب معًا، ما أدّى إلى تعطُّل النطاقات الأخرى التي قد تكون لا تزال ترصد الحالة المشتقة. لا يزيل هذا التغيير سوى نُسخ الحالة المشتقة إذا لم تعُد نطاقات أخرى ترصدها. (b/236618362)
الإصدار 1.2.0-rc02
22 حزيران (يونيو) 2022
تم إصدار androidx.compose.runtime:runtime-*:1.2.0-rc02
. يحتوي الإصدار 1.2.0-rc02 على هذه المراجعات.
الإصدار 1.2.0-rc01
15 حزيران (يونيو) 2022
تم إصدار androidx.compose.runtime:runtime-*:1.2.0-rc01
. يحتوي الإصدار 1.2.0-rc01 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- يتم الآن إنشاء الواجهات في مكتبات 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
إلى Composer (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 Runtime (1.0). قبل هذا التغيير، كان "مُجمِّع Compose" متوافقًا فقط مع "وقت تشغيل Compose" من الإصدار نفسه أو الإصدارات الأحدث. بعد هذا التغيير، أصبح "مجمّع Compose" متوافقًا مع إصدار قديم من "وقت تشغيل Compose" (1.0). (aosp/1796968)
- تم تعديل Compose
1.1.0-alpha03
ليصبح يعتمد على Kotlin1.5.30
. (I74545)
الإصدار 1.1.0-alpha02
18 آب (أغسطس) 2021
تم إصدار androidx.compose.runtime:runtime-*:1.1.0-alpha02
. يحتوي الإصدار 1.1.0-alpha02 على هذه المراجعات.
الإصدار 1.1.0-alpha01
4 آب (أغسطس) 2021
تم إصدار androidx.compose.runtime:runtime-*:1.1.0-alpha01
. يحتوي الإصدار 1.1.0-alpha01 على هذه المراجعات.
الإصدار 1.0
الإصدار 1.0.5
3 تشرين الثاني (نوفمبر) 2021
تم إصدار androidx.compose.runtime:runtime-*:1.0.5
. يحتوي الإصدار 1.0.5 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح عطل في تتبُّع المثيلات derivedStateOf. (aosp/1792247)
الإصدار 1.0.4
13 تشرين الأول (أكتوبر) 2021
تم إصدار androidx.compose.runtime:runtime-*:1.0.4
. يحتوي الإصدار 1.0.4 على هذه المراجعات.
تعديلات على التبعيات
- تم تعديلها لتصبح معتمدة على Kotlin
1.5.31
الإصدار 1.0.3
29 أيلول (سبتمبر) 2021
تم إصدار androidx.compose.runtime:runtime-*:1.0.3
. يحتوي الإصدار 1.0.3 على هذه المراجعات.
تعديلات على التبعيات
- تم تعديلها لتصبح معتمدة على Kotlin
1.5.30
الإصدار 1.0.2
1 أيلول (سبتمبر) 2021
تم إصدار androidx.compose.runtime:runtime-*:1.0.2
. يحتوي الإصدار 1.0.2 على عمليات الربط هذه.
تم تعديله ليتوافق مع إصدار 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 وAGP7.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) }
عند استخدامه داخل وجهة تركيب التنقّل (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
بدلاً من ذلك إن أمكن لعرض المشاهد داخل أداة "الإنشاء". يُرجى العِلم أنّه لن يكون من الممكن في المستقبل إنشاء عناصر 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 ليصبحا من الفئة SwipeableState. لم تعُد [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. لا تتمّ مقارنة المَعلمات التي يتمّ تحديدها على أنّها "ثابتة" في وقت الترجمة أو تخزينها في وقت التشغيل. ويؤدي ذلك إلى تقليل عدد المقارنات وحجم جدول الفتحات. 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() للحصول على ملف CoroutineScope مُدار في التركيب لبدء المهام استجابةً للأحداث. (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)