Grafikler

Android Graphics HAL simgesi

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 (genel terim), Canvas (API öğesi)
Tuval, gerçek bitlerin bir bitmap veya Surface nesnesi ile birleştirilmesini yöneten bir çizim yüzeyidir. Canvas sınıfında, bitmap, çizgi, daire, dikdörtgen, metin vb. standart bilgisayar çizimleri için yöntemler bulunur ve sınıf 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.
çekilebilir
Çizilebilir, arka plan, başlık veya ekranın başka bir parçası olarak kullanılabilen derlenmiş bir görsel kaynaktır. Çizilebilir öğeler genellikle başka bir kullanıcı arayüzü öğesine (ör. arka plan resmi olarak) yüklenir. Çizilebilir öğeler etkinlik alamaz ancak animasyon nesneleri veya resim kitaplıkları gibi alt sınıfları etkinleştirmek için durum ve planlama gibi çeşitli başka özellikler atar. Birçok çizilebilir nesne, çizilebilir kaynak dosyalarından yüklenir. Bu dosyalar, resmi tanımlayan XML veya bitmap dosyalarıdır. Çizilebilir kaynaklar, 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 Uygulama kaynaklarına genel bakış başlıklı makaleyi inceleyin.
düzen kaynağı
Düzen kaynağı, bir etkinlik ekranının düzenini açıklayan bir XML dosyasıdır. Daha fazla bilgi için Düzen kaynağı başlıklı makaleyi inceleyin.
dokuz yama (9 yama, NinePatch)
Dokuz yama, cihazdaki arka planlar veya diğer resimler için kullanılabilen, yeniden boyutlandırılabilen bir bitmap kaynağıdır. Daha fazla bilgi için Doku dokuz konusuna bakın.
OpenGL ES
OpenGL ES, 2D ve 3D grafikleri oluşturmak için kullanılan bir platformlar arası API'dir. Android, donanım hızlandırmalı 3D oluşturma için OpenGL ES kitaplıkları sağlar. 2D oluşturma için kanvas daha basit bir seçenektir. OpenGL ES, Android Native Development Kit (NDK)'de kullanılabilir. android.opengl ve javax.microedition.khronos.opengles paketleri OpenGL ES işlevini gösterir.
yüzey (genel terim), Surface (API öğesi)
Yüzey, ekranla birleştirilen bir bellek bloğunu temsil eder. Yüzey, çizim için bir tuval barındırır ve katman çizmek ve 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.
yüzey görünümü (genel terim), SurfaceView (API öğesi)
Yüzey görünümü, çizim için bir 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 ek 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.
tema
Tema, çeşitli varsayılan görüntüleme ayarlarını tanımlamak için bir araya getirilmiş metin boyutu ve arka plan rengi gibi bir özellik grubudur. Android, R.style bölümünde listelenen ve Theme_ ile başlayan birkaç standart tema sunar.
view (genel terim), View (API öğesi)
Görüntüleme, ekranda dikdörtgen bir alan çizer ve tıklama, tuş vuruşları ve diğer etkileşim etkinliklerini işler. 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.
görüntüleme grubu (genel terim), ViewGroup (API öğesi)
Görünüm grubu, bir dizi alt görünümü gruplandırır. Görünüm grubu, alt görünümlerin nerede konumlandırılacağına ve ne kadar büyük olabileceklerine karar vermekten, ayrıca uygun olduğunda her birini kendilerini çizmeye çağırmaktan sorumludur. Bazı görüntüleme grupları görünmez ve yalnızca düzen içindir. Diğerleri ise kaydırmalı liste kutusu gibi dahili bir kullanıcı arayüzüne sahiptir. Görüntüleme grupları android.widget paketindedir ancak ViewGroup sınıfını genişletir.
görünüm hiyerarşisi
Görünüm hiyerarşisi, bir uygulamanın her bileşeninin kullanıcı arayüzünü tanımlayan görünüm ve görünüm grubu nesnelerinin bir düzenlemesidir. Hiyerarşi, bir veya daha fazla alt görünüm ya da görünüm grubu içeren görünüm gruplarından oluşur. Android SDK'sı ile birlikte sağlanan Hiyerarşi Görüntüleyici'yi kullanarak hata ayıklama ve optimizasyon için bir görünüm hiyerarşisinin görsel temsilini elde edebilirsiniz.
Vulkan
Vulkan, yüksek performanslı 3D grafikler için kullanılan, düşük maliyetli bir platformlar arası API'dir.
widget
Widget, form öğelerini ve metin kutusu ya da pop-up menü gibi diğer kullanıcı arayüzü bileşenlerini oluşturan, tam olarak uygulanmış bir görünüm alt sınıflarından biridir. Widget'lar tam olarak uygulandığından ölçüm, çizim ve ekran etkinliklerine yanıt verme işlemlerini kendileri yapar. Widget'lar android.widget paketindedir.
window (genel terim), Window (API öğesi)
Android uygulamasında pencere, genel bir pencerenin öğelerini (ör. görünüm ve tarz, başlık çubuğu metni, menülerin konumu ve içeriği) belirten 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 ile.

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:

resim oluşturma bileşenleri

Şekil 1. Yüzeylerin oluşturulma şekli.

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 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ünen 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 (HWC) 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 HWC'ye devredebilir. SurfaceFlinger, 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. 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. HWC, 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 BufferQueue ve Gralloc başlıklı makaleyi inceleyin.

Veri akışı

Aşağıdaki şemada Android grafik ardışık düzeni gösterilmektedir:

grafik veri akışı

Ş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, derleyicidir ve HWC, derleyicidir.

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. Üretici tamponlarını aktardıktan sonra, ekrandaki her şeyi derlemekten SurfaceFlinger sorumludur.

Aşağıdaki şemada BufferQueue iletişim süreci gösterilmektedir:

BufferQueue iletişim süreci

Ş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, resim üreticilerine ö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'tür (SurfaceTexture'in bir parçasıdır). BufferQueue, genellikle bir yüzeyde oluşturma ve GL tüketicisiyle kullanma gibi diğer görevlerin yanı sıra 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.
Engelleme modu
BufferQueue, bu durumlarda tampon beklemek yerine hata oluşturduğu engellenmeyen 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
BufferQueue, hata oluşturmak veya beklemek yerine eski arabellekleri atlayacak ş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ı ç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ıdır.