يوفّر إطار عمل Android مجموعة متنوعة من واجهات برمجة التطبيقات لعرض الرسومات الثنائية والثلاثية الأبعاد التي تتفاعل مع عمليات تنفيذ برامج تشغيل الرسومات من قِبل الشركة المصنّعة، لذا من المهم فهم طريقة عمل واجهات برمجة التطبيقات هذه على مستوى أعلى. تعرّف هذه الصفحة على طبقة تجريد الأجهزة (HAL) للرسومات التي تستند إليها برامج التشغيل هذه. قبل المتابعة في هذا القسم، يُرجى التعرّف على المصطلحات التالية:
Canvas (عنصر واجهة برمجة التطبيقات)Surface. يحتوي الصف Canvas على طرق للرسم العادي على الكمبيوتر للصور النقطية والخطوط والدوائر والمستطيلات والنصوص وما إلى ذلك، وهو مرتبط بصورة نقطية أو سطح. لوحة الرسم هي الطريقة الأبسط والأسهل لرسم كائنات ثنائية الأبعاد على الشاشة. الصف الأساسي هو Canvas.
android.graphics.drawable.
لمزيد من المعلومات عن العناصر القابلة للرسم والموارد الأخرى، يُرجى الاطّلاع على
نظرة عامة على موارد التطبيق.
android.opengl
وjavax.microedition.khronos.opengles
وظائف OpenGL ES.Surface (عنصر واجهة برمجة التطبيقات)Surface. استخدِم الصف
SurfaceView
بدلاً من الصف
Surface مباشرةً.
SurfaceView (عنصر واجهة برمجة التطبيقات)View يغلّف كائن
Surface للرسم، ويعرض طرقًا لتحديد حجمه وتنسيقه
ديناميكيًا. يوفّر عرض السطح طريقة للرسم بشكل مستقل عن سلسلة التعليمات البرمجية لواجهة المستخدم
للعمليات التي تستهلك الكثير من الموارد، مثل الألعاب أو معاينات الكاميرا، ولكنّه يستخدم ذاكرة إضافية
نتيجةً لذلك. يتوافق عرض السطح مع كلٍّ من الرسومات المستندة إلى لوحة الرسم والرسومات المستندة إلى OpenGL ES
الصف الأساسي لكائن SurfaceView هو
SurfaceView.
R.style والمسبوقة بـ Theme_.View (عنصر واجهة برمجة التطبيقات)View هو الصف الأساسي
لمعظم مكوّنات التصميم لشاشة نشاط أو مربّع حوار، مثل مربّعات النص
والنوافذ. يتلقّى كائن View طلبات من الكائن الرئيسي (راجِع
ViewGroup) لرسم نفسه، ويُعلم الكائن الرئيسي
بحجمه وموضعه المفضّلين، اللذين قد لا يحترمهما الكائن
الرئيسي. لمزيد من المعلومات، يُرجى الاطّلاع على
View.
ViewGroup (عنصر واجهة برمجة التطبيقات)android.widget
، ولكنّها توسّع
الصف ViewGroup.
android.widget
حزمة. Window (عنصر واجهة برمجة التطبيقات)Windowالذي يحدّد عناصر نافذة عامة، مثل المظهر، ونص شريط العنوان، وموضع القوائم ومحتواها. تستخدم مربّعات الحوار والأنشطة عملية تنفيذ لـ
Window لعرض كائن Window. لست بحاجة إلى تنفيذ
الصف Window أو استخدام النوافذ في تطبيقك.يرسم مطوّرو التطبيقات الصور على الشاشة بثلاث طرق: باستخدام Canvas أو OpenGL ES أو Vulkan.
مكوّنات رسومات Android
بغض النظر عن واجهة برمجة التطبيقات لعرض الرسومات التي يستخدمها المطوّرون، يتم عرض كل شيء على سطح. يمثّل السطح جانب المنتج من قائمة انتظار المخزن المؤقت التي تستهلكها غالبًا خدمة SurfaceFlinger. كل نافذة يتم إنشاؤها على نظام Android الأساسي تستند إلى سطح. يتم تركيب جميع الأسطح المرئية المعروضة على الشاشة من خلال SurfaceFlinger.
يوضّح الرسم البياني التالي طريقة عمل المكوّنات الرئيسية معًا:

الشكل 1: طريقة عرض الأسطح
يرد وصف المكوّنات الرئيسية في الأقسام التالية.
منتِجو تدفق الصور
يمكن أن يكون منتِج تدفق الصور أي عنصر ينشئ مخازن مؤقتة للرسومات من أجل استهلاكها. وتشمل الأمثلة OpenGL ES وCanvas 2D وبرامج فك ترميز الفيديو في mediaserver.
مستهلكو تدفق الصور
المستهلك الأكثر شيوعًا لتدفقات الصور هو SurfaceFlinger، وهي خدمة النظام التي تستهلك الأسطح المرئية حاليًا وتُركّبها على الشاشة باستخدام المعلومات التي يقدّمها مدير النوافذ. SurfaceFlinger هي الخدمة الوحيدة التي يمكنها تعديل محتوى الشاشة. تستخدم SurfaceFlinger كلاً من OpenGL وHardware Composer (HWC) لتركيب مجموعة من الأسطح.
يمكن لتطبيقات OpenGL ES الأخرى استهلاك تدفقات الصور أيضًا، مثل تطبيق الكاميرا الذي يستهلك تدفق صور معاينة الكاميرا. يمكن أن تكون التطبيقات غير المستندة إلى OpenGL مستهلكة أيضًا، مثلاً الصف ImageReader.
Hardware Composer
طبقة تجريد الأجهزة للنظام الفرعي للعرض. يمكن أن تفوّض SurfaceFlinger بعض أعمال التركيب إلى HWC لتخفيف العبء عن OpenGL ووحدة معالجة الرسومات. تعمل SurfaceFlinger كعميل آخر لـ OpenGL ES. لذلك، عندما تقوم SurfaceFlinger بتركيب مخزن مؤقت واحد أو اثنين في مخزن مؤقت ثالث، مثلاً، فإنّها تستخدم OpenGL ES. يؤدي ذلك إلى تقليل استهلاك الطاقة مقارنةً بتولي وحدة معالجة الرسومات جميع العمليات الحسابية.
تتولى طبقة تجريد الأجهزة Hardware Composer HAL النصف الآخر من العمل وهي النقطة المركزية لجميع عمليات عرض الرسومات في Android. يجب أن تتوافق HWC مع الأحداث، أحدها VSync (والآخر هو hotplug لدعم HDMI التلقائي).
Gralloc
مخصّص ذاكرة الرسومات (Gralloc) مطلوب لتخصيص الذاكرة التي يطلبها منتِجو الصور. لمزيد من التفاصيل، يُرجى الاطّلاع على BufferQueue وGralloc.
تدفق البيانات
يوضّح الرسم البياني التالي مسار رسومات Android:

الشكل 2: تدفق البيانات الرسومية من خلال Android
الكائنات على يسار الصفحة هي أدوات عرض تنشئ مخازن مؤقتة للرسومات، مثل الشاشة الرئيسية وشريط الحالة وواجهة مستخدم النظام. SurfaceFlinger هي أداة التركيب وHWC هي أداة التجميع.
BufferQueue
توفّر BufferQueues الرابط بين مكوّنات رسومات Android. وهي عبارة عن زوج من قوائم الانتظار التي تتوسط الدورة الثابتة للمخازن المؤقتة من المنتج إلى المستهلك. بعد أن يسلّم المنتِجون المخازن المؤقتة، تكون SurfaceFlinger مسؤولة عن تركيب كل شيء على الشاشة.
يوضّح المخطّط البياني التالي عملية الاتصال في BufferQueue:

الشكل 3: عملية الاتصال في BufferQueue
تحتوي BufferQueue على المنطق الذي يربط بين منتِجي تدفق الصور ومستهلكي تدفق الصور. من الأمثلة على منتِجي الصور معاينات الكاميرا التي تنشئها طبقة تجريد الأجهزة للكاميرا أو ألعاب OpenGL ES. من الأمثلة على مستهلكي الصور SurfaceFlinger أو تطبيق آخر يعرض تدفق OpenGL ES، مثل تطبيق الكاميرا الذي يعرض عدسة الكاميرا.
BufferQueue هي بنية بيانات تجمع بين مجموعة المخزن المؤقت وقائمة الانتظار، وتستخدم الاتصال بين العمليات (IPC) في Binder لنقل المخازن المؤقتة بين العمليات. واجهة المنتج، أو
ما ترسله إلى شخص يريد إنشاء مخازن مؤقتة للرسومات، هي
IGraphicBufferProducer (جزء من SurfaceTexture).
غالبًا ما تُستخدم BufferQueue للعرض على Surface والاستهلاك باستخدام GL
Consumer، بالإضافة إلى مهام أخرى.
يمكن أن تعمل BufferQueue بثلاثة أوضاع مختلفة:
لإجراء معظم هذا العمل، تعمل SurfaceFlinger كعميل آخر لـ OpenGL ES. لذلك، عندما تقوم SurfaceFlinger بتركيب مخزن مؤقت واحد أو اثنين في مخزن مؤقت ثالث، مثلاً، فإنّها تستخدم OpenGL ES.
تتولى طبقة تجريد الأجهزة Hardware Composer HAL النصف الآخر من العمل. تعمل طبقة تجريد الأجهزة هذه كنقطة مركزية لجميع عمليات عرض الرسومات في Android.