Compose Runtime
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(الاطّلاع على مستندات مرجع واجهة برمجة التطبيقات لجميع حِزم Compose)
آخر الأخبار | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار الأوّلي |
---|---|---|---|---|
2 يوليو 2025 | 1.8.3 | - | 1.9.0-beta02 | - |
البنية
Compose هي مجموعة من 7 أرقام تعريف لمجموعات Maven ضِمن androidx
. تحتوي كل مجموعة على مجموعة فرعية مستهدَفة من الوظائف، ولكل منها مجموعة خاصة من ملاحظات الإصدار.
يوضّح هذا الجدول المجموعات ويتضمّن روابط لكل مجموعة من ملاحظات الإصدار.
مجموعة | الوصف |
---|---|
compose.animation | إنشاء رسوم متحركة في تطبيقات Jetpack Compose لإثراء تجربة المستخدم |
compose.compiler | تحويل دوال @Composable وتفعيل عمليات التحسين باستخدام مكوّن إضافي لمترجم Kotlin |
compose.foundation | يمكنك كتابة تطبيقات Jetpack Compose باستخدام وحدات أساسية جاهزة للاستخدام وتوسيع نطاق الأساس لإنشاء عناصر نظام التصميم الخاص بك. |
compose.material | يمكنك إنشاء واجهات مستخدم Jetpack Compose باستخدام "مكوّنات Material Design" الجاهزة للاستخدام. هذه هي نقطة الدخول الأعلى مستوى في Compose، وهي مصمَّمة لتوفير مكوّنات تتطابق مع تلك الموضّحة في www.material.io. |
compose.material3 | يمكنك إنشاء واجهات مستخدم Jetpack Compose باستخدام "مكوّنات Material Design 3"، وهي التطوّر التالي في Material Design. يتضمّن الإصدار 3 من Material تصميمات ومكوّنات محدّثة وميزات تخصيص Material You، مثل الألوان الديناميكية، وهو مصمّم ليكون متوافقًا مع الأسلوب المرئي الجديد وواجهة مستخدم النظام في Android 12. |
compose.runtime | الوحدات الأساسية لنموذج برمجة Compose وإدارة الحالة، ووقت التشغيل الأساسي الذي يستهدفه مكوّن Compose الإضافي للمترجم. |
compose.ui | المكوّنات الأساسية لواجهة مستخدم Compose اللازمة للتفاعل مع الجهاز، بما في ذلك التنسيق والرسم والإدخال |
تعريف التبعيات
لإضافة تبعية على Compose، يجب إضافة مستودع Google Maven إلى مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
أضِف التبعيات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle
لتطبيقك أو وحدتك:
Groovy
dependencies { implementation "androidx.compose.runtime:runtime:1.8.3" implementation "androidx.compose.runtime:runtime-livedata:1.8.3" implementation "androidx.compose.runtime:runtime-rxjava2:1.8.3" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.8.3") implementation("androidx.compose.runtime:runtime-livedata:1.8.3") implementation("androidx.compose.runtime:runtime-rxjava2:1.8.3") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
لمزيد من المعلومات حول العناصر التابعة، يُرجى الاطّلاع على إضافة عناصر تابعة للإنشاء.
الملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية من خلال النقر على زر النجمة.
يُرجى الاطّلاع على مستندات Issue Tracker للحصول على مزيد من المعلومات.
الإصدار 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 إلى التطبيق.
الإصدار 1.0.0-alpha04
23 أغسطس 2023
تم طرح androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
. يحتوي الإصدار 1.0.0-alpha04 على عمليات الإيداع هذه.
الميزات الجديدة
- متوافق مع أحدث إصدارات Benchmark وTracing Perfetto، ما يتيح إمكانية تتبُّع عملية إنشاء التطبيق عند بدء تشغيله (بدء التشغيل البارد)، مثلاً في AndroidX Benchmark و"استوديو Android" (بدءًا من الإصدار التجريبي الثاني من Hedgehog).
تغييرات واجهة برمجة التطبيقات
- تمت إعادة تسمية "
androidx.tracing.perfetto.Trace
" إلى "androidx.tracing.perfetto.PerfettoSdkTrace
". (I44af8) - جعل واجهات برمجة التطبيقات لحزمة تطوير البرامج (SDK) الخاصة بأداة "تتبُّع الأداء" في Perfetto متوافقة مع
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.9
الإصدار 1.9.0-beta02
2 يوليو 2025
تم طرح androidx.compose.runtime:runtime-*:1.9.0-beta02
. يحتوي الإصدار 1.9.0-beta02 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تم تقليل مدة صلاحية المراجع للقيم في جدول الفتحة بين عمليات الإنشاء. هناك حالات يمكن أن يستمر فيها مرجع في جدول الفتحة لمدة إطار أطول من اللازم. (I49e74، b/418516940)
- إزالة تشويه Kotlin لطُرق إعادة التحميل السريع (Ic56a3، b/426871325)
الإصدار 1.9.0-beta01
18 يونيو 2025
تم طرح androidx.compose.runtime:runtime-*:1.9.0-beta01
. يحتوي الإصدار 1.9.0-beta01 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة واجهة برمجة تطبيقات للأدوات من أجل تحليل معلومات المصدر التي أضافها برنامج التجميع البرمجي في Compose. (Iceaf9، b/408492167)
- تتضمّن
SnapshotStateSet
الآنParcelable
على أجهزة Android، ويمكن استخدامها كجزء منrememberSaveable { ... }
. (I755dd، b/378623803) - تتضمّن
SnapshotStateList
الآنParcelable
على أجهزة Android، ويمكن استخدامها كجزء منrememberSaveable { ... }
. (Id18be، b/378623803) - تمت الآن إضافة التعليق التوضيحي
@RememberInComposition
إلىmovableContentOf()
، ما يسمح لأداة Lint برصد الاستخدامات غير الصحيحة (I2738d). - تم تعديل واجهة برمجة التطبيقات التجريبية الخاصة بمراقبة التركيب للسماح بمراقبة أكثر شمولاً لأسباب إعادة التركيب (I32b6a)
- غيِّر
setDiagnosticStackTraceEnabled
إلى تجريبي لاحتساب التطوير المستقبلي لهذه الميزة. (I11db3) - تم إيقاف
currentCompositeKeyHash
نهائيًا. يمكنك استخدامcurrentCompositeKeyHashCode
كبديل. تشفّر واجهة برمجة التطبيقات البديلة التجزئة نفسها باستخدام عدد أكبر من البتات، ما يقلّل بشكل كبير من احتمال أن يكون لمجموعتين عشوائيتين غير مرتبطتين في التسلسل الهرمي للتركيب مفتاح التجزئة نفسه. (I4cb6a، b/177562901) - تتطلّب المشاريع التي تم إصدارها باستخدام Kotlin 2.0 استخدام الإصدار 2.0.0 أو إصدار أحدث من KGP (Idb6b5)
- تم نقل
@Stable
و@Immutable
و@StableMarker
إلى التعليقات التوضيحية في وقت التشغيل (بطريقة متوافقة). يمكنك الآن الاعتماد على التعليقات التوضيحية في وقت التشغيل إذا كنت تريد استخدام هذه التعليقات التوضيحية من المكتبات التي لا تعتمد على Compose. (I23a16) - تمت إعادة تسمية عملية التحميل الزائد
rememberSaveable
التي تقبلKSerializer
إلىrememberSerializable
. يوضّح هذا التغيير الاستخدام المقصود له معkotlinx.serialization
. إنّ إتاحة فئاتkotlinx.Serializable
العامة مباشرةً فيrememberSaveable
تتطلّب مَعلمة من النوعreified
، ما سيؤدي إلى عدم توافق الرمز المصدري من خلال مطالبة جميع مواقع الاتصال بتوفير معلومات النوع المحدَّد في وقت الترجمة. (Idb875 وI38627 وb/376028110)
إصلاح الأخطاء
- يجب التخلّص من التركيبات التي تم ضبطها باستخدام محتوى قابل للإيقاف المؤقت وتم إلغاؤه. يتم الآن التحقّق من ذلك من خلال التجميع وسيتم عرض خطأ إذا تمت إعادة استخدامه. (I2daa5، b/406792785)
- تم إصلاح الخطأ الذي كان يتسبب في إرسال قيمة
onForgotten
غير صحيحة إلى المراقبين عند التخلص من التركيب القابل للإيقاف المؤقت. يجب إرسال حدث onAbandoned فقط إلىRememberObservers
في مقطوعة موسيقية قابلة للإيقاف المؤقت تم إلغاؤها. (I26f54) - تم إصلاح مشكلة المحتوى القابل للنقل حيث تتم إضافة عمليات الإبطال التي تصل في المراحل المتأخرة من معالجة المحتوى القابل للنقل إلى أداة الإنشاء، ولكن لا يتم تعديل عمليات الإبطال هذه عند نقل المحتوى، ما يؤدي إلى إعادة إنشاء المحتوى في المكان الخطأ. (Icd2fa، b/409439507)
- تم إصلاح مشكلة عدم صلاحية المحتوى القابل للنقل بعد إنشائه وقبل نقله. (I99eac، b/229001114)
- قد يؤدي استدعاء
remove()
لمكرّر قائمة تم إنشاؤه بواسطةSnapshotStateList
بعد استدعاءprevious()
إلى إزالة العنصر غير الصحيح من القائمة، ولم يتطابق مع ما يفعلهArrayList
لتسلسل الاستدعاءات نفسه. (I05ab7، b/417493222) - تم إصلاح مشكلة ترتيب في إرسال
onForgotton
كان يمكن أن تؤدي، على سبيل المثال، إلى تنفيذonDispose
للتأثيرات التي يمكن التخلص منها بترتيب خاطئ. (Ic1c91، b/417450712) - إصلاح لإعادة استخدام معالجة الحالة في التركيب القابل للإيقاف المؤقت (Ife96e، b/404058957)
- تم إصلاح مشكلة إعادة استخدام الحالة عند إيقاف تركيبة مؤقتًا وإعادة تشغيلها، ولكن كان يجب إعادة إنشاء بعض الحالات التي تم إيقافها مؤقتًا لأنّ بعض الحالات التي تمت قراءتها قد تغيّرت أثناء إيقاف التركيبة مؤقتًا. (I441d1، b/416209738)
- تم إكمال إصلاح مشكلة b/404058957 المتعلقة بتذكُّر إرسال التركيبة القابلة للإيقاف المؤقت، لأنّ الإصلاح السابق كان غير مكتمل. (I1afd4، b/404058957)
- تتجاوز السمة
OffsetApplier
الآن السمةapply()
بشكل صحيح، والتي تم تقديمها مع ميزة "التركيب القابل للإيقاف المؤقت". قد يؤدي عدم توفّر هذه السمة إلى ظهور استثناء في التركيب القابل للإيقاف المؤقت عند تعديل العُقد الافتراضية. (Idbf31، b/409291131) - تم إصلاح حالة توقّف تام قد تؤثر في مستخدمي Molecule عند إلغاء مكالمة معلّقة إلى
FrameClock.withFrameNanos
أثناء إرسال إطار. (I89cab، b/407027032) - قد يصبح Recomposer غير نشط مع المحتوى القابل للنقل (Ie5416، b/409267170)
- قد يتم عكس ترتيب
onReuse
وonDeactivate
أثناء إنشاء مقطوعة موسيقية يمكن إيقافها مؤقتًا. ويتم الآن ضمان حدوثها بترتيبonDeactivate
/onReuse
. (I996e4، b/404058957) - إصلاح عملية إرسال المراقبين الذين تم تذكّرهم في التركيب القابل للإيقاف المؤقت لتجنُّب إرسال المراقبين الذين تم تذكّرهم أو نسيانهم في عملية التطبيق نفسها (I570b2، b/404645679، b/407931790)
- تم التبديل من
LifecycleRegistry
إلى الوضع غير الآمن في Compose Multiplatform لإيقاف عمليات التحقّق منMainThread
وحلّ مشاكل سلاسل التعليمات البرمجية. لمزيد من التفاصيل، يمكنك الاطّلاع على CMP-8227. (Icee87)
المساهمة الخارجية
- تم إصلاح خطأ يؤثر في مستخدمي Molecule حيث قد يؤدي استخدام
RecompositionMode.Immediate
إلى عدم إعادة التركيب. (I9f3a9، b/419527812) - تم توفير دوال جلب
PausableComposition
isApplied
وisCancelled
المكشوفة التي تتيح التحقّق من حالةPausableComposition
. (I994aa) - تمت إضافة
AnnotationTarget.FUNCTION
إلى التعليق التوضيحيFunctionKeyMeta
. (I08021)
الإصدار 1.9.0-alpha04
4 يونيو 2025
تم طرح androidx.compose.runtime:runtime-*:1.9.0-alpha04
. يحتوي الإصدار 1.9.0-alpha04 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- تتضمّن
SnapshotStateSet
الآن Parcelable على Android، ويمكن استخدامها كجزء منrememberSaveable { ... }
. (I755dd، b/378623803) - تتضمّن
SnapshotStateList
الآن Parcelable على Android، ويمكن استخدامها كجزء منrememberSaveable { ... }
. (Id18be، b/378623803) - تمت الآن إضافة التعليق التوضيحي
@RememberInComposition
إلىmovableContentOf()
، ما يسمح لأداة Lint برصد الاستخدامات غير الصحيحة (I2738d). - تم تعديل واجهة برمجة التطبيقات التجريبية الخاصة بمراقبة التركيب للسماح بمراقبة أكثر شمولاً لأسباب إعادة التركيب (I32b6a)
إصلاح الأخطاء
- تم إصلاح مشكلة ترتيب في إرسال
onForgotton
كان يمكن أن تؤدي، على سبيل المثال، إلى تنفيذonDispose
للتأثيرات التي يمكن التخلص منها بترتيب خاطئ. (Ic1c91، b/417450712) - إصلاح لإعادة استخدام معالجة الحالة في التركيب القابل للإيقاف المؤقت (Ife96e، b/404058957)
- إصلاح خطأ بسيط لجعل عملية رصد المجموعات القابلة للتغيير متوافقة مع كلّ من K1 وK2 (Ie4878)
- إصلاح خطأ بسيط لجعل البحث عن التعليقات التوضيحية في أدوات الوصول إلى الخصائص التي تم تجاهلها متوافقًا مع كلّ من K1 وK2 (I9900d)
المساهمة الخارجية
- تم إصلاح خطأ يؤثر في مستخدمي Molecule حيث قد يؤدي استخدام
RecompositionMode.Immediate
إلى عدم إعادة التركيب. (I9f3a9، b/419527812) - يتم عرض دوال الجلب
PausableComposition
isApplied وisCancelled
التي تتيح التحقّق من حالةPausableComposition
. (I994aa)
الإصدار 1.9.0-alpha03
20 مايو 2025
تم طرح androidx.compose.runtime:runtime-*:1.9.0-alpha03
. يحتوي الإصدار 1.9.0-alpha03 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- غيِّر
setDiagnosticStackTraceEnabled
إلى تجريبي لاحتساب التطوير المستقبلي لهذه الميزة. (I11db3)
إصلاح الأخطاء
- تم إصلاح مشكلة إعادة استخدام الحالة عند إيقاف تركيبة مؤقتًا وإعادة تشغيلها، ولكن كان يجب إعادة إنشاء بعض الحالات التي تم إيقافها مؤقتًا لأنّ بعض الحالات التي تمت قراءتها قد تغيّرت أثناء إيقاف التركيبة مؤقتًا. (I441d1، b/416209738)
- تم إكمال إصلاح عملية إرسال التذكير بشأن التركيب القابل للإيقاف المؤقت، لأنّ الإصلاح السابق للمشكلة b/404058957 كان غير مكتمل. (I1afd4، b/404058957)
- توفّر
SaveableStateHolder.SaveableStateProvider
الآنLocalSavedStateRegistryOwner
لمحتواها من خلال التركيب. (Ia2761، b/413108878) - أصبح
androidx.compose.runtime.saveable
يعتمد الآن علىandroidx.lifecycle.runtime.compose
. (I53228، b/413108878)
الإصدار 1.9.0-alpha02
7 مايو 2025
تم طرح androidx.compose.runtime:runtime-*:1.9.0-alpha02
. يحتوي الإصدار 1.9.0-alpha02 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- تم إيقاف
rememberSaveable
نهائيًا باستخدام "مفتاح" مخصّص. يتجاوز هذا الخيار تحديد النطاق حسب الموضع، ما يؤدي إلى حدوث أخطاء في الحالة وسلوك غير متسق (مثل مشاركة الحالة أو فقدانها بدون قصد، ومشاكل فيLazyLayouts
المتداخلة). يُرجى إزالة المَعلمة "key" لاستخدام تحديد النطاق حسب الموضع من أجل الحصول على حالة متسقة ومحددة النطاق محليًا. يمكنك الاطّلاع على رسالة الالتزام الكاملة لمزيد من التفاصيل. (I5e6ff، b/357685851)
إصلاح الأخطاء
- تتجاوز السمة
OffsetApplier
الآن السمةapply()
بشكل صحيح، والتي تم تقديمها مع ميزة "التركيب القابل للإيقاف المؤقت". قد يؤدي عدم توفّر هذه السمة إلى أن يطرح التركيب القابل للإيقاف استثناءً عند تعديل العُقد الافتراضية. (Idbf31، b/409291131) - تم إصلاح حالة توقّف تام قد تؤثر في مستخدمي Molecule عند إلغاء مكالمة معلّقة إلى
FrameClock.withFrameNanos
أثناء إرسال إطار. (I89cab، b/407027032) - قد يصبح Recomposer غير نشط مع بقاء حالة المحتوى القابل للنقل معلّقة ليتم تجاهلها. لا يحدث ذلك عادةً لأنّه يتم تجاهل حالة المحتوى القابل للنقل في الحلقة الرئيسية لعملية إعادة التركيب. ومع ذلك، يمكن أن يحدث ذلك في التركيب القابل للإيقاف المؤقت عند تجاهل المحتوى القابل للنقل أثناء
resume()
(Ie5416، b/409267170) - قد يتم عكس ترتيب
onReuse
وonDeactivate
أثناء إنشاء مقطوعة موسيقية يمكن إيقافها مؤقتًا. ويُضمَن الآن حدوثها بترتيبonDeactivate/onReuse
. (I996e4، b/404058957)
الإصدار 1.9.0-alpha01
23 أبريل 2025
تم طرح androidx.compose.runtime:runtime-*:1.9.0-alpha01
. يحتوي الإصدار 1.9.0-alpha01 على عمليات الدمج هذه.
التغييرات في السلوك
- تتطلّب عمليات التحقّق من Lint التي يتم شحنها مع Compose الآن توفُّر الإصدار 8.8.2 من "مكوّن Android الإضافي لنظام Gradle" كحد أدنى. إذا لم تتمكّن من ترقية AGP، يمكنك بدلاً من ذلك ترقية Lint بمفرده باستخدام
android.experimental.lint.version=8.8.2
(أو إصدار أحدث) فيgradle.properties
. لتشغيل عمليات التحقّق من أخطاء Compose البرمجية داخل بيئة التطوير المتكاملة، يجب استخدام Android Studio Ladybug أو إصدار أحدث.
تغييرات واجهة برمجة التطبيقات
- تم إيقاف
currentCompositeKeyHash
نهائيًا. يمكنك استخدامcurrentCompositeKeyHashCode
كبديل. تشفّر واجهة برمجة التطبيقات البديلة التجزئة نفسها باستخدام عدد أكبر من البتات، ما يقلّل بشكل كبير من احتمال أن يكون لمجموعتين عشوائيتين غير مرتبطتين في التسلسل الهرمي للتركيب مفتاح التجزئة نفسه. (I4cb6a، b/177562901) - تتطلّب المشاريع التي تم إصدارها باستخدام Kotlin 2.0 استخدام الإصدار 2.0.0 أو إصدار أحدث من KGP (Idb6b5)
- تم نقل
@Stable
و@Immutable
و@StableMarker
إلى التعليقات التوضيحية في وقت التشغيل (بطريقة متوافقة). يمكنك الآن الاعتماد على التعليقات التوضيحية في وقت التشغيل إذا كنت تريد استخدام هذه التعليقات التوضيحية من المكتبات التي لا تعتمد على Compose. (I23a16) - تزيل هذه السمة
onCreating
وonDisposing
لأنّهما أصبحتا قديمتَين وتمت إعادة تسميتهما إلىonPreCreate
وonPreDispose
. يكمل هذا التغيير عملية إعادة التسمية. (I97461) - عرض عنصر Composition Local يتيح إرفاق تتبُّع تسلسل استدعاء الدوال البرمجية في Compose استنادًا إلى موقع عقدة Compose في التركيب (Ie0bda، b/354163858)
- تقديم عمليات تتبُّع تسلسل استدعاء الدوال البرمجية لتشخيص أخطاء Compose استنادًا إلى معلومات المصدر المخزّنة في التركيب (I3db9f، b/354163858)
- إيقاف
runWithTimingDisabled
نهائيًا واستخدامrunWithMeasurementDisabled
بدلاً منه، لأنّه يصف السلوك بشكلٍ أوضح، أي أنّه يتم إيقاف جميع المقاييس مؤقتًا. بالإضافة إلى ذلك، يجب عرض الفئة الرئيسيةMicrobenchmarkScope
لأنّه لا يمكن إعادة تعريف الدالةrunWithMeasurementDisabled
لفتح الوصول، لأنّها مضمّنة. (I9e23b، b/389149423، b/149979716) - تضيف
@FrequentlyChangingValue
: وهي تعليق توضيحي يمكنه وضع علامة على الدوال وعمليات جلب الخصائص للإشارة إلى أنّه يجب عدم طلبها مباشرةً داخل التركيب، لأنّ ذلك قد يؤدي إلى عمليات إعادة تركيب متكررة. على سبيل المثال، لوضع علامة على قيم موضع التمرير وقيم الحركة. يتم تقديم التحذيرات من خلال عملية فحص lint ذات الصلة. (I83630، b/234042500) - تضيف
@RememberInComposition
: وهي تعليق توضيحي يمكنه وضع علامة على الدوال الإنشائية والدوال وعناصر جلب الخصائص للإشارة إلى أنّه يجب عدم طلبها مباشرةً داخل التركيب بدون تذكُّرها. سيتم عرض الأخطاء من خلال عملية تدقيق lint ذات الصلة. يمكن استخدام هذه التعليق التوضيحي لوضع علامة على التصريحات التي تعرض كائنات قابلة للتغيير أو تتضمّن بيانات حالة، أو الكائنات التي من المهم الحفاظ على هويتها في جميع عمليات الإنشاء، أو الكائنات التي يصعب إنشاء مثيل لها ويجب تخزينها مؤقتًا في جميع عمليات الإنشاء. (Ie7db0) - تمت إضافة دالة تحميل زائد جديدة
rememberSaveable
تتوافق معKSerializer
لإتاحة استمرار الحالة الآمنة من حيث النوع باستخدام KotlinX Serialization. ستبقى واجهة برمجة التطبيقات الحالية المستندة إلىSaver
متاحة. (Iea4ab، b/376028110)
إصلاح الأخطاء
- إصلاح عملية إرسال المراقبين الذين تم تذكّرهم في التركيب القابل للإيقاف المؤقت لتجنُّب إرسال المراقبين الذين تم تذكّرهم أو نسيانهم في عملية التطبيق نفسها (I570b2، b/404645679، b/407931790)
- تمت إعادة تسمية الطريقتَين
SnapshotObserver
وonDisposing
إلىonPreCreate
وonPreDispose
على التوالي في onCreating لتتوافقا مع إرشادات واجهة برمجة التطبيقات. تم إيقاف الطرق السابقة نهائيًا، وتستدعي الطرق الجديدة الطرق القديمة تلقائيًا، لذا ستستمر عمليات التنفيذ الحالية لهذه الواجهة في العمل إلى أن تتم إزالة الطرق. ستتم إزالة هذه الطرق في الإصدار 1.9.0 alpha في قائمة تغييرات لاحقة ستلي هذه القائمة قريبًا. ستتم إزالتها من الإصدار التجريبي 1.8 قبل الإصدار الثابت 1.8. (I6d753) - تم إصلاح مشكلة عدم تذكُّر القيم المحفوظة بشكل صحيح وإعادة احتسابها عند إعادة إنشاء مجموعة محذوفة تظهر بعد مجموعة قابلة للنقل (I62cab، b/383769314)
- إتاحة إنشاء عمليات تتبُّع تسلسل استدعاء الدوال البرمجية في
LaunchedEffect
وrememberCoroutineScope
(I705c0، b/354163858) - تتطلّب عمليات التحقّق من أخطاء Compose البرمجية الآن الحدّ الأدنى من إصدار "مكوّن Android الإضافي لنظام Gradle" (AGP) وهو 8.8.2 من سطر الأوامر، والإصدار Ladybug من Android Studio على الأقل للحصول على دعم بيئة التطوير المتكاملة. إذا كنت تستخدم إصدارًا قديمًا من "مكوّن Android الإضافي في Gradle"، يمكنك ضبط
android.experimental.lint.version=8.8.2
في ملف gradle.properties لترقية إصدار Lint بدون التأثير في "مكوّن Android الإضافي في Gradle". (I6f2a8)
المساهمة الخارجية
- تمت إضافة
AnnotationTarget.FUNCTION
إلى التعليق التوضيحيFunctionKeyMeta
. (I08021)
الإصدار 1.8
الإصدار 1.8.3
18 يونيو 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.3
. يحتوي الإصدار 1.8.3 على عمليات الدمج هذه.
الإصدار 1.8.2
20 مايو 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.2
. يحتوي الإصدار 1.8.2 على عمليات الدمج هذه.
الإصدار 1.8.1
7 مايو 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.1
. يحتوي الإصدار 1.8.1 على عمليات الدمج هذه.
الإصدار 1.8.0
23 أبريل 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.0
. يتضمّن الإصدار 1.8.0 عمليات الدمج هذه.
الإصدار 1.8.0-rc03
9 أبريل 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.0-rc03
. يحتوي الإصدار 1.8.0-rc03 على عمليات الدمج هذه.
الإصدار 1.8.0-rc02
26 مارس 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.0-rc02
. يحتوي الإصدار 1.8.0-rc02 على عمليات الدمج هذه.
الإصدار 1.8.0-rc01
12 مارس 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.0-rc01
. يحتوي الإصدار 1.8.0-rc01 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إعادة تسمية الطريقتَين
SnapshotObserver
وonDisposing
إلىonPreCreate
وonPreDispose
على التوالي في onCreating لتتوافقا مع إرشادات واجهة برمجة التطبيقات. تم إيقاف الطرق السابقة نهائيًا، وتستدعي الطرق الجديدة الطرق القديمة تلقائيًا، لذا ستستمر عمليات التنفيذ الحالية لهذه الواجهة في العمل إلى أن تتم إزالة الطرق. ستتم إزالة هذه الطرق في الإصدار 1.9.0 alpha في قائمة تغييرات لاحقة ستلي هذه القائمة قريبًا. ستتم إزالتها من الإصدار التجريبي 1.8 قبل الإصدار الثابت 1.8. (I6d753)
الإصدار 1.8.0-beta03
26 فبراير 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.0-beta03
. يحتوي الإصدار 1.8.0-beta03 على عمليات الإيداع هذه.
الإصدار 1.8.0-beta02
12 فبراير 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.0-beta02
. يحتوي الإصدار 1.8.0-beta02 على عمليات الدمج هذه.
إصلاح الأخطاء
- إعادة طرح الاستثناء الذي تم رصده في الدالة البرمجية القابلة للإيقاف المؤقت (384486d)
الإصدار 1.8.0-beta01
29 يناير 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.0-beta01
. يحتوي الإصدار 1.8.0-beta01 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تم إصلاح مشكلة قد يؤدي فيها طرح عنصر قابل للطرح أثناء الإنشاء لا يمتد من Exception إلى حدوث الخطأ "لم يتم تطبيق الإنشاء المعلق". (I356be، b/382094412)
الإصدار 1.8.0-alpha08
15 يناير 2025
تم طرح androidx.compose.runtime:runtime-*:1.8.0-alpha08
. يحتوي الإصدار 1.8.0-alpha08 على عمليات الدمج هذه.
الإصدار 1.8.0-alpha07
11 ديسمبر 2024
تم طرح androidx.compose.runtime:runtime-*:1.8.0-alpha07
. يحتوي الإصدار 1.8.0-alpha07 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة واجهة برمجة تطبيقات للأدوات تساعد "أداة فحص التنسيق" في ربط التركيبات الفرعية بالتركيب الأصلي في الحالات التي لا يتم فيها استخدام عقدة لربط التركيبات معًا. (I4ce3d)
- تم ضبط الثوابت الحسابية والخاصة في
SnapshotId
على "داخلي" بدلاً من "عام". يمكن إجراء عمليات حسابية علىSnasphotId
، إذا لزم الأمر، عن طريق تحويلها إلىInt
أوLong
باستخدامtoInt()
أوtoLong()
على التوالي. (Ic3a57)
المساهمة الخارجية
- تحسين مساحة التخزين لمعلمات
movableContentOf
(ed87177)
الإصدار 1.8.0-alpha06
13 نوفمبر 2024
تم طرح androidx.compose.runtime:runtime-*:1.8.0-alpha06
. يحتوي الإصدار 1.8.0-alpha06 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- تغييرات في واجهة برمجة التطبيقات
PausableComposition
تتضمّن هذه التغييرات غير المتوافقة إصدارات سابقة من 1.8.0-alpha (منذ 1.8.0-alpha02)، ولكن بما أنّها واجهات برمجة تطبيقات جديدة في الإصدار 1.8.0، لا يتم الحفاظ على التوافق مع الإصدارات القديمة لأنّ واجهات برمجة التطبيقات لا تزال في مرحلة الإصدار الأولي. (I39819) - إضافة واجهات برمجة تطبيقات للأدوات لمراقبة إنشاء تركيبات جديدة ضمن أداة Recomposer (Iaeb7e)
- تمت إضافة
snapshotId
من النوعLong
إلىSnapshot
وإيقافid
نهائيًا. تم تغيير رقم تعريف اللقطة منInt
إلىLong
لتجنُّب تجاوز رقم تعريف اللقطة على الأنظمة التي تتضمّن معدّلات إطارات عالية جدًا ورسومًا متحركة طويلة الأمد. تم تحديد النوع على أنّه متوقّع/فعلي للسماح بأن يكون هذا النوعInt
أو نوعًا آخر على المنصات التي لا يتوفّر فيها نوعLong
أصلي. في المنصات التي لا تتضمّنLong
مدمجًا، مثل JavaScript، يجب تجنُّب معدّلات اللقطات العالية (أكثر من 1000 لقطة في الثانية) التي قد تتسبّب في حدوث تجاوز سعة لـInt
كل 24 يومًا تقريبًا. (I38ac3، b/374821679)
إصلاح الأخطاء
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 لمنع تضمين عمليات طرح الاستثناءات (5beb92)
- تحسين العمليات بشكل دقيق (d73c5c)
- تحسين عمليات التخصيص
SynchronizedObject
على JVM (2b043f)
الإصدار 1.8.0-alpha03
2 أكتوبر 2024
تم طرح androidx.compose.runtime:runtime-*:1.8.0-alpha03
. يحتوي الإصدار 1.8.0-alpha03 على عمليات الإيداع هذه.
تحسينات على الأداء
- إنشاء سياق فرعي بشكل غير مباشر لـ
rememberCoroutineScope
(f61464)- يُستخدَم
rememberCoroutineScope
عادةً لتشغيل الروتينات الفرعية استجابةً للأحداث التي تحدث بعد الإنشاء. في بعض السيناريوهات، قد لا تحدث هذه الأحداث أبدًا، ما يؤدي إلى تكاليف إضافية لإنشاء مهمة وإلغائها بدون أي فائدة. - اجعل النطاق الذي تعرضه الدالة
rememberCoroutineScope
ينشئcoroutineContext
بشكل غير مباشر عند الوصول إليه، ما يؤدي إلى تجنُّب إنشاء الوظيفة وإلغائها تمامًا إذا لم يتم استخدام النطاق مطلقًا.
- يُستخدَم
الإصدار 1.8.0-alpha02
18 سبتمبر 2024
تم طرح androidx.compose.runtime:runtime-*:1.8.0-alpha02
. يحتوي الإصدار 1.8.0-alpha02 على عمليات الدمج هذه.
الميزات الجديدة
- تمت إضافة
PausableComposition
الذي يتيح إنشاء مقطع فرعي يمكن إيقافه مؤقتًا أثناء الإنشاء وتطبيقه بشكل غير متزامن على المقطع. يجب توفّر دعم المترجم لإيقاف الإعلانات مؤقتًا، وهذه الميزة قيد التطوير حاليًا. (I3394b)
الإصدار 1.8.0-alpha01
4 سبتمبر 2024
تم طرح androidx.compose.runtime:runtime-*:1.8.0-alpha01
. يحتوي الإصدار 1.8.0-alpha01 على عمليات الدمج هذه.
الإصدار 1.7
الإصدار 1.7.8
12 فبراير 2025
تم طرح androidx.compose.runtime:runtime-*:1.7.8
. يحتوي الإصدار 1.7.8 على عمليات الدمج هذه.
الإصدار 1.7.7
29 يناير 2025
تم طرح androidx.compose.runtime:runtime-*:1.7.7
. ما مِن تغييرات مقارنةً بالإصدار 1.7.6.
تم طرح androidx.compose.runtime:runtime-*:1.7.6
. يحتوي الإصدار 1.7.6 على عمليات الدمج هذه.
الإصدار 1.7.5
30 أكتوبر 2024
تم طرح androidx.compose.runtime:runtime-*:1.7.5
. يحتوي الإصدار 1.7.5 على عمليات الدمج هذه.
الإصدار 1.7.4
16 أكتوبر 2024
تم طرح androidx.compose.runtime:runtime-*:1.7.4
. يحتوي الإصدار 1.7.4 على عمليات الدمج هذه.
الإصدار 1.7.3
2 أكتوبر 2024
تم طرح androidx.compose.runtime:runtime-*:1.7.3
. يحتوي الإصدار 1.7.3 على عمليات الدمج هذه.
الإصدار 1.7.2
18 سبتمبر 2024
تم طرح androidx.compose.runtime:runtime-*:1.7.2
. يحتوي الإصدار 1.7.2 على عمليات الدمج هذه.
الإصدار 1.7.1
10 سبتمبر 2024
- لم يتم إجراء أي تغييرات على عناصر Android. تمت إزالة
-desktop
من العناصر وإضافة-jvmStubs
و-linuxx64Stubs
من العناصر. لا يُفترض استخدام أي من هذه الأهداف، بل هي عناصر نائبة للمساعدة في جهود Jetbrains Compose.
الإصدار 1.7.0
4 سبتمبر 2024
تم طرح androidx.compose.runtime:runtime-*:1.7.0
. يحتوي الإصدار 1.7.0 على عمليات الدمج هذه.
التغييرات المهمة منذ الإصدار 1.6.0
- تمت إضافة إمكانية توفير قيمة محلية مركّبة يتم احتسابها استنادًا إلى قيم محلية مركّبة أخرى إما تلقائيًا باستخدام
compositionLocalWithComputedDefault()
أو من خلال توفير تعبير لامدا لاستخدامه في احتساب القيمة باستخدامprovidesComputed
بدلاً منprovides
. - يمكن الحصول على قيمة CompositionLocal باستخدام السمة
currentValue
الخاصة بـ CompositionLocal التي يمكن الوصول إليها من داخل دالة lambda التي تحتسب القيمة. يتم استخدام هذا النوع بدلاً منcurrent
الذي لا يمكن الوصول إليه إلا في دوال@Composable
. (Iadbc0) - يمكن الوصول إلى عناصر الحالة التي تم إنشاؤها حديثًا على الفور من لقطات أخرى، بما في ذلك اللقطة العامة، مع حالتها الأولية. لا تظهر أي تعديلات لاحقة إلى أن يتم تطبيق اللقطة التي تم إنشاء العنصر فيها.
- الحالة الأولية لـ
mutableStateOf()
، بالإضافة إلى إصداراتها الأساسية، هي القيمة التي تم تمريرها كمَعلمة إلىmutableStateOf()
. الحالة الأولية لكل منmutableStateListOf()
وmutableStateMapOf()
فارغة. - تمت إضافة
Snapshot.isInSnapshot
وSnapshot.PreexistingSnapshotId
اللذين يُستخدمان لإتاحة إمكانية الوصول إلى عنصر الحالة على الفور من اللقطة العامة عند إنشائه. - يمكن أن تتيح عناصر الحالة المخصّصة إمكانية الوصول إليها على الفور باتّباع نمط التغييرات التي تم إجراؤها على عناصر اللقطة المضمّنة. (I84a17)
- فعِّل
nonSkippingGroupOptimization
لمكتبات الإنشاء. يؤدي ذلك إلى أن يصبح الرمز البرمجي الذي تم إنشاؤه لجميع الدوال القابلة للإنشاء غير القابلة لإعادة التشغيل في androidx أكثر كفاءةً. ونخطّط لإتاحة هذه الميزة تلقائيًا في المستقبل. I(acbc08) - إبطال صلاحية دوال lambda القابلة للإنشاء في التركيبات الفرعية في الإطار نفسه (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()
أو من خلال توفير تعبير لامدا لاستخدامه في احتساب القيمة باستخدامprovidesComputed
بدلاً منprovides
. - يمكن الحصول على قيمة CompositionLocal باستخدام السمة
currentValue
الخاصة بـ CompositionLocal التي يمكن الوصول إليها من داخل دالة 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) - تجنُّب حدوث توقّف تام في Recomposer عند الوصول إلى ساعة عرض اللقطات (07e5c6)
الإصدار 1.7.0-alpha05
20 مارس 2024
تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha05
. يحتوي الإصدار 1.7.0-alpha05 على عمليات الدمج هذه.
إصلاح الأخطاء
- محو التغييرات المتأخرة في التركيبة غير النشطة (5950bc)
الإصدار 1.7.0-alpha04
6 مارس 2024
تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha04
. يحتوي الإصدار 1.7.0-alpha04 على عمليات الدمج هذه.
تحسينات على الأداء
- استدعاء
Snapshot.current
مرة واحدة لكل تقييم حالة مشتقة (ee7daf) - قراءة
currentRecord
مرة واحدة لكل ملاحظة في التكوين (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 عمليات الإيداع هذه.
إصلاح الأخطاء
- إبطال صلاحية دوال lambda القابلة للإنشاء في التركيبات الفرعية في الإطار نفسه (98301c)
- يجب استدعاء
onRelease
بنفس ترتيبonForgotten
. (2cd790) - حالات تغيير الفلتر التي لم يتم رصدها في
snapshotFlow
(796b80)
تحسينات على الأداء
- تعديل أداة مراقبة اللقطات في مكانها عندما تكون شفافة. (f60f30)
- تحسين
SnapshotIdSet.lowest()
(7ae149) - استخدِم
fold()
لا يتطلّب تخصيصًا فيSnapshotIdSet
. (532b7d) - إزالة تخصيص المكرّر (83f96b)
الإصدار 1.7.0-alpha01
24 يناير 2024
تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha01
. يحتوي الإصدار 1.7.0-alpha01 على عمليات الإيداع هذه.
تحسين الأداء
- إضافة إمكانية إنشاء خانات بعد إضافة مجموعة فرعية (b5960c)
- تحسين تعديلات التسجيل لحالات اللقطات (28c3fe)
- تفعيل وضع التخطّي القوي (ed1766)
إصلاح الأخطاء
- حساب بيانات وصفية للمَعلمات التلقائية في ميزة "تذكُّر" المضمّنة (096665)
- جعل
currentCompoundHashKey
فريدًا في المزيد من الحالات (d4a872) - إدراك المجموعات عند الخروج من استدعاء الدالة المضمّنة (2a90fc)
الإصدار 1.6
الإصدار 1.6.8
12 يونيو 2024
تم طرح androidx.compose.runtime:runtime-*:1.6.8
. يحتوي الإصدار 1.6.8 على عمليات الدمج هذه.
الإصدار 1.6.7
1 مايو 2024
تم طرح androidx.compose.runtime:runtime-*:1.6.7
. يحتوي الإصدار 1.6.7 على عمليات الدمج هذه.
الإصدار 1.6.6
17 أبريل 2024
تم طرح androidx.compose.runtime:runtime-*:1.6.6
. لم يتم إجراء أي تغييرات منذ الإصدار الأخير.
الإصدار 1.6.5
3 أبريل 2024
تم طرح androidx.compose.runtime:runtime-*:1.6.5
. يحتوي الإصدار 1.6.5 على عمليات الدمج هذه.
الإصدار 1.6.4
20 مارس 2024
تم طرح androidx.compose.runtime:runtime-*:1.6.4
. يحتوي الإصدار 1.6.4 على عمليات الدمج هذه.
الإصدار 1.6.3
6 مارس 2024
تم طرح androidx.compose.runtime:runtime-*:1.6.3
. يحتوي الإصدار 1.6.3 على عمليات الدمج هذه.
الإصدار 1.6.2
21 فبراير 2024
تم طرح androidx.compose.runtime:runtime-*:1.6.2
. يتضمّن الإصدار 1.6.2 عمليات الإيداع هذه.
الإصدار 1.6.1
7 فبراير 2024
تم طرح androidx.compose.runtime:runtime-*:1.6.1
. يحتوي الإصدار 1.6.1 على عمليات الدمج هذه.
إصلاح الأخطاء
- يجب استدعاء
onRelease
بنفس ترتيبonForgotten
. (2cd790) - حالات تغيير الفلتر التي لم يتم رصدها في
snapshotFlow
(796b80)
الإصدار 1.6.0
24 يناير 2024
تم طرح androidx.compose.runtime:runtime-*:1.6.0
. يحتوي الإصدار 1.6.0 على عمليات الدمج هذه.
التغييرات المهمة منذ الإصدار 1.5.0
الميزات الجديدة
- إعادة طرح الاستثناءات التي يتم تجاهلها أثناء حلقة إعادة الإنشاء (4dff9a)
تحسين الأداء
- تحسين تعديلات التسجيل لحالات اللقطات (28c3fe)
- تحسين
rememberSaveable
(f01d79) - تأجيل إعادة قراءة الحالات المشتقة إلى حين تسجيل التغييرات (f38099)
- تحسين توفير القيم المحلية للتركيب (a337ea)
إصلاح الأخطاء
- إصلاح مشكلة تسريب الذاكرة في جدول الخانات (73fcfe)
- تخطّي إعادة إنشاء التركيبات الفرعية التي ستتم إزالتها (Ieeb99، b/254645321)
- لا يتم تشغيل دورات حياة
RememberObserver
إلا عند تخزينها في عملية حسابية تتضمّن remember. (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 على تعبيرات lambda المضمّنة. (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
إلا عند تخزينها في عملية حسابية تتضمّن remember. (f6b4dc) - تحسين عمليات التخصيص في ترتيب قائمة عمليات الإبطال (954d63)
- استخدِم خرائط جديدة غير مخصّصة في
SnapshotStateObserver
. (4303ce) - محو عمليات الإبطال عند إيقاف التركيب (e001be)
الإصدار 1.6.0-alpha07
4 أكتوبر 2023
تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha07
. يحتوي الإصدار 1.6.0-alpha07 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تم الآن وضع علامة
RandomAccess
علىSnapshotStateList
لتفعيل استخدام إصدار أدوات المساعدة في القوائم الذي يتيح الفهرسة المباشرة. (I5210c، b/219554654)
الإصدار 1.6.0-alpha06
20 سبتمبر 2023
تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha06
. يحتوي الإصدار 1.6.0-alpha06 على عمليات الإيداع هذه.
الإصدار 1.6.0-alpha05
6 سبتمبر 2023
تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha05
. يحتوي الإصدار 1.6.0-alpha05 على عمليات الإيداع هذه.
الإصدار 1.6.0-alpha04
23 أغسطس 2023
تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha04
. يحتوي الإصدار 1.6.0-alpha04 على عمليات الإيداع هذه.
الميزات الجديدة
- إعادة طرح الاستثناءات التي يتم تجاهلها أثناء حلقة إعادة الإنشاء (4dff9a)
تغييرات واجهة برمجة التطبيقات
- تمت إضافة طريقة لإيقاف
ReusableComposition
، ما يؤدي إلى إزالة الملاحظات مع إبقاء العُقد في مكانها. يمكن إعادة تفعيل التجميع الذي تم إيقافه من خلال استدعاءsetContent
. (Ib7f31) - إضافة واجهة
ReusableComposition
لإدارة دورة الحياة وإعادة استخدام التركيبات الفرعية (I812d1، b/252846775)
الإصدار 1.6.0-alpha03
9 أغسطس 2023
تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha03
. يحتوي الإصدار 1.6.0-alpha03 على عمليات الإيداع هذه.
إصلاح الأخطاء
- إصلاح مشكلة تحسين
CompositionLocalProvider
الجديدة (3118e88) - تصحيح طريقة تفكيك عُقد المحتوى القابلة للنقل (5e3d59b)
الإصدار 1.6.0-alpha02
26 يوليو 2023
تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha02
. يحتوي الإصدار 1.6.0-alpha02 على عمليات الإيداع هذه.
الميزات الجديدة وتحسينات الأداء
- تحسين
rememberSaveable
(f01d79) - تأجيل إعادة قراءة الحالات المشتقة إلى حين تسجيل التغييرات (f38099)
- تحسين توفير القيم المحلية للتركيب (a337ea)
- يتم وضع علامة
@ExplicitGroupsComposable
علىSideEffect
لتجنُّب إنشاء مجموعة. (I74815) - تجنُّب مقارنة الخرائط المحلية للتركيب عند إعادة الاستخدام (782071)
تغييرات واجهة برمجة التطبيقات
- تمت إضافة تحميل زائد لحالة خاصة إلى
CompositionLocalProviders
يتجنّب النفقات العامة المستخدَمة لتوفير قيم متعددة بشكل أسرع، ولكنّه يفرض نفقات عامة عند توفير قيمة واحدة. (I6d640، b/288169379)
إصلاح الأخطاء
- إصلاح مشكلة تسريب الذاكرة في جدول الخانات (73fcfe)
- إصلاح طريقة استعادة
rememberSaveable
عندما تعرضstateSaver
القيمة null (90748c)
الإصدار 1.6.0-alpha01
21 حزيران (يونيو) 2023
تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha01
. يحتوي الإصدار 1.6.0-alpha01 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تخطّي إعادة إنشاء التركيبات الفرعية التي ستتم إزالتها (Ieeb99، b/254645321)
- تقليل عمليات التخصيص عند تطبيق اللقطات (I65c09)
- تجنُّب احتساب
readableHash
فيDerivedState
إذا لم يتم تعديل اللقطة (68c565)
الإصدار 1.5
الإصدار 1.5.4
18 أكتوبر 2023
تم طرح androidx.compose.runtime:runtime-*:1.5.4
. يحتوي الإصدار 1.5.4 على عمليات الإيداع هذه.
الإصدار 1.5.3
4 أكتوبر 2023
تم طرح androidx.compose.runtime:runtime-*:1.5.3
. يحتوي الإصدار 1.5.3 على عمليات الإيداع هذه.
الإصدار 1.5.2
27 سبتمبر 2023
تم طرح androidx.compose.runtime:runtime-*:1.5.2
. يحتوي الإصدار 1.5.2 على عمليات الإيداع هذه.
الإصدار 1.5.1
6 سبتمبر 2023
تم طرح androidx.compose.runtime:runtime-*:1.5.1
. يحتوي الإصدار 1.5.1 على عمليات الدمج هذه.
الإصدار 1.5.0
9 أغسطس 2023
تم طرح androidx.compose.runtime:runtime-*:1.5.0
. يحتوي الإصدار 1.5.0 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إزالة عمليات التخصيص في إعادة التركيب والصور المتحركة الملوّنة و
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 - إصلاح العلامات المتغيرة لعمليات إعادة تشغيل lambdas ea81df9
- إصلاح مشكلة تراجع التعديل المباشر في Composable مع العُقد 73fd4d8
- يجب أن توقِف ON_STOP عمليات بث ساعة اللقطات مؤقتًا بدلاً من إنشاء ae276f1
- إبطال نطاقات
SnapshotStateObserver
للحالات المشتقة غير المتغيرة 84d9b1c - إصلاح مشكلة محتملة في التوقف التام عند التخلص من التركيبات 28761fc
- حلّ مشكلة نقل المحتوى إلى تركيبة فرعية 92d4156
- إصلاح العلامات المتغيرة لعمليات إعادة تشغيل lambdas (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()
إلى أنواعها المتخصّصة المقابلة للعناصر الأساسية. رقم تعريف أداة Lint هوAutoboxingStateCreation
. في السابق، كان يتم تفعيل عملية الفحص هذه تلقائيًا لجميع المشاريع. لعرض هذا التحذير في محرّر Android Studio وفي نواتج lint لمشروعك، غيِّر مستوى خطورته من "معلومات" إلى "تحذير" (أو أعلى) من خلال تحديدwarning "AutoboxingStateCreation"
داخل إعدادات build.gradle أو build.gradle.kts للوحدة كما هو موضّح (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
الإصدار 1.5.0-beta03
28 يونيو 2023
تم طرح androidx.compose.runtime:runtime-*:1.5.0-beta03
. يحتوي الإصدار 1.5.0-beta03 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تخطّي إعادة إنشاء التركيبات الفرعية التي ستتم إزالتها (Ieeb99، b/254645321)
الإصدار 1.5.0-beta02
7 يونيو 2023
تم طرح androidx.compose.runtime:runtime-*:1.5.0-beta02
. يحتوي الإصدار 1.5.0-beta02 على عمليات الإيداع هذه.
تحسينات على الأداء
- تجنَّب احتساب
readableHash
فيDerivedState
إذا لم يتم تعديل اللقطة. (307102)
الإصدار 1.5.0-beta01
24 مايو 2023
تم طرح androidx.compose.runtime:runtime-*:1.5.0-beta01
. يحتوي الإصدار 1.5.0-beta01 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إزالة عمليات التخصيص في إعادة التركيب والصور المتحركة الملوّنة و
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)
- إصلاح العلامات المتغيرة لعمليات إعادة تشغيل lambdas (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 - إصلاح العلامات المتغيرة لعمليات إعادة تشغيل lambdas ea81df9
- إصلاح مشكلة تراجع التعديل المباشر في Composable مع العُقد 73fd4d8
- يجب أن توقِف ON_STOP عمليات بث ساعة اللقطات مؤقتًا بدلاً من إنشاء ae276f1
- إبطال نطاقات
SnapshotStateObserver
للحالات المشتقة غير المتغيرة 84d9b1c - إصلاح مشكلة محتملة في التوقف التام عند التخلص من التركيبات 28761fc
- حلّ مشكلة نقل المحتوى إلى تركيبة فرعية 92d4156
الإصدار 1.5.0-alpha02
5 أبريل 2023
تم طرح androidx.compose.runtime:runtime-*:1.5.0-alpha02
. يحتوي الإصدار 1.5.0-alpha02 على عمليات الإيداع هذه.
الميزات الجديدة
- يمكن الآن إنشاء دوال قابلة للإنشاء باستخدام عامل التشغيل
getValue
في Kotlin (f174f6e)
إصلاح الأخطاء وتحسينات في الأداء
- الكتابة فوق سجلّات عناصر الحالة باستخدام سجلّات الحالة التي لا يمكن الوصول إليها (c986960)
- استخدام أداة إنشاء النطاق الصحيح عند إنشاء المجموعات (9a5e5b6)
- إصلاح الخطأ
endToMarker()
عند إنهاء مجموعات العُقد (d71d980) - استخدام مجموعة
SlotWriter
الحالية للتحقّق من الإيقاف (a0b518b) - استخدِم
IdentityArraySet
لتخزين عمليات إبطال اللقطات (7f60cca) - أزِل
fill
فيSlotTable.moveSlotGapTo()
وانقله إلى الإغلاق (81f9935) - إصلاح مشكلة عدم إبطال المحتوى أثناء نقله (1d7c024)
- إصلاح عمليات الإبطال الفوري للمحتوى القابل للنقل الذي تم نقله (8676618)
- تقليل عمليات التخصيص لملاحظات اللقطات (5bc535f)
الإصدار 1.5.0-alpha01
22 مارس 2023
تم طرح androidx.compose.runtime:runtime-*:1.5.0-alpha01
. يحتوي الإصدار 1.5.0-alpha01 على عمليات الإيداع هذه.
الميزات الجديدة
- إضافة
Modifier.Node#coroutineScope
للسماح لـModifier.Nodes
بتشغيل الروتينات الفرعية (I76ef9) - السماح لـ
Modifier.Nodes
بقراءةCompositionLocals
من خلال تنفيذ واجهةCompositionLocalConsumerModifierNode
(Ib44df)
الإصدار 1.4
الإصدار 1.4.3
3 مايو 2023
تم إصدار androidx.compose.runtime:runtime-*:1.4.3
بدون أي تغييرات.
الإصدار 1.4.2
19 أبريل 2023
تم طرح androidx.compose.runtime:runtime-*:1.4.2
. يتضمّن الإصدار 1.4.2 عمليات الإيداع هذه.
إصلاح الأخطاء
إصلاح مشكلة محتملة في قائمة اللقطات والخريطة 2eb6570
قد تحدث حالة توقّف تام عند إضافة محتوى إلى
SnapshotStateList
أوSnapshotStateMap
إذا كان التعديل متزامنًا مع عملية كتابة مباشرة إلى سجلّ الحالة. أصبح من المرجّح بشكل كبير مواجهة هذه المشكلة مع التغييرات التي تمّ إدخالها من خلال 93fcae828b التي تستخدم عمليات كتابة مباشرة لإصدار السجلات غير المستخدَمة.يتم الآن ترتيب عمليات القفل بحيث لا تتم محاولة أخذ قفل لقطة عندما يكون قفل الخريطة أو القائمة قيد الاستخدام.
الإصدار 1.4.1
5 أبريل 2023
تم طرح androidx.compose.runtime:runtime-*:1.4.1
. يحتوي الإصدار 1.4.1 على عمليات الدمج هذه.
إصلاح الأخطاء
- إصلاح
endToMarker()
عند إنهاء مجموعات العُقد d71d980
الإصدار 1.4.0
22 مارس 2023
تم طرح androidx.compose.runtime:runtime-*:1.4.0
. يتضمّن الإصدار 1.4.0 عمليات الإيداع هذه.
التغييرات المهمة منذ الإصدار 1.3.0
- استخدام القيمة الأولية من
LiveData
للتركيبة الأولى 3680e25 - أضِف
ComposeNodeLifecycleCallback
لمراقبة مراحل نشاط عُقد Compose. 8b6a258 - إضافة الموقع
parameterTypes
إلىComposableMethod
7b6c7ad
إصلاح الأخطاء وتحسينات على الأداء
- محو كلا فهرسي النطاق في
SnapshotStateObserver
29f4a3e - إضافة المجموعات المطلوبة في نص دوال lambda غير القابلة للتخطّي 7d06752
- تحسين خصائص مرجع الذاكرة للحالة 93fcae8
- إزالة التحويل إلى النوع الأساسي في عمليات البحث المحلية في التركيب 0875717
- استخدام المفتاح الصحيح لمجموعات العُقد غير القابلة لإعادة الاستخدام 6388d8d
- حماية
SnapshotStateObserver
من عمليات التطبيق المتكرّرة والمتزامنة 98cb6ba - تمت إضافة عملية التحقّق من حدود الفهرس في طريقة
IdentityArraySet
"get" 35a77d3 - تعديل وحدة الإنشاء لاستخدام إضافات
ViewTreeLifecycleOwner
21c2122 - إرسال إشعارات التطبيق بعد أن ينتهي Recomposer من عرض الإطار 98f2641
- إصلاح عُطل فهرس خارج الحدود عند إلغاء Recomposer 8f8656f
- فرض إعادة الإنشاء دائمًا في حال تغيّر موفّرو العناصر الرئيسية في Composition 9526fcc
- Recomposer tolerance for cancelled Jobs 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 على عمليات الدمج التالية.
تغييرات واجهة برمجة التطبيقات
- المزيد من أنواع/قيم null للدوال المضمّنة/المخفية التي تم إيقافها نهائيًا (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
- تمت إضافة واجهة برمجة تطبيقات
ComposableMethod
جديدة للسماح باستدعاءات أكثر موثوقية تستند إلى الانعكاس لواجهات برمجة التطبيقات القابلة للإنشاء. - نقل invokeComposable إلى وقت تشغيل Compose
- إعادة تصميم واجهة برمجة التطبيقات لاستدعاء طريقة قابلة للإنشاء
إصلاحات وقت التشغيل
- إصلاح اختبار النطاق الخاطئ للتحقّق من العلامات في جدول الفتحات
- السماح بنقل المحتوى القابل للنقل إلى داخل SubcomposeLayout وخارجها
- إصلاح مشكلة نقل المحتوى إلى محتوى جديد في تركيبة فرعية
نظام اللقطات
- أجرينا تحسينات متنوّعة على نظام اللقطات تتعلّق بإدارة الذاكرة والأداء والصحة.
- تحسين عملية إزالة النطاق في SnapshotStateObserver
- التخلّص من اللقطات المتداخلة التي تم إنشاؤها من لقطات شفافة
- إصلاح مشكلة التزامن عند قراءة الحالة من اللقطة العامة
- إتاحة استخدام DerivedState في SnapshotStateObserver
- منع إزالة الحالة المشتقة من التركيب عند قراءتها في نطاقات أخرى
- استخدام IdentityArrayMap بدلاً من HashMap داخل DerivedState
- تعديل مراقبي الحالة المشتقة لاستخدام متّجه قابل للتغيير
- تنظيف حالة Update SnapshotStateObserver
- استبدال SnapshotStateObserver.invalidated بـ ArraySet
- إصلاح مشكلة التزامن عند قراءة الحالة من اللقطة العامة
- إصلاح استخدام سجلّ قديم في عملية حساب تجزئة DerivedState
- إصلاح مشكلة حالة التزامن عند تقديم اللقطة العامة
- تسريع عملية تنظيف عمليات مراقبة النطاق في SnapshotStateObserver
الإصدار 1.3.0-rc01
5 أكتوبر 2022
تم طرح androidx.compose.runtime:runtime-*:1.3.0-rc01
. يحتوي الإصدار 1.3.0-rc01 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تم إصلاح الخطأ
ArrayIndexOutOfBoundsException
الذي كان مصدره جدول مواضع الإعلانات (b/249076084)
الإصدار 1.3.0-beta03
21 سبتمبر 2022
تم طرح androidx.compose.runtime:runtime-*:1.3.0-beta03
. يحتوي الإصدار 1.3.0-beta03 على عمليات الإيداع هذه.
تغيير في السلوك قد يؤدي إلى أعطال
- تم تغيير المَعلمة إلى
remember
وrememberCoroutineScope
لتصبحcrossinline
. سيؤدي ذلك إلى تسجيل خطأ في عمليات الإرجاع المبكر بدلاً من السماح بها، ما سيؤدي إلى تسجيل خطأ داخلي لاحقًا. - يمكن أن يؤدي هذا التغيير إلى ظهور أخطاء جديدة في المترجم تتطلّب إزالة عمليات الإرجاع غير المحلية من تعبيرات lambda التي تم تمريرها إلى هذه الدوال. (Ibea62)
الإصدار 1.3.0-beta02
7 أيلول (سبتمبر) 2022
تم طرح androidx.compose.runtime:runtime-*:1.3.0-beta02
. يحتوي الإصدار 1.3.0-beta02 على عمليات الإيداع هذه.
إصلاح الأخطاء
- واجهة برمجة التطبيقات المعدَّلة (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 تنقل حالتها والعُقد المقابلة إلى أي موقع جديد يتم استدعاؤها فيه. عندما تخرج المكالمة السابقة من التجميع، يتم الاحتفاظ بالحالة مؤقتًا، وإذا دخلت مكالمة جديدة إلى التجميع، يتم نقل الحالة والعُقد المرتبطة بها إلى موقع المكالمة الجديدة. في حال عدم إضافة مكالمة جديدة، ستتم إزالة الحالة نهائيًا وسيتم إشعار المراقبين المسجّلين.إذا تم استدعاء
movableContentOf
lambda عدة مرات في التركيبة نفسها، يتم إنشاء حالة وعُقد جديدة لكل عملية استدعاء، وعندما تغادر عمليات الاستدعاء التركيبة وتدخل عمليات استدعاء جديدة، يتم نقل الحالة من عمليات الاستدعاء الأولى التي تغادر إلى عمليات الاستدعاء التي تدخل بالترتيب الذي يتم استدعاؤها به. تتم إزالة جميع الحالات التي لم تتم المطالبة بها من خلال المكالمات الجديدة نهائيًا.بالإضافة إلى هذه الميزة وبعض الميزات الجديدة الأخرى، تم تخصيص الكثير من الوقت لتحقيق الاستقرار في وقت التشغيل ونظام حالة Snapshot. تمت إزالة العديد من أخطاء تسريب الذاكرة وتحسين مسارات الرموز البرمجية.
يمكنك الاطّلاع أدناه على قائمة ملخّصة بالتغييرات:
الميزات الجديدة في 1.2
- إضافة لقطة تجريبية غير آمنة للدخول/الخروج
- إضافة واجهة برمجة التطبيقات التجريبية Snapshot.asContextElement
- Introduce Snapshot.withoutReadObservation
- السماح بنقل الحالة داخل تركيبة
- تتبُّع عمليات إعادة التكوين في Compose
الأداء في 1.2
- تحسين الأداء المحلي لـ Composition
- يجب استخلاص ملفات Baseline Profile الخاصة بـ Compose باستخدام مقاييس الأداء
إصلاح الأخطاء في 1.2
- إزالة معلومات التتبُّع من نطاقات إعادة إنشاء الإصدار
- منع إزالة الحالة المشتقة من التركيب عند قراءتها في نطاقات أخرى
- استخدام removeScope() أكثر فعالية في SnapshotStateObserver
- إزالة التبعيات غير الضرورية للحالة المشتقة في التركيب
- إصلاح مشكلة تغيُّر currentCompositeKeyHash بعد إعادة التركيب الداخلي داخل المحتوى القابل للنقل
- تنظيف التركيبات غير الصالحة أثناء التخلص منها
- إصلاح قراءة حالة derive أثناء إعادة التركيب
- إصلاح مشكلة تسريب الذاكرة عند مراقبة عناصر الحالة المشتقة
- تم إصلاح مفتاح التجزئة المركّب 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 باستخدام طرق الواجهة التلقائية في الإصدار 8 من حزمة تطوير البرامج (JDK) (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 على عمليات الإيداع هذه.
المساهمة الخارجية
- تم تعديلها لاستخدام الإصدار 1.6.0 من Kotlinx coroutines (I3366d)
الإصدار 1.2.0-alpha04
23 فبراير 2022
تم طرح androidx.compose.runtime:runtime-*:1.2.0-alpha04
. يحتوي الإصدار 1.2.0-alpha04 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
تمت إضافة
ComposableTarget
وComposableTargetMarker
وComposableOpenTarget
التي تتيح إعداد تقارير في وقت الترجمة عن الحالات التي يتم فيها استدعاء دالة قابلة للإنشاء تستهدف أداة تطبيق لم يتم تصميمها لاستخدامها.في معظم الحالات، يمكن استنتاج التعليقات التوضيحية من خلال المكوّن الإضافي لمترجم Compose، لذا يجب أن يكون استخدام هذه التعليقات التوضيحية مباشرةً أمرًا نادرًا . تشمل الحالات التي لا يمكن استنتاجها إنشاء واستخدام أداة تطبيق مخصّصة، أو دوال قابلة للإنشاء مجرّدة (مثل طرق الواجهة)، أو حقول أو متغيرات عامة تكون تعبيرات lambda قابلة للإنشاء (يتم استنتاج المتغيرات والمعلَمات المحلية)، أو عند استخدام
ComposeNode
أو دوال قابلة للإنشاء ذات صلة.بالنسبة إلى أدوات التطبيق المخصّصة، يجب إضافة التعليق التوضيحي
CompoableTarget
إلى الدوال القابلة للإنشاء التي تستدعيComposeNode
أوReusableComposeNode
، وإلى أي أنواع مَعلمات lambda قابلة للإنشاء. ومع ذلك، يُنصح بإنشاء تعليق توضيحي يتضمّنComposableTargetMarker
، ثم استخدام التعليق التوضيحي الذي يتضمّنComposableTarget
بدلاً من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 تنقل حالتها والعُقد المقابلة إلى أي موقع جديد يتم استدعاؤها فيه. عندما تغادر المكالمة السابقة التركيب، يتم الحفاظ على الحالة مؤقتًا، وإذا دخلت مكالمة جديدة إلى التركيب، يتم نقل الحالة والعُقد المرتبطة بها إلى موقع المكالمة الجديدة. إذا لم تتم إضافة أي مكالمة جديدة، ستتم إزالة الحالة نهائيًا وسيتم إعلام المراقبين المسجّلين.إذا تم استدعاء دالة
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 بشكل ثابت
- تحسينات على حجم عناصر اللمس المستهدَفة
- يُرجى العِلم أنّه في ما يتعلّق بالإصدار 1.0 من Compose، ستوسّع مكوّنات Material مساحة التنسيق لتلبية إرشادات تسهيل الاستخدام في Material بشأن حجم مساحة اللمس. على سبيل المثال، سيتم توسيع مساحة اللمس الخاصة بالزر إلى حدّ أدنى يبلغ
48x48dp
، حتى إذا ضبطت حجم الزر على قيمة أصغر. يتوافق ذلك مع سلوك "مكوّنات Material Design" نفسه، ما يوفّر سلوكًا متسقًا في حال استخدام كلّ من "طرق العرض" وCompose. يضمن هذا التغيير أيضًا استيفاء الحدّ الأدنى من متطلبات إمكانية الوصول إلى مساحة اللمس عند إنشاء واجهة المستخدم باستخدام مكوّنات Compose Material. - إتاحة شريط التنقّل بشكل ثابت
- تحديث عدد من واجهات برمجة التطبيقات التجريبية السابقة إلى إصدار ثابت
- التوافق مع الإصدارات الأحدث من Kotlin
الإصدار 1.1.0-rc03
26 يناير 2022
تم طرح androidx.compose.runtime:runtime-*:1.1.0-rc03
. يتضمّن الإصدار 1.1.0-rc03 عمليات الإيداع هذه.
إصلاح الأخطاء
- تم تعديل التطبيق ليتوافق مع Compose Material
1.1.0-rc03
الإصدار 1.1.0-rc01
15 كانون الأول (ديسمبر) 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-rc01
. يحتوي الإصدار 1.1.0-rc01 على عمليات الإيداع هذه.
الإصدار 1.1.0-beta04
1 كانون الأول (ديسمبر) 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-beta04
. يحتوي الإصدار 1.1.0-beta04 على عمليات الإيداع هذه.
الميزات الجديدة
- تم تعديلها لتكون متوافقة مع Kotlin
1.6.0
الإصدار 1.1.0-beta03
17 نوفمبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-beta03
. يحتوي الإصدار 1.1.0-beta03 على عمليات الدمج هذه.
الإصدار 1.1.0-beta02
3 نوفمبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-beta02
. يحتوي الإصدار 1.1.0-beta02 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تم تقسيم رمز اللقطة إلى ملفات متعددة، ولكنها لا تزال كلها مضمّنة في فئة JVM نفسها. (Ic6c98)
الإصدار 1.1.0-beta01
27 أكتوبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-beta01
. يحتوي الإصدار 1.1.0-beta01 على عمليات الإيداع هذه.
الإصدار 1.1.0-alpha06
13 أكتوبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha06
. يحتوي الإصدار 1.1.0-alpha06 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إزالة
InternalCompilerApi
من طرق Composer التي يجب استدعاؤها على مستوى الوحدات (I1aa0b) - تم إيقاف
Recomposer.state
نهائيًا واستبداله بـRecomposer.currentState
لتغيير نوعه إلى StateFlow (Ic2ab3، b/197773820)
الإصدار 1.1.0-alpha05
29 سبتمبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha05
. يحتوي الإصدار 1.1.0-alpha05 على عمليات الإيداع هذه.
الإصدار 1.1.0-alpha04
15 سبتمبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha04
. يحتوي الإصدار 1.1.0-alpha04 على عمليات الإيداع هذه.
الإصدار 1.1.0-alpha03
1 سبتمبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha03
. يحتوي الإصدار 1.1.0-alpha03 على عمليات الإيداع هذه.
الميزات الجديدة
- يتوافق "مترجم Compose" الآن مع الإصدارات القديمة من "وقت تشغيل Compose" (1.0). قبل هذا التغيير، كان برنامج Compose Compiler متوافقًا فقط مع Compose Runtime من الإصدار نفسه أو إصدار أحدث. بعد هذا التغيير، يصبح Compose Compiler متوافقًا مع إصدار قديم من Compose Runtime (الإصدار 1.0). (aosp/1796968)
- تم تعديل الإصدار
1.1.0-alpha03
من Compose ليعتمد على الإصدار1.5.30
من Kotlin. (I74545)
الإصدار 1.1.0-alpha02
18 أغسطس 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha02
. يحتوي الإصدار 1.1.0-alpha02 على عمليات الإيداع هذه.
الإصدار 1.1.0-alpha01
4 أغسطس 2021
تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha01
. يحتوي الإصدار 1.1.0-alpha01 على عمليات الإيداع هذه.
الإصدار 1.0
الإصدار 1.0.5
3 نوفمبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.0.5
. يحتوي الإصدار 1.0.5 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تم إصلاح خطأ في تتبُّع الأعطال في مثيلات derivedStateOf. (aosp/1792247)
الإصدار 1.0.4
13 أكتوبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.0.4
. يحتوي الإصدار 1.0.4 على عمليات الإيداع هذه.
تحديثات التبعيات
- تم تعديلها لتعتمد على Kotlin
1.5.31
الإصدار 1.0.3
29 سبتمبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.0.3
. يحتوي الإصدار 1.0.3 على عمليات الإيداع هذه.
تحديثات التبعيات
- تم تعديلها لتعتمد على Kotlin
1.5.30
الإصدار 1.0.2
1 سبتمبر 2021
تم طرح androidx.compose.runtime:runtime-*:1.0.2
. يتضمّن الإصدار 1.0.2 عمليات الدمج التالية.
تم تعديل التطبيق ليتوافق مع إصدار Compose 1.0.2
. لا يزال الإصدار 1.0.2
من Compose متوافقًا مع الإصدار 1.5.21
من Kotlin.
الإصدار 1.0.1
4 أغسطس 2021
تم طرح androidx.compose.runtime:runtime-*:1.0.1
. يحتوي الإصدار 1.0.1 على عمليات الإيداع هذه.
تحديثات التبعيات
- تم تعديلها لتعتمد على الإصدار
1.5.21
من Kotlin.
الإصدار 1.0.0
28 يوليو 2021
تم طرح androidx.compose.runtime:runtime-*:1.0.0
. يتضمّن الإصدار 1.0.0 عمليات الدمج هذه.
الميزات الرئيسية في الإصدار 1.0.0
هذا هو أول إصدار ثابت من Compose. يُرجى الاطّلاع على مدوّنة Compose Release الرسمية لمزيد من التفاصيل.
المشاكل المعروفة
إذا كنت تستخدم الإصدار 4 من Android Studio Bumblebee Canary أو الإصدار
7.1.0-alpha04
/7.1.0-alpha05
من "مكوّن Android الإضافي في Gradle"، قد تواجه الخطأ التالي: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 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة واجهات برمجة تطبيقات جديدة لمترجم Compose تتيح إزالة معلومات المصدر التي ينشئها المترجم أثناء تصغير حجم المصدر. (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) }
عند استخدامه داخل وجهة في Navigation Compose (I1312b وb/180042685 وb/180701630)
الإصدار 1.0.0-beta01
24 شباط (فبراير) 2021
تم طرح androidx.compose.runtime:runtime-*:1.0.0-beta01
. يحتوي الإصدار 1.0.0-beta01 على عمليات الإيداع هذه.
هذا هو الإصدار الأول من الإصدار التجريبي 1.0.0 من Compose.
تغييرات واجهة برمجة التطبيقات
- أضِف
Recomposer.runRecomposeConcurrentlyAndApplyChanges
واجهة برمجة التطبيقات التجريبية لإعادة إنشاء التركيبات غير الصالحة خارج حلقة عرض اللقطات الرئيسية. (I342d0) - يتم الآن التحقّق من صحة أي عناصر قابلة للإنشاء تم وضع علامة @ReadOnlyComposable عليها في وقت الترجمة البرمجية للتأكّد من أنّها لا تجري سوى عمليات استدعاء لعناصر أخرى تحمل العلامة @ReadOnlyComposables (I58961)
أصبح من الضروري الآن تقديم
defaultFactory
لـcompositionLocalOf
وstaticCompositionLocalOf
بدلاً من أن يكون اختياريًا.يزيل هذا التغيير خطأ محتملاً في النوع بالنسبة إلى الأنواع غير القابلة للتصغير التي لم يتم توفير أي مصنع تلقائي لها. في السابق، كان هذا الإجراء يؤدي إلى توفير مرجع فارغ لنوع غير قابل للتصغير.
بالنسبة إلى الأنواع التي تقبل القيم الخالية، ننصحك بتوفير
{ null }
كإعداد تلقائي للمصنع.لا ننصح باستخدام متغيرات محلية مع أنواع غير قابلة للتصغير إلا إذا كان من الممكن توفير قيمة تلقائية معقولة. إذا لم تكن هناك قيمة تلقائية منطقية، يجب أن تعرض دالة lambda
defaultFactory
استثناءً. ومع ذلك، فإنّ طرح استثناء يعني أنّ مستهلكي اللغة المحلية سيكون لديهم اعتماد ضمني على توفيرها، وهو اعتماد لا يفرضه نظام النوع. (Ifbd2a)تمت إزالة الرموز المتوقّفة نهائيًا من وقت تشغيل Compose (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
وتم السماح بقيمة فارغة. - تمت إعادة تسمية المَعلمة
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)
- تمت إعادة تسمية Ambients لتتطابق مع إعادة تسمية Ambient -> CompositionLocal. كانت أسماء Ambients في السابق AmbientFoo، وأصبحت أسماء CompositionLocals الآن LocalFoo. (I2d55d)
- تمت إعادة تسمية Ambient إلى CompositionLocal، وambientOf / staticAmbientOf إلى compositionLocalOf / staticCompositionLocalOf على التوالي. يساعد هذا التغيير في توضيح الغرض من CompositionLocal بشكل أكبر: آلية لتوفير / استرداد القيم المحلية لتكوين معيّن. يجب أن تبدأ مثيلات CompositionLocal بالبادئة
Local
، مثل val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - تم نقل الدالتَين takeMutableSnapshot وtakeSnapshot لتصبحا دالتَين مصاحبتَين للدالة Snapshot. (I91f19)
تم إيقاف
@ComposableContract
نهائيًا لصالح ثلاث تعليقات توضيحية أكثر تحديدًا.أصبح
@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 لاستخدام واجهة بدلاً من فئة محدّدة. لم تعُد الواجهة تستخدم مَعلمة نوع.
هذا تغيير داخلي لا يؤثر في توافق الرمز المصدري، ولكنه تغيير ثنائي غير متوافق. (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، والتخلص من تركيبها لإعادة إنشائها مرة أخرى لاحقًا إضافة واجهات برمجة تطبيقات لتثبيت Recomposers ذات النطاق المحدود باختيار نافذة معيّنة واكتشافها، وCompositionReferences لإنشاء عمليات تركيب فرعية
إضافة ViewCompositionStrategy لضبط استراتيجية التخلص من التركيب في [Abstract]ComposeViews، ويكون السلوك التلقائي هو التخلص عند فصل النافذة (I860ab)
إصلاح الأخطاء
- تعرض Recomposer الآن Flow لحالتها الحالية، ما يتيح مراقبة نشاطها ونشاط التأثيرات المرتبطة بها. (Ifb2b9)
- يمكن الآن الوصول إلى nativeKeyEvent من خلال 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 لاستخدامها في استخراج معلومات التركيب. هذه الحقول عامة ولكن ليس الغرض منها أن يتم استخدامها خارج واجهة برمجة التطبيقات ui-tooling لأنّها توفّر المعلومات الأولية التي تفسّرها واجهة برمجة التطبيقات ui-tooling (I31a9c).
لم يعُد يتم اعتبار فئة Applier (Id85b0)
تم تغيير واجهة
Applier
لتسهيل إنشاء الأشجار من الأسفل إلى الأعلى بدلاً من الأعلى إلى الأسفل.تمت إعادة تسمية الطريقة
insert()
إلىinsertTopDown()
.تمت إضافة طريقة جديدة، وهي
insertBottomUp()
.يُدرج التطبيق إما عُقدًا في الشجرة التي يعدّلها باستخدام
insertTopDown()
أوinsertBottomUp()
حسب الأداء الأفضل.بعض البنى الشجرية، مثل
LayoutNode
وView
، تكون أكثر فعالية عند إنشائها من الأسفل إلى الأعلى مقارنةً بإنشائها من الأعلى إلى الأسفل. قبل هذا التغيير، كان يجب توفير مجموعة من عمليات الإدراج لتنفيذ عملية الإنشاء من الأسفل إلى الأعلى، وكان يجب نسخها إلى كل أداة تطبيق تحتاج إلى عملية الإنشاء من الأسفل إلى الأعلى لتحسين الأداء. من خلال هذا التغيير، يتم استخدامApplier
لتجاوزinsertBottomUp()
من أجل إنشاء شجرة من الأسفل إلى الأعلى، وinsertTopDown()
لإنشاء الشجرة من الأعلى إلى الأسفل. (Icbdc2)تتيح Compose دوال جلب الخصائص التي يمكنها تنفيذ استدعاءات قابلة للإنشاء. لن نتوقف عن توفير هذه الميزة، ولكن سيتم تغيير بنية تعريف أداة جلب الخصائص على أنّها @Composable.
كانت البنية التي تم إيقافها نهائيًا لإجراء ذلك تتم من خلال إضافة تعليق توضيحي إلى السمة نفسها:
@Composable val someProperty: Int get() = ...
تتمثل الصيغة الصحيحة الآن لإجراء ذلك في إضافة تعليق توضيحي إلى دالة جلب قيمة السمة:
val someProperty: Int @Composable get() = ...
ستعمل كلتا البنيتين لفترة من الوقت، ولكنّ البنية السابقة المتوقّفة نهائيًا ستصبح في النهاية خطأ في التجميع. (Id9197)
إصلاح الأخطاء
- AndroidOwner made internal (Ibcad0، b/170296980)
- تمت إتاحة subcomposeInto(LayoutNode) للمستخدمين الداخليين فقط (Id724a)
الإصدار 1.0.0-alpha08
2 ديسمبر 2020
تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha08
. يحتوي الإصدار 1.0.0-alpha08 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة فحص lint لأسماء مَعلمات lambda القابلة للإنشاء وموضعها، وذلك للتحقّق من التوافق مع إرشادات Compose.
تم أيضًا نقل بعض واجهات برمجة التطبيقات التي تستخدم
children
كاسم لدالة lambda اللاحقة إلىcontent
، وذلك وفقًا لفحص lint والإرشادات. (Iec48e) - لم يعُد Recomposer يقبل EmbeddingContext، ويتم الحصول على تبعيات الجدولة المطلوبة من effectCoroutineContext. تم إيقاف FrameManager نهائيًا، ويجب أن تبدأ عمليات الدمج مع الأنظمة الأساسية في معالجة اللقطات العامة الخاصة بها. (I02369)
- تمت إعادة تسمية الدالة RestorableStateHolder.withRestorableState إلى RestorableStateProvider (I66640)
إصلاح الأخطاء
- تم إيقاف Ambients القديمة التي تحمل الاسم
Ambient
كلاحقة، واستبدالها بخصائص جديدة تبدأ بـ Ambient، وذلك وفقًا لإرشادات Ambients الأخرى وواجهة برمجة تطبيقات Compose. (I33440) - إزالة وحدة ui-test القديمة ورموزها الصورية (I3a7cb)
الإصدار 1.0.0-alpha07
11 نوفمبر 2020
تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha07
. يحتوي الإصدار 1.0.0-alpha07 على عمليات الإيداع هذه.
الميزات الجديدة
تغييرات واجهة برمجة التطبيقات
- تم إيقاف التعليق التوضيحي "
@UnionType
" نهائيًا (I57cde) - تمت إضافة provideDefault كبديل لـ provide لتوفير البيانات المحيطة، ويمكن استخدامه لتحديد قيم البيانات المحيطة التي سيتم ضبطها فقط عندما لا تكون هناك قيمة بيانات محيطة متوفّرة. (Id6635، b/171024925)
- تمت إعادة تسمية LaunchedTask إلى LaunchedEffect لضمان التناسق مع واجهتَي برمجة التطبيقات SideEffect وDisposableEffect. لا يُسمح باستخدام LaunchedEffect بدون مَعلمات الموضوع لتشجيع اتّباع أفضل الممارسات. (Ifd3d4)
- يتضمّن Applier الآن عمليات ردّ الاتصال onBeginChanges/onEndChanges التي يتم استدعاؤها عندما يبدأ Composer في تطبيق التغييرات على الشجرة أو ينتهي من ذلك. ويمكن استخدامها لإدارة الموارد المجمّعة إذا لزم الأمر. (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 وCompositionParent صالحًا. أصبح استخدام Explicit Recomposer مطلوبًا في عدد أقل من المواضع. (I4036f)
- تمت إضافة واجهة برمجة تطبيقات DisposableEffect المكافئة إلى SideEffect، ما يتيح تنفيذ وظيفة onCommit-with-params ولكن مع onDispose إلزامي.
- تمت إضافة واجهة برمجة التطبيقات rememberUpdatedState لنشر البيانات من إعادة التركيب إلى العمليات الجارية أو الطويلة الأمد، مثل DisposableEffects أو LaunchedTasks.
- (Id50b9)
- تتيح السمة MutableVector الآن استخدام RandomAccess (I85d73، b/170461551)
- تمت إضافة دالة SideEffect قابلة للإنشاء لتطبيق الآثار الجانبية للإنشاء على العناصر التي يديرها الإنشاء. تم تصميم 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 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- معدِّل تجريبي يعلّق معدِّل الإدخال pointerInput (Ia77d2)
- تم تحسين أداء التمرير في LazyColumn/Row من خلال تقليل العمل في التركيب الفرعي عند كل تمرير. تمت إضافة طريقة hasInvalidations() جديدة إلى فئة Composition. تمت إعادة تسمية الطريقة hasPendingChanges() من Recomposer إلى hasInvalidations() (Ib2f32 وb/168293643 وb/167972292 وb/165028371).
- إضافة واجهة برمجة التطبيقات produceState لتشغيل إجراءات فرعية من التركيب
التي تعدّل قيمة
State<T>
واحدة بمرور الوقت (Id4a57) - تمت إعادة تسمية launchInComposition إلى LaunchedTask لتتوافق مع إرشادات واجهة برمجة التطبيقات Compose (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 API إلى SnapshotStateObserver (I6e2a9)
إصلاح الأخطاء
- تم إيقاف foundation.Box نهائيًا. يُرجى استخدام foundation.layout.Box بدلاً من ذلك. (Ie5950، b/167680279)
الإصدار 1.0.0-alpha03
16 سبتمبر 2020
تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha03
. يحتوي الإصدار 1.0.0-alpha03 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- لم يعُد
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
لاستهلاك التغييرات في بيانات Snapshot وإنتاجها. (I3e722) تم تغيير اصطلاح الاستدعاء للدوال القابلة للإنشاء. هذا تغيير ثنائي قد يؤدي إلى عطل. يجب إعادة تجميع جميع المكتبات لتعمل مع هذا الإصدار من مكوّن Compose الإضافي للمترجم.
لا يؤدي هذا التغيير إلى حدوث تغيير على مستوى المصدر لأنّ واجهات برمجة التطبيقات الوحيدة التي تم تغييرها هي واجهات برمجة التطبيقات الخاصة بالمترجم والتي تتطلّب موافقة صريحة. (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 المتوقّفة نهائيًا.
تم تغيير واجهات برمجة التطبيقات الداخلية الخاصة بـ Compose لتقليل مقدار النفقات العامة اللازمة لتتبُّع عناصر الحالة، مثل
mutableStateof()
(I80ba6).تم إيقاف الدالة البرمجية القابلة للإنشاء
state { ... }
نهائيًا واستبدالها باستدعاءات صريحة للدالةremember { mutableStateOf(...) }
لزيادة الوضوح. يقلّل ذلك من مساحة واجهة برمجة التطبيقات وعدد المفاهيم المتعلّقة بإدارة الحالة، ويتوافق مع نمطby mutableStateOf()
لتفويض سمات الفئة. (Ia5727)يحدّد Flow.collectAsState الآن أداة الإرسال التلقائية من التركيب نفسه بدلاً من استخدام Dispatchers.Main كقيمة تلقائية. (I9c1d9)
تم إصلاح مشكلة تعذُّر التطبيق عند استخدام عنصر يحفظ الحالة داخل حلقة for. أصبح من المسموح الآن استخدام المفتاح نفسه في savedInstanceState()، وتم تعديل واجهة برمجة التطبيقات UiSavedStateRegistry لتتوافق مع هذا الشرط الجديد (I4ab76 وb/160042650 وb/156853976 وb/159026663 وb/154920561).
إصلاح الأخطاء
- تم إيقاف
emitView
نهائيًا. استخدِمAndroidView
بدلاً من ذلك إذا كان ذلك ممكنًا لعرض "طرق العرض" داخل Compose. يُرجى العِلم أنّه لن يكون من الممكن في المستقبل إنشاء عناصر Views وViewGroups مباشرةً إلا إذا كانت هذه العناصر عبارة عن أوراق في شجرة التركيب، وفي هذه الحالة يمكن تحقيق ذلك باستخدام 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 لسد الفجوة بين الساعات الجديدة المستندة إلى الروتينات المشتركة وواجهات برمجة التطبيقات التي لا تزال تستخدم الساعات القديمة المستندة إلى معاودة الاتصال.
أصبح MonotonicFrameClock مكافئًا لـ ManualAnimationClock، وهو الآن ManualFrameClock. (I111c7، b/161247083)
تمت إعادة تصميم Modifier.stateDraggable بالكامل وإعادة تسميته إلى Modifier.swipeable. تم تقديم فئة SwipeableState جديدة، وتمت إعادة تصميم DrawerState وBottomDrawerState لكي يتم اشتقاقها منها. لم يعُد [Modal/Bottom]DrawerLayout يقبل المَعلمة onStateChange. (I72332، b/148023068)
تم إيقاف Modifier.plus نهائيًا، يُرجى استخدام Modifier.then بدلاً من ذلك. توفّر الكلمة الأساسية "ثم" إشارة أقوى للترتيب، كما أنّها تحظر كتابة
Modifier.padding().background() + anotherModifier
، ما يؤدي إلى إيقاف السلسلة ويصعّب قراءتها (Iedd58، b/161529964).تمت إضافة SubcomposeLayout. وهو عنصر أساسي منخفض المستوى يتيح إنشاء العناصر الفرعية أثناء القياس إذا أردنا استخدام بعض القيم التي تتوفّر لاحقًا فقط أثناء القياس لإنشاء الشجرة الفرعية. على سبيل المثال، لم يتم تنفيذ WithConstraints باستخدام SubcomposeLayout. (I25cc8)
تمت إعادة تسمية Material FilledTextField إلى TextField، وإعادة تسمية TextField الأساسي إلى BaseTextField لتسهيل العثور على أبسط واجهة برمجة تطبيقات مطلوبة واستخدامها (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
، وعلامات المساواة، ورموز التجزئة، وما إلى ذلك - كيف يمكنني ضبط بعض المواقع على "مراقبة" وبعضها الآخر على "غير مراقبة"؟
- كيف يمكنني تحديد المساواة البنيوية مقابل المساواة المرجعية لاستخدامها في المراقبة؟
- يقلّل من "السحر" في النظام. سيؤدي ذلك إلى تقليل احتمال افتراض المستخدم أنّ النظام أكثر ذكاءً مما هو عليه (أي أنّه يعرف كيفية مقارنة قائمة).
- يجعل مستوى التفاصيل في الملاحظة أكثر سهولة.
- تحسين إمكانية إعادة البناء من متغير -> خاصية في الفئة
- قد يتيح ذلك إمكانية إجراء تحسينات مخصّصة لكل ولاية
- تتوافق بشكل أكبر مع بقية النظام المتكامل وتقلّل من الغموض بشأن البيانات غير القابلة للتغيير أو "اعتماد الحالة القابلة للتغيير"
ملاحظات حول نقل البيانات
يمكن تحويل جميع الاستخدامات الحالية تقريبًا للرمز
@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 البرمجي يحوّل طلبات الدوال القابلة للإنشاء. من خلال هذا التغيير، أصبحنا الآن نحوّل نص الدالة القابلة للإنشاء ونترك موقع الاستدعاء بدون تغيير (في الغالب).
وهذا يعني أنّ معظم منطق التواصل مع وقت تشغيل Compose يحدث في بداية نص الدالة، بدلاً من موقع الاستدعاء.
يجب أن يكون هذا التغيير متوافقًا مع المصدر لجميع استخدامات الإنشاء. لن يحتاج معظم مستخدمي Compose إلى تعديل أي رمز نتيجةً لهذا التغيير.
ولإتاحة هذا العمل، تم تغيير توقيع JVM لجميع الدوال القابلة للإنشاء. يتم تحويل دالة قابلة للإنشاء تقبل مَعلمة واحدة إلى دالة تقبل 3 مَعلمات، وتكون المَعلمات الإضافية هي Composer وعدد صحيح "مفتاح" وعدد صحيح لقناع البت يُستخدَم لنقل البيانات الوصفية من خلال عمليات الاستدعاء.
تحوّل Compose الآن أيضًا الوسيطات التلقائية إلى دالة قابلة للإنشاء. ويتم ذلك بدون إضافة حمل زائد اصطناعي إضافي تلقائيًا إلى الدالة نفسها، لذا سيؤدي هذا التغيير إلى تحديد عدد أقل من الدوال.
في ما يلي التغييرات المعروفة المقصودة في السلوك الناتجة عن ذلك:
- سيتم تخطّي بعض المكالمات التي لم يكن من الممكن تخطّيها في السابق
- أصبحت الآن التعبيرات القابلة للإنشاء في تعبيرات الوسيطة التلقائية يتم الاشتراك فيها والتعامل معها بشكل صحيح
تضمّنت هذه العملية بعض التحسينات: 1. يتم نشر نتيجة مقارنات المَعلمات من خلال الرسم البياني لعمليات الاستدعاء إلى الدوال الأخرى القابلة للإنشاء. سيؤدي ذلك إلى تقليل عدد عمليات المقارنة في وقت التشغيل، وتقليل حجم جدول الفتحة، بالإضافة إلى تخطّي المزيد من الدوال القابلة للإنشاء التي لم يتم تخطّيها سابقًا 2. لم يعُد يتم تخزين المَعلمات التي يتم تحديدها على أنّها "ثابتة" في وقت الترجمة أو مقارنتها في وقت التشغيل. يقلّل ذلك من عدد عمليات المقارنة ويقلّل من حجم جدول الفترات الزمنية. 3- يتم استخدام بنية التحكّم في التدفق لنص الدوال لتقليل عدد المجموعات التي يتم إنشاؤها. يؤدي ذلك إلى تقليل حجم جدول الفتحات ويقلل من الجهد المطلوب من وقت التشغيل 4. لا يتم تضمين مَعلمات الإرسال والاستقبال غير المستخدَمة للدوال في تحديد إمكانية تخطّي الدالة إذا لم يتم استخدامها داخل نص الدالة.
كانت معظم التغييرات غير المتوافقة مخصّصة لواجهات برمجة التطبيقات التي يستهدفها المحول البرمجي مباشرةً، ولن يتأثّر الاستخدام العادي لـ Compose بما يلي: 1. تمت إزالة Composer::startExpr 2. تمت إزالة Composer::endExpr 3. تم إيقاف Composer::call نهائيًا 4. تمت إزالة عمليات التحميل الزائد غير المتغيرة لـ
key
. استخدِم الإصدارvararg
من الآن فصاعدًا. 5. تم إيقاف التعليق التوضيحي Pivotal نهائيًا. استخدِمkey
كبديل. 6. تم تغيير ScopeUpdateScope::updateScope ليتوقّع Function3 بدلاً من Function1 7. تم تعديل restartableFunction وrestartableFunctionN لتضمين مَعلمات إضافية في وقت الترجمة (I60756، b/143464846)تمّت إضافة sortWith وremoveRange إلى MutableVector (Icccf7)
تمت إضافة عمليات تنفيذ الطريقة التلقائية إلى CompositionLifecycleObserver (I24289)
يتطلّب Applier الآن طريقة 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 القابل للإنشاء تجريدًا مفيدًا. يجب أن تحدث معظم عمليات إعادة التركيب نتيجة لعمليات تعيين MutableState. بالنسبة إلى أي شيء آخر، ننصحك باستخدام الدالة
invalidate
لتفعيل إعادة إنشاء النطاق الحالي. (Ifc992)لم يعُد Observe تجريدًا مفيدًا. إذا كنت بحاجة إلى تكرارها، يمكن تكرار تنفيذها من خلال إنشاء دالة قابلة للإنشاء تنفّذ مَعلمة 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)
تم نقل عوامل تشغيل تفويض السمة State [قابلة للتغيير]إلى الإضافات لإتاحة تحسينات تفويض السمة في Kotlin 1.4. على المتصلين إضافة عمليات استيراد لمواصلة استخدام
by state { ... }
أوby mutableStateOf(...)
. (I5312c)تم نقل androidx.compose.ViewComposer إلى androidx.ui.node.UiComposer تمت إزالة androidx.compose.Emittable. كانت هذه الفئة مكرّرة مع ComponentNode، وتمت إزالة androidx.compose.ViewAdapters. لم تعُد هذه الميزة متاحة. تم إيقاف Compose.composeInto نهائيًا. يُرجى استخدام
setContent
أوsetViewContent
بدلاً منها. تم إيقاف Compose.disposeComposition نهائيًا. استخدِم طريقةdispose
فيComposition
التي تعرضهاsetContent
بدلاً من ذلك. تم نقل androidx.compose.Compose.subcomposeInto إلى androidx.ui.core.subcomposeInto تمت إعادة تسمية ComponentNode#emitInsertAt إلى ComponentNode#insertAt تمت إعادة تسمية ComponentNode#emitRemoveAt إلى ComponentNode#removeAt تمت إعادة تسمية ComponentNode#emitMode إلى ComponentNode#move (Idef00)تم تعديل العلامة
ComposeFlags.COMPOSER_PARAM
لتصبحtrue
، ما سيؤدي إلى تغيير استراتيجية إنشاء الرموز البرمجية لمكوّن Compose الإضافي. على مستوى عالٍ، يؤدي ذلك إلى إنشاء دوال @Composable مع مَعلمة اصطناعية إضافية، يتم تمريرها إلى عمليات استدعاء @Composable اللاحقة لكي يتمكّن وقت التشغيل من إدارة التنفيذ بشكلٍ سليم. هذا تغيير كبير في التوافق الثنائي، ولكن من المفترض أن يحافظ على التوافق على مستوى المصدر في جميع الاستخدامات المسموح بها لـ Compose. (I7971c)تغييرات غير متوافقة في واجهة برمجة التطبيقات ambients API اطّلِع على سجلّات
Ambient<T>
ومستنداتها للحصول على التفاصيل (I4c7ee، b/143769776).تمت إضافة ui-livedata، وهو عنصر جديد يتضمّن محوّلاً لـ LiveData. مثال على الاستخدام: val value by liveData.observeAsState() (Ie9e8c، b/150465596)
تم إيقاف محوّلات Rx التي لا تتضمّن قيمة أولية صريحة نهائيًا. لا يكون استخدام القيمة الخالية دائمًا هو الخيار التلقائي الأفضل، على سبيل المثال، عندما يكون لديك قائمة، من الأفضل البدء باستخدام 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 المتوقّفة نهائيًا واستبدالها بواجهات برمجة التطبيقات الخاصة بإضافة drawBackground في Modifier. تمت إعادة تصميم عمليات تنفيذ اللون والفرشاة والرسم في الخلفية لتقليل مسارات الرموز البرمجية، بالإضافة إلى إزالة شرط إنشاء Modifier كجزء من التركيب. (I0343a)
- تم تعديل واجهات برمجة التطبيقات الأعلى مستوى في Compose التي تعرض Canvas لعرض CanvasScope بدلاً من ذلك. ويؤدي ذلك إلى إزالة الحاجة إلى أن يحتفظ المستهلكون بكائنات Paint الخاصة بهم. بالنسبة إلى المستهلكين الذين ما زالوا بحاجة إلى الوصول إلى Canvas، يمكنهم استخدام طريقة drawCanvas الخاصة بالإضافة التي توفّر برنامج معالجة لإصدار أوامر الرسم باستخدام Canvas الأساسي. (I80afd)
- تم تغيير واجهة برمجة التطبيقات WithConstraints trailing lambda. بدلاً من مَعلمتَين، يتضمّن الآن نطاقًا للمستلِم يوفّر، بالإضافة إلى القيود وlayoutDirection، خصائص minWidth وmaxWidth وminHeight وmaxHeight في Dp (I91b9a وb/149979702).
- تمت إضافة أداة تعديل الحشو المتماثل. (I39840)
- تم تعديل wrapContentWidth وwrapContentHeight لتوقُّع محاذاة عمودية أو أفقية بدلاً من أي محاذاة. تم تعديل أداة تعديل الجاذبية لقبول المحاذاة العمودية أو الأفقية. تم تعديل الصف والعمود والحزمة لتتوافق مع عمليات المحاذاة المستمرة المخصّصة. (Ib0728)
- تمت إعادة تسمية وحدة ui-text النمطية إلى ui-text-core (I57dec)
- تحسين واجهة برمجة التطبيقات DrawModifier:
- تم إنشاء نطاق المتلقّي للدالة 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. تمت إعادة تسمية المَعلمة "ضيق" إلى "ملء". (If4738)
- تمت إضافة المَعلمة LayoutDirection إلى WithConstraints (I6d6f7)
- تمت إعادة تسمية الخلفية إلى DrawBackground وتم ضبطها على التذكُّر تلقائيًا (Ia0bd3)
- تم استبدال ButtonStyle بوظائف مميزة وإزالة التحميل الزائد للنص (السلسلة). يمكنك الاطّلاع على نماذج محدّثة لمعلومات الاستخدام. (If63ab، b/146478620، b/146482131)
- أصبح
runOnIdleCompose
وrunOnUiThread
الآن دالتَين عامتَين بدلاً من طريقتَين في ComposeTestRule. (Icbe8f)
المساهمة الخارجية
- إزالة واجهة برمجة التطبيقات غير الضرورية، مثل Looper وHandler، من طبقة نقل وقت تشغيل Compose (I6847d)
- إيقاف
Flow<T>.collectAsState()
بدون قيمة أولية استخدِمStateFlow<T>
أو مرِّر قيمة أولية صريحة بدلاً من ذلك. (I63f98، b/157674865)