
Framework Android menawarkan berbagai API rendering grafis untuk 2D dan 3D yang berinteraksi dengan implementasi driver grafis dari produsen, jadi penting untuk memahami dengan baik cara kerja API tersebut pada tingkat yang lebih tinggi. Halaman ini memperkenalkan hardware abstraction layer (HAL) grafis yang menjadi dasar pembuatan 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. Canvas 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 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 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 Canvas, OpenGL ES, atau Vulkan.
Komponen grafik Android
Apa pun API rendering yang digunakan developer, semuanya dirender ke permukaan. Permukaan merepresentasikan sisi produsen dari antrean buffer yang sering digunakan oleh SurfaceFlinger. Setiap jendela yang dibuat di platform Android didukung oleh sebuah platform. Semua layanan yang dirender dan terlihat dikomposisikan ke layar oleh SurfaceFlinger.
Diagram berikut menunjukkan cara kerja komponen utama bersama-sama:
Gambar 1. Cara platform dirender.
Komponen utama dijelaskan di bagian berikut.
Produsen aliran gambar
Produsen aliran gambar dapat berupa apa pun yang menghasilkan buffer grafis untuk penggunaan. Contohnya mencakup OpenGL ES, Canvas 2D, dan dekoder video mediaserver.
Konsumen streaming 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 menyusun 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 tugas 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 buffer ketiga, misalnya, SurfaceFlinger menggunakan OpenGL ES. Hal ini membuat komposit menggunakan daya yang lebih rendah daripada GPU yang melakukan semua komputasi.
HAL Hardware Composer melakukan separuh 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 perender yang menghasilkan buffer grafis, seperti layar utama, status bar, dan UI sistem. SurfaceFlinger adalah compositor dan HWC adalah composer.
BufferQueue
BufferQueue menyediakan hubungan antara komponen grafis Android. Ini adalah sepasang antrean yang memediasi siklus buffer yang konstan dari produsen ke konsumen. Setelah produser 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 dengan 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 buffer ketiga, misalnya, SurfaceFlinger menggunakan OpenGL ES.
HAL Hardware Composer melakukan separuh pekerjaan lainnya. HAL ini bertindak sebagai titik pusat untuk semua rendering grafis Android.