
يوفّر إطار عمل 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
بغض النظر عن واجهة برمجة التطبيقات التي يستخدمها المطوّرون لعرض المحتوى، يتم عرض كل شيء على سطح. يمثّل Surface جانب المنتج في قائمة انتظار مؤقتة يستهلكها SurfaceFlinger غالبًا. يتم إنشاء كل نافذة على منصة Android باستخدام مساحة عرض. يتم دمج جميع المساحات المرئية المعروضة على الشاشة من خلال SurfaceFlinger.
يوضّح الرسم البياني التالي كيفية عمل المكوّنات الرئيسية معًا:
الشكل 1. طريقة عرض مساحات العرض
يتم وصف المكوّنات الرئيسية في الأقسام التالية.
منتجو بث الصور
يمكن أن يكون منتج بث الصور أي شيء ينتج مخازن مؤقتة للرسومات بغرض الاستهلاك. وتشمل الأمثلة على ذلك OpenGL ES وCanvas 2D وبرامج فك ترميز الفيديو في mediaserver.
مستهلكو بث الصور
إنّ SurfaceFlinger هو أكثر مستهلكي بث الصور شيوعًا، وهو خدمة نظام تستهلك المساحات المرئية حاليًا وتدمجها على الشاشة باستخدام المعلومات التي يقدّمها Window Manager. SurfaceFlinger هي الخدمة الوحيدة التي يمكنها تعديل محتوى الشاشة. يستخدم SurfaceFlinger OpenGL وHardware Composer (HWC) لإنشاء مجموعة من المساحات.
يمكن لتطبيقات OpenGL ES الأخرى أيضًا استخدام بث الصور، مثل تطبيق الكاميرا الذي يستخدم بث صور معاينة الكاميرا. يمكن أن تكون التطبيقات غير المتوافقة مع GL مستهلكة أيضًا، مثل فئة ImageReader.
Hardware Composer
طبقة تجريد الأجهزة لنظام العرض الفرعي يمكن لـ SurfaceFlinger تفويض بعض أعمال الدمج إلى HWC لتخفيف الحمل على OpenGL ووحدة معالجة الرسومات. تعمل SurfaceFlinger كعميل آخر من عملاء OpenGL ES. لذلك، عندما يدمج SurfaceFlinger بشكل نشط مخزنًا مؤقتًا واحدًا أو اثنين في مخزن ثالث، على سبيل المثال، يستخدم OpenGL ES. وهذا يجعل عملية التركيب أقل استهلاكًا للطاقة من أن تتولّى وحدة معالجة الرسومات إجراء جميع العمليات الحسابية.
يتولّى Hardware Composer HAL تنفيذ الجزء الآخر من العمل، وهو النقطة المركزية لجميع عمليات عرض الرسومات في Android. يجب أن يتيح HWC الأحداث، أحدها هو VSync (والآخر هو التوصيل السريع لتوفير إمكانية التوصيل والتشغيل عبر HDMI).
Gralloc
يجب توفّر أداة تخصيص ذاكرة الرسومات (Gralloc) لتخصيص الذاكرة التي تطلبها أدوات إنشاء الصور. لمزيد من التفاصيل، يُرجى الاطّلاع على BufferQueue وGralloc.
تدفق البيانات
يوضّح المخطّط التالي مسار عرض الرسومات في Android:
الشكل 2. مخطّط انسيابي لبيانات الرسومات في Android
العناصر على اليسار هي أدوات عرض تنتج مخازن مؤقتة للرسومات، مثل الشاشة الرئيسية وشريط الحالة وواجهة مستخدم النظام. SurfaceFlinger هو برنامج التجميع، وHWC هو برنامج التجميع.
BufferQueue
توفّر BufferQueues الربط بين مكوّنات الرسومات في Android. وهي عبارة عن مجموعتَين من قوائم الانتظار تتوسطان دورة المخزن المؤقت المستمرة من المنتج إلى المستهلك. بعد أن يسلم المنتجون المخازن المؤقتة، يصبح SurfaceFlinger مسؤولاً عن دمج كل شيء على الشاشة.
يوضّح الرسم البياني التالي عملية التواصل في BufferQueue:
الشكل 3. عملية التواصل في BufferQueue
يحتوي BufferQueue على منطق يربط بين منتجي بث الصور ومستهلكي بث الصور. تشمل بعض الأمثلة على منتجي الصور معاينات الكاميرا التي ينتجها HAL الخاص بالكاميرا أو ألعاب OpenGL ES. تشمل بعض الأمثلة على مستهلكي الصور SurfaceFlinger أو تطبيقًا آخر يعرض بث OpenGL ES، مثل تطبيق الكاميرا الذي يعرض عدسة الكاميرا.
BufferQueue هي بنية بيانات تجمع بين مجموعة من المخازن المؤقتة وقائمة انتظار، وتستخدم عملية الاتصال بين العمليات (IPC) في Binder لنقل المخازن المؤقتة بين العمليات. واجهة المنتج، أو ما يتم تمريره إلى شخص يريد إنشاء مخازن مؤقتة للرسومات، هي IGraphicBufferProducer
(جزء من SurfaceTexture
).
يتم استخدام BufferQueue غالبًا لعرض المحتوى على Surface واستهلاكه باستخدام GL
Consumer، بالإضافة إلى مهام أخرى.
يمكن أن تعمل BufferQueue بثلاثة أوضاع مختلفة:
لتنفيذ معظم هذه المهام، يعمل SurfaceFlinger كعميل آخر من عملاء OpenGL ES. لذا، عندما يدمج SurfaceFlinger بشكل نشط مخزنًا مؤقتًا واحدًا أو اثنين في مخزن ثالث، على سبيل المثال، يستخدم OpenGL ES.
يتولّى Hardware Composer HAL تنفيذ الجزء الآخر من العمل. تعمل طبقة HAL هذه كنقطة مركزية لجميع عمليات عرض الرسومات في Android.