Bit eşlemler genellikle bir uygulamadaki en fazla bellek tüketen nesnelerdir. Kod çözme ve ölçeklendirme işlemleri, kare oluşturma için genellikle kritik yoldadır. Bit eşlem bellek kullanımını optimize etmek, duraklamaları, ANR'leri ve OOM ile ilgili işlem sonlandırmalarını azaltarak kullanıcı arayüzü yanıt verme hızında, pil ömründe ve genel kararlılıkta önemli iyileştirmeler sağlar.
Yüksek bit eşlem bellek kullanımını belirleme
Android vitals, Android cihazlardan gelen verileri toplayarak bir uygulamanın bit eşlem bellekte kapladığı yerle ilgili metrikler sağlar. Bu metrikler varsayılan olarak günlük verilerin 28 günlük özeti şeklinde hesaplanır. Bu veriler, farklı cihaz türleri ve sürümlerinde bellek verimliliğindeki eğilimleri ve olası gerilemeleri belirlemeye yardımcı olur.
Android vitals, uygulamanızın bit eşlem bellek kullanımını aşağıdaki işlem durumlarına göre ayrıntılı olarak paylaşır:
- Ön plan: Uygulamanın işlemi görünür durumdadır. P99'un ön planda diğer işlem durumlarına kıyasla önemli ölçüde daha yüksek olması beklenir.Ancak geliştiriciler, P99/P50 oranı önemliyse (ör. 3,5 katından yüksekse) bunu araştırmalıdır.Çünkü bu durum genellikle bir bit eşlem bellek sızıntısına işaret eder. Bunu, tipik kullanım (P50) ile aykırı kullanım (P99) arasındaki farklılığa bakarak belirleyebilirsiniz. Genel öğe şişmesi, belleği tüm yüzdelik dilimlerde eşit şekilde şişirirken bellek sızıntıları zaman içinde artarak kuyruk ucundaki verileri (P99) büyük ölçüde çarpıtır. Uygulama diğer durumlara geçtikten sonra ön plandaki bit eşlem ayırmalarının gereksiz yere devam etmediğinden emin olun.
- Kullanıcı tarafından algılanan hizmetler: Uygulamanın işlemi algılanabilir durumda çalışıyor. Bu kapsamda ön plan hizmetleri, hızlandırılmış işler ve kullanıcı tarafından başlatılan veri aktarımı işleri yer alır. Uygulamalar, bu durumlara geçiş yaparken yoğun ön plan bit eşlem ayırmalarını korumamalıdır. Bu hizmetler uzun süren görevler için tasarlandığından büyük öğelerin tutulması genel kullanıcı deneyimini kötüleştirir ve Düşük Bellek Sonlandırıcı Arka Plan Programının (LMKD) daha düşük öncelikli işlemleri sonlandırarak belleği geri kazanmasına neden olur.
- Arka plan: Uygulama, arka plan hizmeti çalıştırıyor veya kısa süre önce arka plana alındı ancak henüz önbelleğe alınmadı. Bu işlem durumu, ön plandaki veya algılanabilir işlemlerden daha az önemli olduğundan uygulamalar, bellek baskısını azaltmak için büyük bit eşlem öğelerini burada açıkça serbest bırakmalıdır.
- Önbelleğe alınmış: Uygulama, önbelleğe alınmış durumdadır. Bu durum, LMK'ler gibi sistem belleği baskısına karşı oldukça hassastır. Uygulamalar, işletim sistemi tarafından kaldırılmamak için bu durumda bit eşlem bellek kullanımını proaktif olarak azaltmalıdır.
Yüksek bit eşlem bellek kullanımına katkıda bulunanlar
Hiç kullanılmamış sanal bellek de hesaplamaya dahil edilebilir. Beklenmedik şekilde yüksek bit eşlem bellek kullanımı görüyorsanız kullanılmayan bellek ayırmadığınızı doğrulayın.
Kaynaklar
Android Studio'da bit eşlemleri analiz etme
Bit eşlemler için Android Studio profil oluşturma
Bellek ayırmalarını gerçek zamanlı olarak incelemek, yığın dökümlerini yakalamak ve nesneleri bellek sızıntıları açısından analiz etmek için Memory Profiler'ı kullanın. Ayrıca bellek sızıntılarını tespit etmek, yinelenen bit eşlem ayırmalarını belirlemek ve nesne tutmayı görselleştirmek için yığın analiz aracını kullanın.
LeakCanary ile otomatik bellek sızıntısı tespiti
Uygulamanızdaki bellek sızıntılarının algılanmasını otomatikleştirmek için LeakCanary kitaplığını entegre edin. LeakCanary, otomatik yığın analizi sağlar. Bu analizde, çöp toplama işlemi yapılması gerekirken bellekte tutulmaya devam eden nesneler (ör. yok edilen bileşenler tarafından tutulan bit eşlemler) tanımlanır.
Bit Eşlem Performans Belgeleri
Bu kaynaklar, farklı Android bileşenlerinde verimli bitmap işleme için en iyi uygulamalar konusunda kapsamlı rehberlik sağlar.
Bit eşlem bellek kullanımını optimize etmeye yönelik geliştirici yapılacaklar listesi
Bit eşlem bellek verimliliğini optimize etmek için üç temel ilkeyi uygulayın: azaltma, yeniden kullanma ve geri dönüştürme.
- Azaltma: Bit eşlemler yüklenirken veya görüntülenirken ilk bellek kullanımını en aza indirin.
- Yeniden kullanma: Gereksiz bit eşlem ayırmalarını önlemek için önbelleğe alma mekanizmalarını uygulayın.
- Geri dönüştürme: Kaynakları proaktif olarak serbest bırakarak etkin işlemler için belleğin yeniden ayrılmasına izin verin.
Aşağıdaki geliştirici yapılacaklar listesi, bit eşlem bellek kullanımını optimize etmenize yardımcı olabilir.
| Temel İlke | Alan | Açıklama |
|---|---|---|
| Azaltma | Yinelenen Bit Eşlemleri Kaldırma | Gereksiz bit eşlem ayırmalarını tespit etmek için Memory Profiler'ı kullanarak yığın dökümlerini analiz edin. Bit eşlem belleğini yönetme kılavuzuna bakın. |
| Resim yükleme kitaplıklarından yararlanma | İş parçacığı oluşturma, önbelleğe alma ve verimli kod çözme işlemlerini otomatikleştirmek için Glide ve Coil gibi kitaplıkları kullanın. | |
| Alt örneklemeyi uygulama | Tam çözünürlüklü öğeleri yüklemek yerine hedef kullanıcı arayüzü kapsayıcı boyutlarıyla eşleşecek şekilde görüntülerin kodunu çözün. | |
| Opak görüntüler için RGB_565 kullanın | Saydamlığı olmayan resimler için ARGB_8888 yerine 16 bit yapılandırmaya geçerek bellekte kaplanan yeri% 50 azaltın. |
|
| Prioritize VectorDrawables | Simgeler ve temel grafikler için vektörler kullanarak minimum bellek ek yüküyle keskin ölçeklendirme sağlayın. | |
| Sunucu tarafı resim yayınını optimize etme | Arka uç API'lerini, cihaz yoğunluğuna göre uyarlanmış resimler ve kullanıcı arayüzü kapsayıcı boyutları sunacak şekilde yapılandırın. | |
| Şeffaf kenar boşluklarını ortadan kaldırma | Yerleşik kenar boşlukları yerine InsetDrawable veya düzen dolgusu kullanarak "görünmez" pikseller için bellek ayırmaktan kaçının. Bellek açısından verimli Android uygulamaları geliştirme başlıklı makaleyi inceleyin. | |
| Yeniden kullanma | Optimum önbellek boyutlarını yapılandırma | Bellek ve disk önbelleği sınırlarını cihazın RAM'ine ve ekran çözünürlüğüne göre ayarlayın. Bit eşlemleri önbelleğe alma başlıklı makaleyi inceleyin. |
| Geri dönüştürme | Kaynakları Arka Planda Temizleme | Sistem belleği baskısı sırasında önbellekleri temizlemek ve süreçlerin devamlılığını iyileştirmek için TRIM_MEMORY_BACKGROUND'ı uygulayın. |
| Kullanıcı arayüzü gizliyken yayın öncesi içerikleri yayınlama | Uygulama artık kullanıcı tarafından görünmüyorsa TRIM_MEMORY_UI_HIDDEN kullanarak bit eşlem önbelleklerini serbest bırakın. |
|
| Bellek Sızıntılarını İzleme | LifecycleOwner'ı yok edildikten sonra tutulan bit eşlemleri bulmak için LeakCanary ve Memory Profiler'ı kullanın. Uygulamanızın belleğini yönetme başlıklı makaleyi inceleyin. |