![Android Grafik HAL simgesi](https://source.android.com/static/docs/core/graphics/images/ape-fwk-hal-graphics.png?authuser=5&hl=tr)
Android çerçevesi, 2D ve 3D için üreticinin grafik sürücüleri uygulamalarıyla etkileşime giren çeşitli grafik işleme API'leri sunar; dolayısıyla bu API'lerin daha yüksek düzeyde nasıl çalıştığını iyi anlamak önemlidir. Bu sayfada, bu sürücülerin üzerinde oluşturulduğu grafik donanımı soyutlama katmanı (HAL) tanıtılmaktadır. Bu bölüme devam etmeden önce aşağıdaki terimlere aşina olun:
Canvas
(API öğesi)Surface
nesnesine göre birleştirilmesiyle ilgilenen bir çizim yüzeyidir. Canvas
bitmap'lerin, çizgilerin, dairelerin, dikdörtgenlerin, metinlerin vb. standart bilgisayar çizimi için yöntemlere sahiptir ve bir bitmap'e veya yüzeye bağlanır. Kanvas, ekranda 2 boyutlu nesneler çizmenin en basit ve en kolay yoludur. Temel sınıf Canvas
.android.graphics.drawable
alt sınıfları halinde derlenir. Çizilebilir öğeler ve diğer kaynaklar hakkında daha fazla bilgi için bkz.android.opengl
ve javax.microedition.khronos.opengles
paketleri OpenGL ES işlevselliğini ortaya çıkarır.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)Surface
nesnesini çizim için saran ve boyutunu ve formatını dinamik olarak belirlemeye yönelik yöntemleri ortaya çıkaran bir View
nesnesidir. Yüzey görünümü, oyunlar veya kamera önizlemeleri gibi yoğun kaynak gerektiren işlemler için kullanıcı arayüzü iş parçacığından bağımsız olarak çizim yapmanın bir yolunu sağlar, ancak sonuç olarak ekstra bellek kullanır. Yüzey görünümü hem tuvali hem de OpenGL ES grafiklerini destekler. SurfaceView
nesnesinin temel sınıfı SurfaceView
.R.style
listelenen ve Theme_
ile başlayan birkaç standart tema sağlar.View
(API öğesi)View
sınıfı, bir etkinlik veya iletişim ekranının metin kutuları ve pencereler gibi çoğu düzen bileşeni için temel sınıftır. Bir View
nesnesi, kendisini çizmek için ana nesnesinden (bkz. ViewGroup
) çağrılar alır ve üst nesnesine, üst nesne tarafından dikkate alınmayabilecek, tercih edilen boyutu ve konumu hakkında bilgi verir. Daha fazla bilgi için bkz. View
.ViewGroup
(API öğesi)widget
paketindedir ancak ViewGroup
sınıfını genişletir.android.widget
paketindedir.Window
(API öğesi)Window
soyut sınıfından türetilmiş bir nesnedir. İletişim kutuları ve etkinlikler, bir Window
nesnesini işlemek için Window
sınıfının bir uygulamasını kullanır. Uygulamanızda Window
sınıfını uygulamanıza veya pencereleri kullanmanıza gerek yoktur.Uygulama geliştiricileri görüntüleri ekrana üç şekilde çizer: Canvas , OpenGL ES veya Vulkan ile.
Android grafik bileşenleri
Oluşturma API geliştiricilerinin kullandığı şey ne olursa olsun, her şey bir yüzey üzerinde oluşturulur. Yüzey, genellikle SurfaceFlinger tarafından tüketilen bir arabellek kuyruğunun üretici tarafını temsil eder. Android platformunda oluşturulan her pencere bir yüzey tarafından desteklenmektedir. Oluşturulan tüm görünür yüzeyler SurfaceFlinger tarafından ekranda birleştirilir.
Aşağıdaki şemada temel bileşenlerin birlikte nasıl çalıştığı gösterilmektedir:
![görüntü işleme bileşenleri](https://source.android.com/static/docs/core/graphics/images/ape-fwk-graphics.png?authuser=5&hl=tr)
Şekil 1. Yüzeylerin nasıl oluşturulduğu.
Ana bileşenler aşağıda açıklanmıştır:
Görüntü akışı üreticileri
Bir görüntü akışı üreticisi, tüketim için grafik arabellekleri üreten herhangi bir şey olabilir. Örnekler arasında OpenGL ES, Canvas 2D ve mediaserver video kod çözücüleri yer alır.
Görüntü akışı tüketicileri
Görüntü akışlarının en yaygın tüketicisi, mevcut görünür yüzeyleri tüketen ve bunları Pencere Yöneticisi tarafından sağlanan bilgileri kullanarak ekranda birleştiren sistem hizmeti olan SurfaceFlinger'dır. SurfaceFlinger, ekranın içeriğini değiştirebilen tek hizmettir. SurfaceFlinger, bir yüzey grubu oluşturmak için OpenGL ve Hardware Composer'ı kullanır.
Kamera ön izleme görüntü akışını tüketen kamera uygulaması gibi diğer OpenGL ES uygulamaları da görüntü akışlarını tüketebilir. ImageReader sınıfı gibi GL olmayan uygulamalar da tüketici olabilir.
Donanım Oluşturucu
Görüntü alt sistemi için donanım soyutlaması. SurfaceFlinger, işi OpenGL ve GPU'dan boşaltmak için belirli kompozisyon çalışmalarını Donanım Oluşturucuya devredebilir. SurfaceFlinger, başka bir OpenGL ES istemcisi gibi davranır. Dolayısıyla, SurfaceFlinger aktif olarak bir veya iki arabelleği üçüncüde birleştirirken, OpenGL ES kullanıyor. Bu, birleştirme işlemini GPU'nun tüm hesaplamayı yürütmesinden daha düşük güç haline getirir.
Donanım Oluşturucu HAL, işin diğer yarısını yürütür ve tüm Android grafik oluşturma işlemlerinin merkezi noktasıdır. Donanım Oluşturucusu, biri VSYNC olan (diğeri tak ve çalıştır HDMI desteği için çalışırken takılabilen) olayları desteklemelidir.
Gralloc
Görüntü üreticilerinin talep ettiği belleği tahsis etmek için grafik bellek ayırıcısına (Gralloc) ihtiyaç vardır. Ayrıntılar için bkz. Gralloc HAL .
Veri akışı
Android grafik işlem hattının bir tasviri için aşağıdaki şemaya bakın:
![grafik veri akışı](https://source.android.com/static/docs/core/graphics/images/graphics-pipeline.png?authuser=5&hl=tr)
Şekil 2. Android üzerinden grafik veri akışı
Soldaki nesneler, ana ekran, durum çubuğu ve sistem kullanıcı arayüzü gibi grafik arabellekleri üreten oluşturuculardır. SurfaceFlinger bestecidir ve Hardware Composer bestecidir.
Tampon Kuyruğu
BufferQueues, Android grafik bileşenleri arasında birleştirici görevi görür. Bunlar, üreticiden tüketiciye kadar sürekli tampon döngüsüne aracılık eden bir çift kuyruktur. Üreticiler arabelleklerini teslim ettikten sonra SurfaceFlinger her şeyin ekranda birleştirilmesinden sorumludur.
BufferQueue iletişim süreci için aşağıdaki şemaya bakın.
![BufferQueue iletişim süreci](https://source.android.com/static/docs/core/graphics/images/bufferqueue.png?authuser=5&hl=tr)
Ş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ü üreticilerinin bazı örnekleri, kamera HAL veya OpenGL ES oyunları tarafından üretilen kamera önizlemeleridir. Görüntü tüketicilerine örnek olarak SurfaceFlinger veya kamera vizörünü görüntüleyen kamera uygulaması gibi OpenGL ES akışını görüntüleyen başka bir uygulama verilebilir.
BufferQueue, arabellek havuzunu bir kuyrukla birleştiren ve işlemler arasında arabellekleri geçirmek için Binder IPC'yi kullanan bir veri yapısıdır. Üretici arayüzü veya grafik arabellekleri oluşturmak isteyen birine ilettiğiniz şey IGraphicBufferProducer'dır ( SurfaceTexture'ın bir parçası). BufferQueue, diğer görevlerin yanı sıra genellikle bir Yüzeye işlemek ve bir GL Tüketici ile tüketmek için kullanılır.
BufferQueue üç farklı modda çalışabilir:
Eşzamanlı benzeri mod - BufferQueue, varsayılan olarak, üreticiden gelen her arabelleğin tüketiciye çıktığı eşzamanlı benzeri bir modda çalışır. Bu modda hiçbir zaman arabellek atılmaz. Üretici çok hızlıysa ve boşaltıldığından daha hızlı arabellekler oluşturursa, engelleyecek ve boş arabellekleri bekleyecektir.
Engellemesiz mod - BufferQueue, bu durumlarda arabellek beklemek yerine hata ürettiği engellemesiz modda da çalışabilir. Bu modda da hiçbir zaman arabellek atılmaz. Bu, grafik çerçevesinin karmaşık bağımlılıklarını anlayamayabilecek uygulama yazılımındaki olası kilitlenmeleri önlemek için kullanışlıdır.
Atma modu - Son olarak BufferQueue, hata oluşturmak veya beklemek yerine eski arabellekleri atacak şekilde yapılandırılabilir. Örneğin, GL oluşturmayı bir doku görünümüne ve çizime mümkün olduğu kadar hızlı bir şekilde gerçekleştiriyorsanız, ara belleklerin bırakılması gerekir.
Bu işin çoğunu yürütmek için SurfaceFlinger, başka bir OpenGL ES istemcisi gibi davranır. Dolayısıyla SurfaceFlinger aktif olarak bir veya iki arabelleği üçüncüde birleştirirken, OpenGL ES kullanıyor.
Donanım Bestecisi HAL işin diğer yarısını yürütür. Bu HAL, tüm Android grafik oluşturma işlemlerinin merkezi noktası görevi görür.