Framework Android menawarkan berbagai API rendering grafis untuk 2D dan 3D yang berinteraksi dengan implementasi driver grafis dari produsen, sehingga penting untuk memiliki pemahaman yang baik tentang cara kerja API tersebut di tingkat yang lebih tinggi. Halaman ini memperkenalkan hardware abstraction layer (HAL) grafis yang digunakan untuk membuat driver tersebut. Sebelum melanjutkan bagian ini, pahami istilah berikut:
Canvas (elemen API)Surface. Class Canvas memiliki metode untuk gambar komputer standar bitmap, garis, lingkaran, persegi panjang, teks, dan sebagainya, dan terikat pada bitmap atau permukaan. Kanvas adalah cara termudah dan paling sederhana untuk menggambar objek 2D di layar. Class dasarnya adalah Canvas.
android.graphics.drawable.
Untuk mengetahui informasi selengkapnya tentang drawable dan resource lainnya, lihat
Ringkasan resource aplikasi.
android.opengl
dan javax.microedition.khronos.opengles
memaparkan fungsi OpenGL ES.Surface (elemen API)Surface. Gunakan class
SurfaceView
bukan class
Surface secara langsung.
SurfaceView (elemen API)View yang menggabungkan objek
Surface untuk menggambar, dan menampilkan metode guna menentukan ukuran dan formatnya
secara dinamis. Tampilan permukaan menyediakan cara untuk menggambar secara terpisah dari UI thread
untuk operasi yang memerlukan banyak resource, seperti game atau pratinjau kamera, tetapi tampilan permukaan menggunakan memori tambahan
sebagai akibatnya. Tampilan permukaan mendukung grafis kanvas dan OpenGL ES. Class dasar untuk objek SurfaceView adalah
SurfaceView.
R.style
dan diawali dengan Theme_.View (elemen API)View adalah class dasar
untuk sebagian besar komponen tata letak layar aktivitas atau dialog, seperti kotak teks
dan jendela. Objek View menerima panggilan dari objek induknya (lihat
ViewGroup) untuk menggambar dirinya sendiri, dan memberi tahu objek induknya
tentang ukuran dan lokasi yang diinginkannya, yang mungkin tidak diterima oleh
induknya. Untuk mengetahui informasi selengkapnya, lihat
View.
ViewGroup (elemen API)android.widget
tetapi memperluas
ViewGroup
class.
android.widget
paket. Window (elemen API)Window
class abstrak yang menentukan elemen jendela umum, seperti tampilan dan nuansa, teks panel judul, serta lokasi dan konten
menu. Dialog dan aktivitas menggunakan penerapan class
Window untuk merender objek Window. Anda tidak perlu menerapkan
class Window atau menggunakan jendela di aplikasi Anda.Developer aplikasi menggambar gambar ke layar dengan tiga cara: dengan Canvas, OpenGL ES, atau Vulkan.
Komponen grafis Android
Apa pun API rendering yang digunakan developer, semuanya dirender ke permukaan. Permukaan mewakili sisi produsen dari antrean buffer yang sering digunakan oleh SurfaceFlinger. Setiap jendela yang dibuat di platform Android didukung oleh permukaan. Semua permukaan yang terlihat yang dirender digabungkan ke layar oleh SurfaceFlinger.
Diagram berikut menunjukkan cara kerja komponen utama:

Gambar 1. Cara permukaan dirender.
Komponen utama dijelaskan di bagian berikut.
Produsen aliran gambar
Produsen aliran gambar dapat berupa apa saja yang menghasilkan buffer grafis untuk penggunaan. Contohnya mencakup OpenGL ES, Canvas 2D, dan dekoder video mediaserver.
Konsumen aliran gambar
Konsumen aliran gambar yang paling umum adalah SurfaceFlinger, layanan sistem yang menggunakan permukaan yang saat ini terlihat dan menggabungkannya ke layar menggunakan informasi yang diberikan oleh Pengelola Jendela. SurfaceFlinger adalah satu-satunya layanan yang dapat mengubah konten layar. SurfaceFlinger menggunakan OpenGL dan Hardware Composer (HWC) untuk menggabungkan grup permukaan.
Aplikasi OpenGL ES lainnya juga dapat menggunakan aliran gambar, seperti aplikasi kamera yang menggunakan aliran gambar pratinjau kamera. Aplikasi non-GL juga dapat menjadi konsumen, misalnya class ImageReader.
Hardware Composer
Abstraksi hardware untuk subsistem tampilan. SurfaceFlinger dapat mendelegasikan pekerjaan komposisi tertentu ke HWC untuk mengurangi beban kerja dari OpenGL dan GPU. SurfaceFlinger bertindak sebagai klien OpenGL ES lainnya. Jadi, saat SurfaceFlinger secara aktif menggabungkan satu atau dua buffer menjadi yang ketiga, misalnya, SurfaceFlinger menggunakan OpenGL ES. Hal ini membuat pengomposisian daya lebih rendah daripada GPU yang melakukan semua komputasi.
The Hardware Composer HAL melakukan setengah pekerjaan lainnya dan merupakan titik pusat untuk semua rendering grafis Android. HWC harus mendukung peristiwa, salah satunya adalah VSync (yang lainnya adalah hotplug untuk dukungan HDMI plug-and-play).
Gralloc
Pengalokasi memori grafis (Gralloc) diperlukan untuk mengalokasikan memori yang diminta oleh produsen gambar. Untuk mengetahui detailnya, lihat BufferQueue dan Gralloc.
Aliran data
Diagram berikut menggambarkan pipeline grafis Android:

Gambar 2. Aliran data grafis melalui Android.
Objek di sebelah kiri adalah renderer yang menghasilkan buffer grafis, seperti layar utama, status bar, dan UI sistem. SurfaceFlinger adalah compositor dan HWC adalah composer.
BufferQueue
BufferQueue menyediakan perekat antara komponen grafis Android. Ini adalah sepasang antrean yang memediasi siklus buffer konstan dari produsen ke konsumen. Setelah produsen menyerahkan buffer mereka, SurfaceFlinger bertanggung jawab untuk menggabungkan semuanya ke layar.
Diagram berikut menggambarkan proses komunikasi BufferQueue:

Gambar 3. Proses komunikasi BufferQueue.
BufferQueue berisi logika yang mengikat produsen aliran gambar dan konsumen aliran gambar. Beberapa contoh produsen gambar adalah pratinjau kamera yang dihasilkan oleh HAL kamera atau game OpenGL ES. Beberapa contoh konsumen gambar adalah SurfaceFlinger atau aplikasi lain yang menampilkan aliran OpenGL ES, seperti aplikasi kamera yang menampilkan jendela bidik kamera.
BufferQueue adalah struktur data yang menggabungkan kumpulan buffer dengan antrean dan menggunakan komunikasi antar-proses (IPC) Binder untuk meneruskan buffer antar-proses. Antarmuka produsen, atau
apa yang Anda teruskan kepada seseorang yang ingin membuat buffer grafis, adalah
IGraphicBufferProducer (bagian dari SurfaceTexture).
BufferQueue sering digunakan untuk merender ke Surface dan menggunakan GL
Consumer, di antara tugas lainnya.
BufferQueue dapat beroperasi dalam tiga mode berbeda:
Untuk melakukan sebagian besar pekerjaan ini, SurfaceFlinger bertindak sebagai klien OpenGL ES lainnya. Jadi, saat SurfaceFlinger secara aktif menggabungkan satu atau dua buffer menjadi yang ketiga, misalnya, SurfaceFlinger menggunakan OpenGL ES.
Hardware Composer HAL melakukan setengah pekerjaan lainnya. HAL ini bertindak sebagai titik pusat untuk semua rendering grafis Android.