Android 12'de RenderEffect API

Güncelleme tarihi: 13 Tem 2021



Android 12, yenilenmiş tasarımı ve sahip olduğu özelliklerle beğeni topladı. Özellikle kullanıcı arayüzündeki sadelik ve grafik efektlerdeki iyileştirmeler, öne çıkan özelliklerin başında geliyor. Bu yazıda, öne çıkan özelliklerden görsel efekt oluşturmak için eklenen RenderEffect kütüphanesini inceleyeceğiz.


Mobil uygulamaların akıcı şekilde çalışması ve göze hoş gelen bir görsellik sunması, uygulamanın devamlılığını sağlayan en önemli unsurlardan biri. Bilindiği üzere iOS SDK, görsel efekt oluşturma için native destek sunarken Android SDK görsel efekt oluşturmak için native desteğe sahip değil. Sunulan geçici yöntemler de bildiğiniz gibi uzun vadede ciddi sorunlara neden oluyor. Fakat Android12 ile gelen native destek ile birlikte bu sorunlar çözüme kavuşacak.


Android 12 Öncesi


Android 12 öncesi efekt kullanımı için ek kütüphaneler gerekiyordu. Ama ek kütüphaneler de bir noktadan sonra yetersiz kaldı. Örneğin;

  • İç içe konumlanmış bileşenlere eklenen görsel efektler akıcı çalışamadı.

  • Çok elemanlı bir listenin kullanımında görsel efektler akıcı çalışamadı.

  • RenderScript ve OpenGL ile yapılan görsel efektlerde performans sorunları kullanıcı deneyimini olumsuz yönde etkiledi.

  • Native bir görünüm elde etmek zordu.

🗣 Ek kütüphaneler (3. parti) iOS üzerinde Android işletim sistemine göre daha iyi sonuçlar veriyor.


Efektler Akıcı Çalışmıyor Ne Demek?


Efekt oluşturma (rendering) işlemleri yüksek belleğe (memory) ihtiyaç duyuyor. Uygulamada kullanılan görsel efektlerin — bu bir geçiş efekti de olabilir — akıcı şekilde görünmesi için de uygulamanın saniyede 60 kare (frame) gösterebilmesi gerekiyor. Peki bu bir saniyede neler yapılmalı? Daha doğrusu bir frame için en fazla 16ms'de neler yapılmalı? Hesaplamalar; ağ işlemleri, görüntü oluşturma işlemleri, kısaca her şey... Aksi durumda uygulamanın takılması veya donması kaçınılmaz. Efektler akıcı çalışmaz ve göze hoş gelmeyen bir görüntü ortaya çıkar. Özellikle düşük-orta segment cihazlarda kısıtlı donanıma bağlı işlem gücü yetersizliği, imaj oluşturma işlemlerinde arayüz kilitlenmeleri (UI freeze) ve uygulama çökmesine (hard crash) neden olur.


🗣 İşlem gücü düşük olan cihazlar bu özelliği destekleyemeyebilir.

Aşağıdaki örnekte işlem sayısına bağlı olarak değişen durumu inceleyelim.

Bu örnek ek kütüphane kullanılarak yapılmıştır.

(GPU kullanımı, örneklem) {(4.49 MB, 2), (37.98 MB, 10), (82.10 MB, 20)}



💡 Uygulamanın UI performans sonuçlarında görüldüğü gibi örneklem sayısı arttıkça bellek kullanımı artmıştır.


Android 12 ile Ne Değişti?


RenderEffect API sayesinde bugüne kadar elde etmeye çalıştığımız görsel efektler eklenen metotlar ile kolaylıkla kullanılabiliyor.

<