اليوم، إصدار Jetpack Compose في 25 ديسمبر مستقر. يحتوي هذا على الإصدار 1.10 من وحدات الإنشاء الأساسية والإصدار 1.4 من المادة 3 (راجع النص الكامل رسم خرائط BOM)، إضافة ميزات جديدة وتحسينات كبيرة في الأداء.
لاستخدام إصدار اليوم، قم بترقية إصدار Compose BOM إلى 2025.12.00:
تحسينات في الأداء
نحن نعلم أن أداء تطبيقك في وقت التشغيل مهم للغاية بالنسبة لك وللمستخدمين، لذلك كان الأداء أولوية رئيسية لفريق Compose. يجلب هذا الإصدار عددًا من التحسينات، ويمكنك الحصول عليها جميعًا بمجرد الترقية إلى الإصدار الأحدث. توضح معايير التمرير الداخلية لدينا أن ميزة Compose تتطابق الآن مع الأداء الذي قد تراه في حالة استخدام طرق العرض:
قم بتمرير مقياس الأداء لمقارنة طرق العرض وJetpack Compose عبر إصدارات مختلفة من Compose
تكوين قابل للإيقاف مؤقتًا في الجلب المسبق البطيء
يتم الآن تمكين التكوين القابل للإيقاف المؤقت في الجلب المسبق البطيء افتراضيًا. يعد هذا تغييرًا أساسيًا في كيفية عمل جداول وقت تشغيل Compose، والتي تم تصميمها لتقليل الأخطاء غير المرغوب فيها بشكل كبير أثناء أعباء العمل الثقيلة لواجهة المستخدم.
في السابق، بمجرد أن يبدأ التكوين، كان عليه أن يستمر حتى الاكتمال. إذا كان التركيب معقدًا، فقد يؤدي ذلك إلى حظر السلسلة الرئيسية لفترة أطول من إطار واحد، مما يتسبب في تجميد واجهة المستخدم. من خلال التكوين القابل للإيقاف المؤقت، يمكن لوقت التشغيل الآن “إيقاف” عمله مؤقتًا إذا نفاد الوقت واستئناف العمل في الإطار التالي. يعد هذا فعالاً بشكل خاص عند استخدامه مع الجلب المسبق للتخطيط البطيء لإعداد الإطارات مسبقًا. التخطيط الكسول CacheWindow تعد واجهات برمجة التطبيقات المقدمة في Compose 1.9 طريقة رائعة لجلب المزيد من المحتوى مسبقًا والاستفادة من التكوين القابل للإيقاف المؤقت لإنتاج أداء أكثر سلاسة لواجهة المستخدم.
تساعد التركيبة القابلة للإيقاف المؤقت جنبًا إلى جنب مع الجلب المسبق Lazy على تقليل النفايات
لقد قمنا أيضًا بتحسين الأداء في أماكن أخرى، مع إدخال تحسينات على Modifier.onPlaced, Modifier.onVisibilityChanged, وتطبيقات التعديل الأخرى. سنواصل الاستثمار في تحسين أداء Compose.
ميزات جديدة
يحتفظ
يقدم Compose عددًا من واجهات برمجة التطبيقات للاحتفاظ بالحالة وإدارتها عبر دورات حياة مختلفة؛ على سبيل المثال، يتذكر تستمر الحالة عبر التراكيب، و RememberSavable/تذكرSerializable للاستمرار عبر النشاط أو عملية الترفيه. يحتفظ هي واجهة برمجة تطبيقات جديدة تقع بين واجهات برمجة التطبيقات هذه، مما يتيح لك الاحتفاظ بالقيم عبر تغييرات التكوين دون إجراء تسلسل، ولكن ليس عبر عملية الموت. مثل يحتفظ لا يقوم بإجراء تسلسل لحالتك، فيمكنك الاحتفاظ بالكائنات مثل تعبيرات lambda، والتدفقات، والكائنات الكبيرة مثل الصور النقطية، والتي لا يمكن إجراء تسلسل لها بسهولة. على سبيل المثال، يمكنك استخدام يحتفظ لإدارة مشغل الوسائط (مثل ExoPlayer) لضمان عدم مقاطعة تشغيل الوسائط بسبب تغيير التكوين.
@المركب
هزار مشغل الوسائط () {
فال applicationContext = LocalContext.current.applicationContext
فال exoPlayer = يحتفظ { ExoPlayer.Builder(applicationContext).apply { … }.build() }
…
}
نريد أن نعرب عن شكرنا لمجتمع AndroidDev (وخاصة مجتمع حلبة team)، الذين أثروا وساهموا في تصميم هذه الميزة.
المادة 1.4
الإصدار 1.4.0 من المواد3 تضيف المكتبة عددًا من المكونات والتحسينات الجديدة:
دائري البطل في الوسط الأفقي
لاحظ أن المادة 3 معبرة يستمر تطوير واجهات برمجة التطبيقات في إصدارات ألفا من المواد3 مكتبة. لمعرفة المزيد، راجع هذا الحديث الأخير:
ميزات الرسوم المتحركة الجديدة
نواصل التوسع في واجهات برمجة تطبيقات الرسوم المتحركة الخاصة بنا، بما في ذلك التحديثات لتخصيص الرسوم المتحركة للعناصر المشتركة.
العناصر المشتركة الديناميكية
بشكل افتراضي، العنصر المشترك() و شاريد باوندز () الرسوم المتحركة محاولة لتحريك
يتغير التخطيط كلما تم العثور على مفتاح مطابق في الحالة المستهدفة. ومع ذلك، قد ترغب في تعطيل هذه الرسوم المتحركة ديناميكيًا بناءً على شروط معينة، مثل اتجاه التنقل أو حالة واجهة المستخدم الحالية.
للتحكم في حدوث انتقال العنصر المشترك، يمكنك الآن تخصيص
تكوين المحتوى المشترك مرت الى تذكرSharedContentState(). ال isEnabled
تحدد الخاصية ما إذا كان العنصر المشترك نشطًا.
تخطيط النقل المشترك {
فال الانتقال = التحديث الانتقالي (الحالة الحالية)
Transition.AnimatedContent { targetState ->
// قم بإنشاء التكوين الذي يعتمد على الحالة المتغيرة.
هزار AnimationConfig(): SharedTransitionScope.SharedContentConfig {
يعود هدف : SharedTransitionScope.SharedContentConfig {
تجاوز فال SharedTransitionScope.SharedContentState.isEnabled: منطقية
يحصل() =
// تحديد ما إذا كان سيتم تنفيذ انتقال العنصر المشترك
}
}
}
انظر الوثائق للمزيد.
Modifier.skipToLookaheadPosition()
معدل جديد, Modifier.skipToLookaheadPosition()، تمت إضافته في هذا الإصدار، والذي يحافظ على الموضع النهائي للعنصر القابل للتركيب عند تنفيذ الرسوم المتحركة للعناصر المشتركة. يسمح هذا بإجراء انتقالات مثل الرسوم المتحركة من النوع “الكشف”، كما يمكن رؤيته في نموذج Androidify مع الكشف التدريجي عن الكاميرا. شاهد نصيحة الفيديو هنا لمزيد من المعلومات:
السرعة الأولية في انتقالات العناصر المشتركة
يضيف هذا الإصدار واجهة برمجة تطبيقات جديدة لانتقال العناصر المشتركة، PreparTransitionWithInitialVelocity، والذي يتيح لك تمرير السرعة الأولية (على سبيل المثال من الإيماءة) إلى انتقال العنصر المشترك:
Modifier.fillMaxSize()
.dragable2D(
تذكرDraggable2DState { إزاحة += هو – هي },
onDragStopped = { سرعة ->
// قم بإعداد السرعة الأولية للعنصر المشترك القادم
// انتقال.
SharedContentStateForDraggableCat
؟.PreparTransitionWithInitialVelocity(سرعة)
تفاصيل العرض = خطأ شنيع
},
)
انتقال عنصر مشترك يبدأ بسرعة أولية من الإيماءة
التحولات المحجبة
أدخل الانتقال و ExitTransition تحديد كيفية رؤية متحركة/محتوى متحرك يظهر أو يختفي. تجريبية جديدة حجاب يتيح لك الخيار تحديد لون للحجاب أو المحتوى؛ على سبيل المثال، التلاشي داخل/خارج طبقة سوداء شبه شفافة فوق المحتوى:
محتوى الرسوم المتحركة المحجبات – لاحظ الحجاب شبه المعتم (أو القماش) فوق محتوى الشبكة أثناء الرسوم المتحركة
محتوى متحرك(
الحالة المستهدفة = الصفحة،
المعدل = Modifier.fillMaxSize().weight(1و)،
مواصفات الانتقال = {
لو (الحالة المستهدفة> الحالة الأولية) {
(شريحة أفقية { هو – هي } معًا
SlideOutHorizontally { -it / 2 } + الحجاب (الهدف اللون = الحجاب اللون))
} آخر {
SlideInHorizontally { -it / 2 } +
كشف النقاب (اللون الأولي = لون الحجاب) معًا مع SlideOutHorizontally { هو – هي }
}
},
) {الصفحة المستهدفة ->
…
}
التغييرات القادمة
إهمال Modifier.onFirstVisible
تم تقديم الإنشاء 1.9 Modifier.onVisibilityChanged و Modifier.onFirstVisible. وبعد الاطلاع على ملاحظاتكم، تبين أن العقد Modifier.onFirstVisible ولم يكن من الممكن تكريمه بشكل حتمي؛ على وجه التحديد، عندما يكون هناك عنصر أولاً يصبح مرئيا. على سبيل المثال، قد يتخلص التخطيط البطيء من العناصر التي يتم تمريرها خارج إطار العرض، ثم يقوم بإنشائها مرة أخرى إذا تم تمريرها مرة أخرى إلى العرض. في هذه الظرف، this.onFirstVisible سيتم إطلاق رد الاتصال مرة أخرى، لأنه عنصر مؤلف حديثًا. قد يحدث سلوك مماثل أيضًا عند العودة إلى الشاشة التي تمت زيارتها مسبقًا والتي تحتوي على this.onFirstVisible. على هذا النحو، قررنا إيقاف هذا المعدل في التالي إنشاء الإصدار (1.11) والتوصية بالترحيل إليه onVisibilityChanged. انظر الوثائق لمزيد من المعلومات.
إرسال كوروتين في الاختبارات
نحن نخطط لتغيير إرسال الكوروتين في الاختبارات لتحسين هشاشة الاختبار والكشف عن المزيد من المشكلات. حاليًا، تستخدم الاختبارات UnconfinedTestDispatcherوالذي يختلف عن سلوك الإنتاج؛ على سبيل المثال، تأثيرات قد يتم تشغيله على الفور بدلاً من وضعه في قائمة الانتظار. في إصدار مستقبلي، نخطط لتقديم واجهة برمجة تطبيقات جديدة تستخدم StandardTestDispatcher بشكل افتراضي لتتناسب مع سلوكيات الإنتاج. يمكنك تجربة السلوك الجديد الآن في 1.10:
@يحصل:قاعدة // أيضًا createAndroidComposeRule, createEmptyComposeRule
فال القاعدة = createComposeRule(EffectContext = StandardTestDispatcher())
باستخدام StandardTestDispatcher سيتم وضع المهام في قائمة الانتظار، لذلك يجب عليك استخدام آليات المزامنة مثل composeTestRule.waitForIdle() أو composeTestRule.runOnIdle(). إذا كان الاختبار الخاص بك يستخدم runTest، يجب عليك التأكد من ذلك runTest وقاعدة الإنشاء الخاصة بك تشترك في نفس الشيء StandardTestDispatcher مثيل للمزامنة.
// 1. قم بإنشاء مثيل مرسل واحد
فال testDispatcher = ستاندرد تيست ديسباتشير ()
// 2. قم بتمريرها إلى قاعدة الإنشاء الخاصة بك
@يحصل:قاعدة
فال composeRule = createComposeRule(effectContext = testDispatcher)
@امتحان
// 3. قم بتمرير *SAME INSTANCE* إلى runTest
هزار ماي تيست () = اختبار التشغيل (testDispatcher) {
composeRule.setContent { /* … */ }
}
أدوات
تستحق واجهات برمجة التطبيقات الرائعة أدوات رائعة، و أندرويد ستوديو يحتوي على عدد من الإضافات الحديثة لمطوري Compose:
-
تحويل واجهة المستخدم: كرر تصميماتك عن طريق النقر بزر الماوس الأيمن على @معاينة، وتحديد تحويل واجهة المستخدم، ثم وصف التغيير في اللغة الطبيعية.
-
يولد @معاينة: انقر بزر الماوس الأيمن على العنصر القابل للتركيب ثم اختر الجوزاء > توليد [Composable name] معاينة.
لرؤية هذه الأدوات أثناء العمل، شاهد هذا العرض التوضيحي الأخير:
تأليف سعيد
نواصل الاستثمار في Jetpack Compose لتزويدك بواجهات برمجة التطبيقات والأدوات التي تحتاجها لإنشاء واجهات مستخدم جميلة وغنية. نحن نقدر مدخلاتك، لذا يرجى مشاركة تعليقاتك حول هذه التغييرات أو ما تريد رؤيته بعد ذلك في موقعنا تعقب القضية.

