چارچوب Android میاناهای برنامهسازی کاربردی متنوعی برای پردازش گرافیک دوبعدی و سهبعدی ارائه میدهد که با پیادهسازیهای سازنده درایورهای گرافیک تعامل دارند، بنابراین مهم است که درک خوبی از نحوه عملکرد این میاناهای برنامهسازی کاربردی در سطح بالاتر داشته باشید. این صفحه لایه انتزاعی سختافزار (HAL) گرافیک را که این درایورها براساس آن ساخته شدهاند معرفی میکند. پیشاز ادامه دادن این بخش، با شرایط زیر آشنا شوید:
Canvas (عنصر میانای برنامهسازی کاربردی)Surface مدیریت میکند. کلاس Canvas روشهایی برای رسم استاندارد رایانهای از بیتمپها، خطوط، دایرهها، مستطیلها، نوشتار، و غیره دارد و به یک بیتمپ یا سطح محدود میشود. بوم سادهترین و آسانترین راه برای طراحی اشیاء دوبعدی
روی صفحه است. کلاس پایه
Canvas است.
android.graphics.drawable کامپایل میشوند.
برای اطلاعات بیشتر درباره منابع قابلترسیم و منابع دیگر، به
نمای کلی منابع برنامه مراجعه کنید.
android.opengl
و javax.microedition.khronos.opengles
عملکرد OpenGL ES را آشکار میکنند.Surface (عنصر میانای برنامهسازی کاربردی)Surface ارائه میدهد. بهجای
SurfaceView
مستقیماً از کلاس
Surface استفاده کنید.
SurfaceView (عنصر API)View است که یک شیء Surface را برای طراحی میپوشاند و روشهایی را برای مشخص کردن اندازه و قالب آن بهصورت پویا ارائه میدهد. نمای سطح روشی برای رسم مستقل از رشته رابط کاربری برای عملیات پرمنبع مانند بازیها یا پیشنمایشهای دوربین ارائه میدهد، اما درنتیجه از حافظه اضافی استفاده میکند. نمای سطحی از هر دو گرافیک بوم و OpenGL ES پشتیبانی میکند. کلاس پایه برای شیء SurfaceView
SurfaceView است.
R.style
فهرست شدهاند و با Theme_ پیشگفتار دارند.View (عنصر میانای برنامهسازی کاربردی)View کلاس پایه برای
اکثر عناصر چیدمان صفحه فعالیت یا کادر گفتگو، مثل چارگوشهای نوشتاری
و پنجرهها است. شیء View تماسهایی از شیء والد خود دریافت میکند (به
ViewGroup مراجعه کنید) تا خود را رسم کند و شیء والد خود را از
اندازه و مکان ترجیحی خود مطلع میکند، که ممکن است توسط والد رعایت نشود. برای اطلاعات بیشتر، به
View مراجعه کنید.
ViewGroup (عنصر API)android.widget
قرار دارند، اما کلاس
ViewGroup
را گسترش میدهند.
android.widget
قرار دارند. Window (API element)Window
کلاس انتزاعی مشتق شده است و عناصر پنجره عمومی را مشخص میکند،
مثل ظاهر و احساس، نوشتار نوار عنوان، و مکان و محتوای منوها. کادرهای گفتگو و فعالیتها از پیادهسازی کلاس
Window برای ارائه شیء Window استفاده میکنند. نیازی نیست کلاس Window را پیادهسازی کنید یا از پنجرهها در برنامهتان استفاده کنید.توسعهدهندگان برنامه تصاویر را به سه روش در صفحهنمایش رسم میکنند: با بوم، OpenGL ES، یا Vulkan.
عناصر گرافیکی Android
توسعهدهندگان از هر API پردازشی که استفاده کنند، همه چیز روی یک سطح پردازش میشود. سطح نشاندهنده طرف تولیدکننده یک صف بافر است که اغلب توسط SurfaceFlinger مصرف میشود. هر پنجرهای که در پلاتفرم Android ایجاد میشود، توسط یک سطح پشتیبانی میشود. همه سطوح رؤیتپذیر پردازششده توسط SurfaceFlinger روی نمایشگر ترکیب میشوند.
نمودار زیر نحوه عملکرد مشترک عناصر کلیدی را نشان میدهد:

شکل ۱. نحوه پرداز سطوح.
اجزای اصلی در بخشهای زیر شرح داده شده است.
تولیدکنندگان جاریسازی تصویر
تولیدکننده جاریسازی تصویر میتواند هر چیزی باشد که بافرهای گرافیکی برای مصرف تولید میکند. برای مثال، میتوان به OpenGL ES، Canvas 2D، و کدبندهای ویدیو mediaserver اشاره کرد.
مصرفکنندگان جاریسازی تصویر
رایجترین مصرفکننده جریانهای تصویر SurfaceFlinger است، سرویس سیستمی که سطوح قابلمشاهده فعلی را مصرف میکند و آنها را بااستفاده از اطلاعات ارائهشده توسط «مدیر پنجره» روی نمایشگر ترکیب میکند. SurfaceFlinger تنها سرویسی است که میتواند محتوای نمایشگر را تغییر دهد. SurfaceFlinger از OpenGL و «ترکیبکننده سختافزاری» (HWC) برای ترکیب گروهی از سطوح استفاده میکند.
برنامههای دیگر OpenGL ES نیز میتوانند از جاریسازیهای تصویر استفاده کنند، برای مثال، برنامه دوربین از جاریسازی تصویر پیشنمایش دوربین استفاده میکند. برنامههای غیرGL نیز میتوانند مصرفکننده باشند، برای مثال کلاس ImageReader.
آهنگساز سختافزاری
انتزاع سختافزاری برای زیرسیستم نمایش. SurfaceFlinger میتواند برخیاز کارهای ترکیب را به HWC واگذار کند تا کار از OpenGL و GPU بارگیری شود. SurfaceFlinger بهعنوان یک کارخواه OpenGL ES دیگر عمل میکند. بنابراین، وقتی SurfaceFlinger بهطور فعال یک یا دو بافر را در بافر سوم ترکیب میکند، برای مثال، از OpenGL ES استفاده میکند. این کار باعث میشود ترکیببندی نسبتبه زمانی که GPU همه محاسبات را انجام میدهد، توان کمتری مصرف کند.
Hardware Composer HAL نیمه دیگر کار را انجام میدهد و نقطه مرکزی برای همه پردازهای گرافیکی Android است. «کنترلکننده سختافزاری» باید از رویدادها پشتیبانی کند، یکی از آنها VSync است (دیگری اتصال سریع برای پشتیبانی از HDMI آماده استفاده است).
Gralloc
تخصیصدهنده حافظه گرافیکی (Gralloc) برای تخصیص حافظه درخواستشده توسط تولیدکنندگان تصویر موردنیاز است. برای جزئیات، BufferQueue و Gralloc را ببینید.
جریان دادهها
نمودار زیر خط لوله گرافیک Android را نشان میدهد:

شکل ۲. جریان دادههای گرافیکی ازطریق Android.
اشیاء سمت راست پردازنده گرافیکی هستند که میانگیرهای گرافیکی تولید میکنند، مثل صفحه اصلی، نوار وضعیت، و میانای کاربر سامانه. SurfaceFlinger آهنگساز و HWC آهنگساز است.
BufferQueue
BufferQueues پیونددهنده بین مؤلفههای گرافیکی Android است. اینها جفت صفهایی هستند که چرخه ثابت بافرها را از تولیدکننده به مصرفکننده میانجیگری میکنند. پساز اینکه تولیدکنندگان میانگیرهایشان را تحویل دادند، SurfaceFlinger مسئول ترکیب کردن همه چیز در نمایشگر است.
نمودار زیر فرایند ارتباطی BufferQueue را نشان میدهد:

شکل ۳. فرایند ارتباط BufferQueue.
BufferQueue حاوی منطقی است که تولیدکنندگان جاریسازی تصویر و مصرفکنندگان جاریسازی تصویر را به هم پیوند میدهد. پیشنمایشهای دوربین تولیدشده توسط HAL دوربین یا بازیهای OpenGL ES ازجمله نمونههای تولیدکننده تصویر هستند. برخیاز نمونههای مصرفکنندگان تصویر عبارتاند از SurfaceFlinger یا برنامه دیگری که جاریسازی OpenGL ES را نمایش میدهد، مثل برنامه دوربین که نمایاب دوربین را نمایش میدهد.
BufferQueue ساختار دادهای است که استخر میانگیر را با صف ترکیب میکند و
از ارتباط بینفرایندی (IPC) Binder برای انتقال میانگیرها بین فرایندها استفاده میکند. میانای تولیدکننده، یا آنچه به فردی که میخواهد میانگیرهای گرافیکی تولید کند منتقل میکنید، IGraphicBufferProducer (بخشی از SurfaceTexture) است. BufferQueue اغلب برای رندر کردن در Surface و مصرف با GL Consumer، در میان سایر وظایف، استفاده میشود.
BufferQueue میتواند در سه حالت مختلف عمل کند:
برای انجام بیشتر این کار، SurfaceFlinger فقط بهعنوان یک کارخواه OpenGL ES دیگر عمل میکند. بنابراین وقتی SurfaceFlinger بهطور فعال یک یا دو میانگیر را در میانگیر سومی ترکیب میکند، برای مثال، از OpenGL ES استفاده میکند.
«لایه انتزاعی سختافزار آهنگساز سختافزاری» نیمه دیگر کار را انجام میدهد. این HAL بهعنوان نقطه مرکزی برای همه پرداز زدنهای گرافیکی Android عمل میکند.