Android’de Performans Problemlerini Keşfetme ve Çözme

Mobil uygulamalarda performans çok önemlidir.

Mobil uygulamalarda performans çok önemlidir fakat uygulama geliştiricileri, uygulamayı güzel bir kullanıcı arayüzü ile süslerken veya uygulamanız için yeni ve heyecan verici özellikleri vermekle meşgul olduğunda çoğu zaman performanslı bir uygulama oluşturmayı atlamaktadır.

Bu makalede, her Android Uygulama Geliştiricisinin, kaçınması gereken genel performans problemlerinden bahsedeceğim. Bu sorunların, kendi projelerinizde meydana gelip gelmediğini Android Sdk tarafından sağlanan araçları kullanarak test etmeyi öğreneceksiniz. Uygulamanızın performansını nasıl daha mükemmel yapabileceğinizi öğrenip, uygulamayı oluşturduğunuzda kullanıcılar uygulamanızı daha çok sevecek ve indirecektir.

1. Overdraw
1. adım: Problem

Uygulamalarınızın kullanıcı arayüzünü hazırlarken, kullanıcıyla ilişkili ve güzel görünen bir görsellik oluşturmak sadece işin yarısıdır. Ayrıca kullanıcı arayüzünün, hızlı ve sorunsuz çalışmasını sağlamak da önemli bir iştir.

Overdraw, kullanıcı arayüzlerinin tepkisiz kalmasının en yaygın nedenlerinden biridir.Bir pixeli yeniden renklendirmek GPU işlemede zaman kaybettirir.

Örneğin, linear için arka plan rengi verdin. Aynı zamanda onu kapsayan bir layout’a da renk verdin.Aynı yeri 2 kez renklendirmiş oldun.Yani renklendirdiğin alanın arkasını da renklendirmiş oldun. Kullanıcı görsel anlamda bu farkı göremez, kullanıcının hiç fark edemeyeceği bir değişikliği arka planda işlenir hale getirmiş oldun.Bu işlem gereksiz olduğu için GPU işlemede zaman kaybettirir.Buda performans kaybına neden olur.

Bu nedenlerden dolayı, uygulamanızı performans sorunları için test yaparken Overdraw olup olmadığını kontrol etmek, ilk yapmanız gereken işlemlerden biridir.

2. adım: Overdraw’ı Tespit Etme

Çok şanşlısınız ki, Android cihazlarda Overdraw’ı tespit etmek için yeni bir uygulama yüklemeniz gerekmemektedir.Çünkü Android cihazınızın kendi ayarlarında Overdraw miktarını tespit etmeyi sağlayan özellik bulunmaktadır.

İlk yapmanız gereken işlem, test etmek istediğiniz uygulamayı Android cihazınıza yüklemektir.Daha sonra cihazda, Ayarlar(Settings) bölümünden Geliştirici Seçeneklerini (Developer Options) seçin.Ekranda aşağıya doğru indiğinizde Çizim(Draw) bölümünde bulunan Düzen sınırlarını göster(Debug GPU Overdraw) göreceksiniz.Bu seçeneği aktif hale getirin.

12

Bu araç arayüzde Overdraw’ın farklı yerlerde kullandığını vurgulamak için renk blokları kullanır.Artık yapmanız gereken tek şey,Overdraw’ı tespit etmek istediğiniz uygulamanızı çalıştırmaktır.Peki bu renklerden nasıl Overdraw’ı tespit edeceğiz?Şöyle ki her rengin bir anlamı bulunmaktadır.Bu anlamları öğrendiğimizde işimiz tam anlamıyla kolaylaşacak.

Arayüzde gördüğünüz renklerin anlamları:
Rengin olmadığı alanlar:Arayüzde Overdraw yok anlamına gelir.Yani bu pikselin bir kez boyalı olduğunu anlarız.

Mavi alanlar: 1x Overdraw bulunmaktadır.Mavi alandaki piksellerin 2 kez boyandığını anlarız.

Yeşil alanlar: 2x Overdraw bulunmaktadır. Yeşil alandaki piksellerin 3 kez boyandığını anlarız.

Pembe alanlar: 3x Overdraw bulunmaktadır. Uygulamanızda bağlı olarak, pembe küçük alanlarda Overdraw genellikle olabilir, ama kırmızı alanı orta boyutta veya büyük alanlar görürseniz o zaman çok fazla Overdraw var anlamına gelir.Bununda sebebini araştırmak gerekir.

Kırmızı alanlar: 4x Overdraw bulunmaktadır. Kırmızı alandaki piksellerin 5 kez veya daha fazla boyandığını anlarız.Kırmızı alan gördüğünüzde kesinlikle bu alanda neden Overdraw olduğunu incelemeniz gerekir.

3. adım: Overdraw’ları Azaltma

Bir önceki adımımızda Overdraw’ları tespit ettik.Bu adım ise Overdraw’ları nasıl en aza indirgeyeceğimizden bahsedeceğim.

Overdraw durumunu fark edince, en kolay yoldan uygulama XML dosyasını açıp çakışan alanları arayın. Kısmi çizilebilen nesneler kullanıcıya gözükmez ve herhangi arka plan bir başka nesnenin üzerine gelir. Ayrıca ebeveyn nesne beyaz olarak boyansa bile arka planı beyaz olarak ayarlanmış alanlara bakmalısınız. Bu gibi şeyler önemli üst üste çizim hatalarına neden olabilir.

Android sistemi otomatik olarak, basit Overdraw durumlarını azaltır, fakat karmaşık görüntü nesnelerinde pek bir anlam ifade etmez çünkü Android içeriğin nasıl çizileceğini bilemez.

Eğer karmaşık ve sonradan üretilen bir görüntü nesnesi kullanacaksanız, çizilen alanın sınırlarını clipRect methoduyla belirlemelisiniz. Daha fazla bilgi için resmi Android dokümanlarını ziyaret etmenizi tavsiye ederim.

2.Bellek Sızıntısı
1.adım: Problem

Android bellek yönetimli bir ortamdır, bu sizde yanlış bir güvenlik hissi yaratmasın, bellek açıkları hala oluşabilir. Çünkü çöp toplayıcı (garbage collector) nesneleri, sadece ulaşılamadığı durumlarda silmektedir. Eğer ulaşılamayan bir nesneye işaret etmiyorsa yani bir şekilde nesne referansı bellekte bulunuyorsa, bu nesne silinmeyecektir.

Bu ulaşılamayan nesneler başıboş durmakta, yığında kirlilik oluşturmakta ve değerli boş alanda yer tutmaktadır. Uygulamanızın boş alanı gitgide küçülecek, ne zaman ki çöp toplayıcı olayları yönetemeyeceği noktaya gelince kadar çalışacaktır.

Bu kötü haberin iki nedeni vardır. Birincisi çöp toplayıcı olayları esnasında uygulamanızda gözle görülür bir performans etkisi olmaz ve bir çok çöp toplayıcı olayı az bir zaman içinde ve ufak bir gecikmeyle çalışmaktadır. İkinci problem ise mobil cihazlar başlangıçta az bir bellekle başlamaya meğillidir ve bir bellek sızıntısı hızlıca OutOfMemory hatasına sebep olup uygulamanızı durdurur.

Bellek sızıntıları tespit etmek zor olabilir. Yalnızca kullanıcılar şikayete başladığında, bellek sızıntısının uygulamanız için bir sorun olduğunu fark edebilirsiniz.Şükürler olsun ki Android Sdk’da  bu anlamda bize fayda sağlayacak kullanışlı bazı araçlar bulunmaktadır.

2. adım: Çözüm

Android uygulamanızda artan bellek kullanımı takip edebilmeniz için büyük bir ölçüde yardımı olan araçlar bulunmaktadır.Grafiksel olarak gösterim için, Android Memory Monitor kullanılmaktadır.Sonuçta sorunu tespit edip incelemeniz gerekir ki, çözüm üretebilesiniz.İşte tamda ben bu konuyla alakalı yani Android uygulamalarda potansiyel bellek sızıntılarını bulabilmek ve önlemek  noktasında yardımcı olabilecek ayrıntılı bir makaleyi daha önce sizlere hazırladım.Dilerseniz, “Android’de Bellek Sızıntısını Önleme”  adlı makalemi okuyarak bu konuda daha ayrıntılı bilgi edinebilirsiniz.

 

Kaynaklar:

1- http://tugbaustundag.com/androidde-bellek-sizintisini-onleme

2- http://code.tutsplus.com/tutorials/detect-and-resolve-performance-problems-on-android–cms-24058

3- http://riggaroo.co.za/fixing-memory-leaks-in-android-outofmemoryerror/?utm_term=0_4eb677ad19-ef86743f54-337838825&utm_content=buffer7b25e&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer

 

Kategori Genel
Etiketler