
Android çerçevesi, 2D ve 3D için grafik sürücülerinin üretici uygulamalarıyla etkileşime geçen çeşitli grafik oluşturma API'leri sunar. Bu nedenle, bu API'lerin daha üst düzeyde nasıl çalıştığını iyi anlamak önemlidir. Bu sayfada, bu sürücülerin temel aldığı grafik donanım soyutlama katmanı (HAL) tanıtılmaktadır. Bu bölüme geçmeden önce aşağıdaki terimlerle ilgili bilgi edinin:
Canvas
(API öğesi)Surface
nesnesi ile birleştirilmesini yöneten bir çizim yüzeyidir. Canvas
, bitmap, çizgi, daire, dikdörtgen, metin vb. standart bilgisayar çizimleri için yöntemlere sahiptir ve bir bitmap veya yüzeye bağlıdır. Tuval, ekranda 2D nesneler çizmenin en basit ve en kolay yoludur. Temel sınıf Canvas
'tir.
android.graphics.drawable
sınıfının alt sınıflarına derlenir.
Çizilebilir öğeler ve diğer kaynaklar hakkında daha fazla bilgi için Kaynaklar bölümüne bakın.
android.opengl
ve javax.microedition.khronos.opengles
paketleri OpenGL ES işlevini gösterir.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 sarmalayan ve boyutunu ve biçimini dinamik olarak belirtmek için yöntemler gösteren bir View
nesnesi. Yüzey görünümü, oyunlar veya kamera önizlemeleri gibi yoğun kaynak kullanan işlemler için kullanıcı arayüzü iş parçacığından bağımsız olarak çizim yapmanın bir yolunu sağlar ancak bunun sonucunda daha fazla bellek kullanır. Yüzey görünümü hem kanvası 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ı, bir etkinliğin veya iletişim ekranının metin kutuları ve pencereler gibi çoğu düzen bileşeni için temel sınıftır. View
nesneleri, kendilerini çizmeleri için üst nesnelerinden (ViewGroup
bölümüne bakın) çağrı alır ve üst nesnelerini tercih ettikleri boyut ve konum hakkında bilgilendirir. Üst nesne bu bilgilere uymayabilir. Daha fazla bilgi için View
başlıklı makaleyi inceleyin.
ViewGroup
(API öğesi)widget
paketindedir ancak ViewGroup
sınıfını genişletir.
android.widget
paketindedir. Window
(API öğesi)Window
temsili sınıfından türetilen bir nesnedir. İletişim kutuları ve etkinlikler, Window
nesnesi oluşturmak için Window
sınıfının bir uygulamasını kullanır. Uygulamanızda Window
sınıfını uygulamanız veya pencereleri kullanmanız gerekmez.Uygulama geliştiriciler ekrana üç şekilde resim çizer: Canvas, OpenGL ES veya Vulkan.
Android grafik bileşenleri
Geliştiriciler hangi oluşturma API'sini kullanırsa kullansın her şey bir yüzeye 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 desteklenir. 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:

Şekil 1. Yüzeylerin oluşturulma şekli.
Ana bileşenler aşağıda açıklanmıştır:
Resim akışı üreticileri
Görüntü akışı üreticisi, tüketim için grafik arabellekleri üreten herhangi bir şey olabilir. OpenGL ES, Canvas 2D ve mediaserver video kod çözücüleri bunlara örnek olarak verilebilir.
Resim akışı tüketicileri
Resim akışlarını en yaygın şekilde kullanan SurfaceFlinger, şu anda görünür olan yüzeyleri kullanan ve Pencere Yöneticisi tarafından sağlanan bilgileri kullanarak bunları ekranda birleştiren sistem hizmetidir. SurfaceFlinger, ekranın içeriğini değiştirebilen tek hizmettir. SurfaceFlinger, bir yüzey grubu oluşturmak için OpenGL ve Donanım Oluşturucu'yu kullanır.
Diğer OpenGL ES uygulamaları da resim akışlarını kullanabilir. Örneğin, kamera önizleme resim akışını kullanan kamera uygulaması. GL dışı uygulamalar da tüketici olabilir (ör. ImageReader sınıfı).
Donanım Bestecisi
Görüntü alt sistemi için donanım soyutlaması. SurfaceFlinger, OpenGL ve GPU'dan iş yükünü azaltmak için belirli kompozisyon işlerini Donanım Oluşturucu'ya devredebilir. SurfaceFlinger, başka bir OpenGL ES istemcisi gibi çalışır. Bu nedenle SurfaceFlinger, bir veya iki arabelleği üçüncü bir arabellekle etkin bir şekilde birleştirirken (ör. OpenGL ES kullanır). Bu sayede, GPU'nun tüm hesaplamaları yapmasına kıyasla daha az güç harcayarak kompozisyon oluşturabilirsiniz.
Hardware Composer HAL, işin diğer yarısını yönetir ve tüm Android grafik oluşturma işlemlerinin merkezi noktasıdır. Donanım Derleyici, etkinlikleri desteklemelidir. Bunlardan biri VSYNC'tir (bir diğeri, tak ve çalıştır HDMI desteği için hotplug'tır).
Gralloc
Görüntü üreticiler tarafından istenen belleği ayırmak için grafik bellek ayırıcı (Gralloc) gerekir. Ayrıntılar için Gralloc HAL başlıklı makaleyi inceleyin.
Veri akışı
Android grafik ardışık düzeninin gösterimi için aşağıdaki şemaya bakın:

Ş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şturma araçlarıdır. SurfaceFlinger, birleştiricidir ve Hardware Composer, bestecidir.
BufferQueue
Arabellek sıraları, Android grafik bileşenleri arasındaki bağlantıyı sağlar. Bunlar, üreticiden tüketiciye sürekli bir arabellek döngüsü sağlayan bir çift sıradır. Üreticiler arabelleklerini aktardıktan sonra, ekranda her şeyi bir araya getirmekten SurfaceFlinger sorumludur.
BufferQueue iletişim süreci için aşağıdaki şemaya bakın.

Şekil 3. BufferQueue iletişim işlemi
BufferQueue, resim akışı üreticilerini ve resim akışı tüketicilerini birbirine bağlayan mantığı içerir. Kamera HAL veya OpenGL ES oyunları tarafından üretilen kamera önizlemeleri, görüntü üreticilere örnek olarak verilebilir. Görüntü tüketicilerine örnek olarak SurfaceFlinger veya OpenGL ES akışı görüntüleyen başka bir uygulama (ör. kamera vizörünü görüntüleyen kamera uygulaması) verilebilir.
BufferQueue, bir arabellek havuzunu bir sırayla birleştiren ve arabellekleri işlemler arasında aktarmak için Binder IPC'yi kullanan bir veri yapısıdır. Üretici arayüzü veya grafik arabellekleri oluşturmak isteyen bir kullanıcıya ilettiğiniz şey IGraphicBufferProducer'dır (SurfaceTexture'ın bir parçasıdır). BufferQueue, diğer görevlerin yanı sıra bir yüzeyde oluşturma ve GL tüketicisiyle tüketme için sıklıkla kullanılır.
BufferQueue üç farklı modda çalışabilir:
Senkronize benzeri mod: BufferQueue varsayılan olarak, üreticiden gelen her arabelleğin tüketiciye gönderildiği senkronize benzeri bir modda çalışır. Bu modda hiçbir arabellek atılmaz. Üretici çok hızlıysa ve arabellekleri boşaltılmaktan daha hızlı oluşturuyorsa arabellekleri engeller ve boş arabellekler için bekler.
Engellemesiz mod: BufferQueue, bu durumlarda bir arabelleğe beklemek yerine hata oluşturduğu engellemesiz bir modda da çalışabilir. Bu modda da hiçbir arabellek atılmaz. Bu, grafik çerçevesinin karmaşık bağımlılıklarını anlamayabilecek uygulama yazılımlarında olası kilitlenmelerden kaçınmak için kullanışlıdır.
Silme modu: Son olarak, BufferQueue hataları oluşturmak veya beklemek yerine eski arabellekleri silecek şekilde yapılandırılabilir. Örneğin, GL oluşturma işlemini bir doku görünümünde gerçekleştirirken ve mümkün olduğunca hızlı bir şekilde çizim yaparken arabellekler bırakılmalıdır.
SurfaceFlinger, bu işin çoğunu yapmak için başka bir OpenGL ES istemcisi gibi çalışır. Örneğin, SurfaceFlinger bir veya iki arabelleği üçüncü bir arabellekle etkin bir şekilde birleştirirken OpenGL ES'i kullanır.
Donanım Oluşturucu HAL, işin diğer yarısını yürütür. Bu HAL, tüm Android grafik oluşturma işlemlerinin merkezi noktası olarak çalışır.