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, 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.
drawable
Ç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 nesneler etkinlik alamaz ancak animasyon nesneleri veya resim kitaplıkları gibi alt sınıfları etkinleştirmek için durum ve planlama gibi çeşitli diğer özellikleri 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 Kaynaklar bölümüne bakın.
layout resource
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.
nine-patch (9-patch, 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 Dokuz yama bölümüne 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.
surface (genel terim), Surface (API öğesi)
Yüzey, ekranda birleştirilen bir bellek bloğunu temsil eder. Yüzey, çizim için bir tuval içerir 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 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.
theme
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üntü grubu, bir dizi alt görüntüyü 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 kendi 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ı 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 bir görünüm ve görünüm grubu nesnesi 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.

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ğı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:

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, 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.

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, 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.