
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 üzerinde oluşturulduğu 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ı; bit eşlemlerin, çizgilerin, dairelerin, dikdörtgenlerin, metinlerin vb. standart bilgisayar çizimi için yöntemlere sahiptir ve bir 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ına 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
şeklindedir.
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şeni için temel sınıftır. Bir View
nesnesi, kendini ç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 ile üç şekilde ekrana 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 kuyruğunun ü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üzeyler nasıl oluşturulur?
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'dir. SurfaceFlinger, ekranın içeriğini değiştirebilen tek hizmettir. SurfaceFlinger, bir grup yüzeyi 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ı bir kamera önizleme görüntü akışını kullanır. GL dışı uygulamalar da tüketici olabilir. Örneğin, ImageReader sınıfı.
Donanım Composer
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 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ının (Gralloc), görüntü üreticiler tarafından istenen belleği ayırması gerekir. 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
BufferQueue'lar, 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 sıra çiftidir. Ü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 geçirmek için Binder işlemleri arası iletişim (IPC) kullanan bir veri yapısıdır. Üretici arayüzü veya grafik arabellekler oluşturmak isteyen birine ilettiğiniz öğe, IGraphicBufferProducer
(SurfaceTexture
'nin bir parçası) şeklindedir. BufferQueue, diğer görevlerin yanı sıra genellikle bir Surface'e oluşturmak ve GLConsumer ile kullanmak için kullanılır.
BufferQueue üç farklı modda çalışabilir:
SurfaceFlinger, bu işin büyük bir kısmını yapmak için 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 kullanır.
Çalışmanın diğer yarısını Hardware Composer HAL gerçekleştirir. Bu HAL, tüm Android grafiklerinin oluşturulması için merkezi nokta görevi görür.