Google 致力于为黑人社区推动种族平等。查看具体举措
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Yüzey ve Yüzey Tutucu

Yüzey nesneleri, uygulamaların görüntülerin ekranlarda sunulmasını sağlar. SurfaceHolder arayüzleri, uygulamaların yüzeyleri düzenlemesini ve kontrol etmesini sağlar.

Yüzey

Yüzey , bir üreticinin bir tüketiciyle tampon alışverişi yapması için bir arayüzdür.

Bir görüntü yüzeyi için BufferQueue tipik olarak üçlü ara belleğe alma için yapılandırılır. Tamponlar isteğe bağlı olarak tahsis edilir, bu nedenle, eğer üretici, 60 fps'lik bir ekranda 30 fps'de olduğu gibi, yeterince yavaş tampon oluşturuyorsa, kuyrukta yalnızca iki ayrılmış tampon olabilir. Arabelleklerin isteğe bağlı olarak tahsis edilmesi bellek tüketimini en aza indirmeye yardımcı olur. dumpsys SurfaceFlinger çıktısında her katmanla ilişkili tamponların bir özetini görebilirsiniz.

Çoğu istemci OpenGL ES veya Vulkan kullanarak yüzeylerde render alır. Bununla birlikte, bazı istemciler bir tuval kullanarak yüzeyler üzerinde render ederler.

Tuval oluşturma

Tuval uygulaması Skia Grafik Kitaplığı tarafından sağlanır. Bir dikdörtgen çizmek istiyorsanız, baytları tamponda uygun şekilde ayarlayan Canvas API'yi çağırırsınız. Bir arabelleğin aynı anda iki istemci tarafından güncellenmediğinden veya görüntülenirken yazılmadığından emin olmak için, arabelleğe erişmek için arabelleği kilitleyin. Kanvas kilitlerle çalışmak için aşağıdaki komutları kullanın:

  • lockCanvas() , CPU'da işleme için arabelleği kilitler ve çizim için kullanmak üzere bir Canvas döndürür.
  • unlockCanvasAndPost() arabelleğin kilidini açar ve onu oluşturucuya gönderir.
  • lockHardwareCanvas() , GPU'da oluşturma için arabelleği kilitler ve çizim için kullanılacak bir tuval döndürür.

Üretici, BufferQueue'dan ilk kez bir tampon talep ettiğinde, tampon tahsis edilir ve sıfıra başlatılır. İşlemler arasında yanlışlıkla veri paylaşımını önlemek için başlatma gereklidir. Ancak, bir tamponu yeniden kullanırsanız, önceki içerik hala mevcuttur. lockCanvas() ve unlockCanvasAndPost() herhangi bir şey unlockCanvasAndPost() tekrar tekrar çağırırsanız, üretici önceden oluşturulmuş kareler arasında geçiş yapar.

Yüzey kilitleme / kilit açma kodu, önceden oluşturulmuş tampona bir referansı tutar. Yüzeyi kilitlerken kirli bir bölge belirtirseniz, kirli olmayan pikselleri önceki arabellekten kopyalar. SurfaceFlinger veya HWC tipik olarak arabelleği işler; ancak sadece arabellekten okumamız gerektiğinden, özel erişim için beklemeye gerek yok.

SurfaceHolder

SurfaceHolder , sistemin yüzeylerin sahipliğini uygulamalarla paylaşmak için kullandığı bir arabirimdir. Yüzeylerle çalışan bazı istemciler bir SurfaceHolder ister, çünkü yüzey parametrelerini almak ve ayarlamak için API'ler bir SurfaceHolder aracılığıyla uygulanır. Bir SurfaceView , bir SurfaceHolder içerir.

Bir görünümle etkileşime giren çoğu bileşen bir SurfaceHolder içerir. MediaCodec gibi diğer bazı API'ler yüzey üzerinde çalışır.