Android çerçevesi, 2D ve 3D için çeşitli grafik oluşturma API'leri sunar. Bu API'ler, grafik sürücülerinin üretici uygulamalarıyla etkileşime girer. Bu nedenle, bu API'lerin daha üst düzeyde nasıl çalıştığını iyi anlamak önemlidir. Bu sayfada, söz konusu sürücülerin temelini oluşturan grafik donanım soyutlama katmanı (HAL) tanıtılmaktadır. Bu bölüme devam etmeden önce aşağıdaki terimler hakkında bilgi edinin:
Canvas (API öğesi)Surface nesnesiyle birleştirilmesini sağlayan bir çizim yüzeyidir. Canvas sınıfında; bit eşlemlerin, çizgilerin, dairelerin, dikdörtgenlerin, metinlerin vb. standart bilgisayar çizimi için yöntemler bulunur ve bu sınıf, bit eşleme veya yüzeye bağlıdır. Tuval, ekranda 2 boyutlu nesneler çizmenin en basit ve kolay yoludur. Temel sınıf Canvas'dır.
android.graphics.drawable alt sınıfları olarak derlenir.
Çizilebilir öğeler ve diğer kaynaklar hakkında daha fazla bilgi için Uygulama kaynaklarına genel bakış başlıklı makaleyi inceleyin.
android.opengl
ve javax.microedition.khronos.opengles
paketleri, OpenGL ES işlevini kullanıma sunar.Surface (API öğesi)Surface nesnesini yeniden boyutlandırmak için çeşitli yardımcı yöntemler sağlar. Doğrudan Surface sınıfı yerine SurfaceView sınıfını kullanın.
SurfaceView (API öğesi)View nesnesini sarmalayan ve boyutunu ve biçimini dinamik olarak belirtmek için yöntemler sunan bir Surface nesnesidir. SurfaceView, oyunlar veya kamera önizlemeleri gibi kaynak yoğun işlemler için kullanıcı arayüzü iş parçacığından bağımsız olarak çizim yapma olanağı sunar ancak sonuç olarak ek bellek kullanır. Bir yüzey görünümü hem tuval hem de OpenGL ES grafiklerini destekler. SurfaceView nesnesinin temel sınıfı SurfaceView'dır.
R.style bölümünde listelenen ve Theme_ ile başlayan birkaç standart tema sunar.View (API öğesi)View sınıfı, metin kutuları ve pencereler gibi bir etkinlik veya iletişim kutusu ekranının çoğu düzen bileşeninin temel sınıfıdır. Bir View nesnesi, kendisini çizmek için üst nesnesinden çağrı alır (bkz. ViewGroup) ve üst nesnesini tercih ettiği boyut ve konum hakkında bilgilendirir. Bu bilgiler üst nesne tarafından dikkate alınmayabilir. Daha fazla bilgi için View sayfasına bakın.
ViewGroup (API öğesi)android.widget
paketindedir ancak ViewGroup
sınıfını genişletir.
android.widget paketinde yer alır. Window (API öğesi)Window soyut sınıfından türetilmiş bir nesnedir. İletişim kutuları ve etkinlikler, Window nesnesini oluşturmak için Window sınıfının bir uygulamasını kullanır. Window sınıfını uygulamanız veya uygulamanızda pencereler kullanmanız gerekmez.Uygulama geliştiriciler, Canvas, OpenGL ES veya Vulkan kullanarak ekrana üç şekilde görüntü çizer.
Android grafik bileşenleri
Geliştiriciler hangi oluşturma API'sini kullanırsa kullansın, her şey bir yüzey üzerinde oluşturulur. Yüzey, genellikle SurfaceFlinger tarafından kullanılan bir arabellek sırasının üretici tarafını temsil eder. Android platformunda oluşturulan her pencere bir yüzeyle desteklenir. Görüntülenen tüm yüzeyler, SurfaceFlinger tarafından ekranda birleştirilir.
Aşağıdaki şemada, temel bileşenlerin birlikte nasıl çalıştığı gösterilmektedir:

Şekil 1. Yüzeylerin nasıl oluşturulduğu
Ana bileşenler aşağıdaki bölümlerde açıklanmıştır.
Görüntü akışı üreticileri
Görüntü akışı üreticisi, tüketim için grafik arabellekler üreten herhangi bir şey olabilir. OpenGL ES, Canvas 2D ve mediaserver video kod çözücüleri buna örnek olarak verilebilir.
Resim akışı tüketicileri
Görüntü akışlarının en yaygın tüketicisi, şu anda görünür olan yüzeyleri tüketen ve Pencere Yöneticisi tarafından sağlanan bilgileri kullanarak bunları ekranda birleştiren sistem hizmeti SurfaceFlinger'dır. SurfaceFlinger, ekranın içeriğini değiştirebilen tek hizmettir. SurfaceFlinger, bir yüzey grubunu oluşturmak için OpenGL ve Hardware Composer'ı (HWC) kullanır.
Diğer OpenGL ES uygulamaları da görüntü akışlarını kullanabilir. Örneğin, kamera uygulaması, kamera önizleme görüntü akışını kullanır. GL dışı uygulamalar da tüketici olabilir. Örneğin, ImageReader sınıfı.
Donanım Bestecisi
Ekran alt sistemi için donanım soyutlama. SurfaceFlinger, OpenGL ve GPU'nun iş yükünü azaltmak için belirli birleştirme işlerini HWC'ye devredebilir. SurfaceFlinger, yalnızca başka bir OpenGL ES istemcisi gibi davranır. Bu nedenle, SurfaceFlinger bir veya iki arabelleği etkin bir şekilde üçüncü bir arabellekte birleştirirken örneğin OpenGL ES'yi kullanır. Bu durum, GPU'nun tüm hesaplamaları yapmasına kıyasla daha az güç tüketir.
İşin diğer yarısını Hardware Composer HAL yapar ve tüm Android grafik oluşturma işlemlerinin merkezi noktasıdır. HWC, etkinlikleri desteklemelidir. Bu etkinliklerden biri VSync'tir (diğeri, tak ve çalıştır HDMI desteği için hotplug'dır).
Gralloc
Grafik belleği ayırıcısı (Gralloc), görüntü üreticiler tarafından istenen belleği ayırmak için gereklidir. Ayrıntılar için BufferQueue ve Gralloc başlıklı makaleyi inceleyin.
Veri akışı
Aşağıdaki şemada Android grafik ardışık düzeni gösterilmektedir:

Şekil 2. Android'deki grafik veri akışı.
Soldaki nesneler, ana ekran, durum çubuğu ve sistem kullanıcı arayüzü gibi grafik arabellekleri oluşturan oluşturuculardır. SurfaceFlinger, birleştiricidir ve HWC de birleştiricidir.
BufferQueue
BufferQueues, Android grafik bileşenleri arasında bağlantı sağlar. Bunlar, üreticiden tüketiciye sürekli olarak gönderilen arabellek döngüsüne aracılık eden bir çift sıradır. Üreticiler arabelleklerini teslim ettikten sonra SurfaceFlinger, her şeyi ekranda birleştirmekten sorumludur.
Aşağıdaki şemada BufferQueue iletişim süreci gösterilmektedir:

Şekil 3. BufferQueue iletişim süreci.
BufferQueue, görüntü akışı üreticilerini ve görüntü akışı tüketicilerini birbirine bağlayan mantığı içerir. Görüntü üreticilere örnek olarak kamera HAL'si tarafından üretilen kamera önizlemeleri veya OpenGL ES oyunları verilebilir. SurfaceFlinger veya OpenGL ES akışı görüntüleyen başka bir uygulama (ör. kamera vizörünü görüntüleyen kamera uygulaması) görüntü tüketicilere örnek olarak verilebilir.
BufferQueue, arabellek havuzunu kuyrukla birleştiren ve işlemler arasında arabellekleri aktarmak için Binder işlemleri arası iletişimini (IPC) kullanan bir veri yapısıdır. Üretici arayüzü veya grafik arabellekler oluşturmak isteyen birine ilettiğiniz şey IGraphicBufferProducer (SurfaceTexture'ın bir parçası) olur. BufferQueue, diğer görevlerin yanı sıra genellikle bir Surface'e oluşturmak ve GLConsumer ile tüketmek için kullanılır.
BufferQueue üç farklı modda çalışabilir:
SurfaceFlinger, bu işin büyük bir kısmını yürütmek için yalnızca başka bir OpenGL ES istemcisi olarak işlev görür. Bu nedenle, SurfaceFlinger bir veya iki arabelleği etkin olarak üçüncü bir arabellekte birleştirdiğinde (örneğin), OpenGL ES'yi kullanır.
Donanım Composer HAL, işin diğer yarısını yapar. Bu HAL, tüm Android grafiklerinin oluşturulması için merkezi nokta görevi görür.