
Framework Android menawarkan berbagai API rendering grafis untuk 2D dan 3D yang berinteraksi dengan implementasi driver grafis 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 ke bagian ini, pahami istilah berikut:
Canvas
(elemen API)Surface
. Canvas
memiliki metode
untuk gambar komputer standar bitmap, garis, lingkaran, persegi panjang, teks, dan sebagainya, dan terikat
pada bitmap atau platform. Kanvas adalah cara termudah dan paling sederhana untuk menggambar objek 2D
di layar. Class dasarnya adalah
Canvas
.
android.graphics.drawable
.
Untuk informasi selengkapnya tentang drawable dan resource lainnya, lihat
Resource.
android.opengl
dan javax.microedition.khronos.opengles
mengekspos fungsi OpenGL ES.Surface
(elemen API)Surface
. Gunakan class
SurfaceView
sebagai ganti
class Surface
secara langsung.
SurfaceView
(elemen API)View
yang menggabungkan
objek Surface
untuk menggambar, dan menampilkan metode untuk menentukan ukuran dan formatnya
secara dinamis. Tampilan platform menyediakan cara untuk menggambar secara terpisah dari UI thread
untuk operasi yang memerlukan banyak resource, seperti game atau pratinjau kamera, tetapi menggunakan memori tambahan
sebagai hasilnya. Tampilan platform 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 diinginkan, yang mungkin tidak dipatuhi oleh
induk. Untuk informasi selengkapnya, lihat
View
.
ViewGroup
(elemen API)widget
, tetapi memperluas class ViewGroup
.
android.widget
. Window
(elemen API)Window
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 Kanvas, OpenGL ES, atau Vulkan.
Komponen grafis Android
Apa pun API rendering yang digunakan developer, semuanya dirender ke platform. Platform mewakili sisi produsen dari antrean buffering yang sering digunakan oleh SurfaceFlinger. Setiap jendela yang dibuat di platform Android didukung oleh platform. Semua platform yang terlihat yang dirender digabungkan ke layar oleh SurfaceFlinger.
Diagram berikut menunjukkan cara kerja komponen utama:

Gambar 1. Cara platform dirender.
Komponen utamanya dijelaskan di bawah ini:
Produsen aliran gambar
Produsen streaming gambar dapat berupa apa pun yang menghasilkan buffering grafis untuk konsumsi. Contohnya termasuk dekoder video OpenGL ES, Canvas 2D, dan mediaserver.
Konsumen aliran data gambar
Pengguna aliran gambar yang paling umum adalah SurfaceFlinger, layanan sistem yang menggunakan platform yang saat ini terlihat dan menggabungkannya ke layar menggunakan informasi yang disediakan oleh Pengelola Jendela. SurfaceFlinger adalah satu-satunya layanan yang dapat mengubah konten layar. SurfaceFlinger menggunakan OpenGL dan Hardware Composer untuk menyusun grup platform.
Aplikasi OpenGL ES lainnya juga dapat menggunakan streaming gambar, seperti aplikasi kamera yang menggunakan streaming 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 Hardware Composer untuk memindahkan pekerjaan dari OpenGL dan GPU. SurfaceFlinger bertindak sebagai klien OpenGL ES lainnya. Jadi, saat SurfaceFlinger secara aktif mengomposisi satu atau dua buffering menjadi buffering ketiga, misalnya, SurfaceFlinger menggunakan OpenGL ES. Hal ini membuat kompilasi lebih hemat daya daripada meminta GPU melakukan semua komputasi.
Hardware Composer HAL melakukan setengah pekerjaan lainnya dan merupakan titik sentral untuk semua rendering grafis Android. Hardware Composer harus mendukung peristiwa, salah satunya adalah VSYNC (yang lain adalah hotplug untuk dukungan HDMI plug-and-play).
Gralloc
Allocator memori grafis (Gralloc) diperlukan untuk mengalokasikan memori yang diminta oleh produsen gambar. Untuk mengetahui detailnya, lihat Gralloc HAL.
Aliran data
Lihat diagram berikut untuk penggambaran pipeline grafis Android:

Gambar 2. Aliran data grafis melalui Android
Objek di sebelah kiri adalah perender yang menghasilkan buffering grafis, seperti layar utama, status bar, dan UI sistem. SurfaceFlinger adalah komposer dan Hardware Composer adalah komposer.
BufferQueue
BufferQueues menyediakan perekat antara komponen grafis Android. Ini adalah sepasang antrean yang memediasi siklus buffering konstan dari produsen ke konsumen. Setelah produsen menyerahkan buffer, SurfaceFlinger bertanggung jawab untuk mengomposisi semuanya ke layar.
Lihat diagram berikut untuk proses komunikasi BufferQueue.

Gambar 3. Proses komunikasi BufferQueue
BufferQueue berisi logika yang mengikat produsen streaming gambar dan konsumen streaming gambar. Beberapa contoh produsen gambar adalah pratinjau kamera yang dihasilkan oleh game OpenGL ES atau HAL kamera. Beberapa contoh konsumen gambar adalah SurfaceFlinger atau aplikasi lain yang menampilkan streaming OpenGL ES, seperti aplikasi kamera yang menampilkan jendela bidik kamera.
BufferQueue adalah struktur data yang menggabungkan kumpulan buffer dengan antrean dan menggunakan Binder IPC untuk meneruskan buffer antar-proses. Antarmuka produsen, atau yang Anda teruskan kepada seseorang yang ingin membuat buffering grafis, adalah IGraphicBufferProducer (bagian dari SurfaceTexture). BufferQueue sering digunakan untuk merender ke Platform dan digunakan dengan Konsumen GL, di antara tugas lainnya.
BufferQueue dapat beroperasi dalam tiga mode berbeda:
Mode mirip sinkron - BufferQueue secara default beroperasi dalam mode mirip sinkron, dengan setiap buffering yang masuk dari produsen keluar di konsumen. Tidak ada buffering yang dihapus dalam mode ini. Selain itu, jika produser terlalu cepat dan membuat buffering lebih cepat daripada dikosongkan, buffering akan diblokir dan menunggu buffering gratis.
Mode non-pemblokiran - BufferQueue juga dapat beroperasi dalam mode non-pemblokiran yang menghasilkan error, bukan menunggu buffer dalam kasus tersebut. Buffer juga tidak akan dihapus dalam mode ini. Hal ini berguna untuk menghindari potensi deadlock dalam software aplikasi yang mungkin tidak memahami dependensi kompleks framework grafis.
Mode hapus - Terakhir, BufferQueue dapat dikonfigurasi untuk menghapus buffer lama, bukan menghasilkan error atau menunggu. Misalnya, jika melakukan rendering GL ke tampilan tekstur dan menggambar secepat mungkin, buffering harus dihapus.
Untuk melakukan sebagian besar pekerjaan ini, SurfaceFlinger bertindak sebagai klien OpenGL ES lainnya. Jadi, saat SurfaceFlinger secara aktif mengomposisi satu atau dua buffering menjadi buffer ketiga, misalnya, SurfaceFlinger menggunakan OpenGL ES.
HAL Hardware Composer melakukan setengah pekerjaan lainnya. HAL ini berfungsi sebagai titik pusat untuk semua rendering grafis Android.