Android geliştirmede performans optimizasyon stratejileri çok önemlidir
Bu makale esas olarak performans optimizasyonunda bellek optimizasyonunu açıklamaktadır, umarım beğenirsiniz
Uygulamanın bellek kullanımını ve alan işgalini optimize edin
Bellek sızıntılarını (ML), bellek taşmasını (OOM) ve hatalı bellek kullanımı ve yönetim eksikliğinden kaynaklanan aşırı bellek alanından kaçının, bu da sonuçta uygulama çökmelerine (Crash) neden olur
3.1 Giriş
Aşağıda, işlemlerin, nesnelerin ve değişkenlerin bellek tahsisini ve geri dönüşümünü ayrıntılı olarak açıklayacağız.
3.2 İşlemler için bellek stratejisi
a. Bellek ayırma stratejisi
ActivityManagerService ile tüm süreçlerin bellek tahsisini merkezi olarak yönetin
b. Bellek geri dönüşüm stratejisi
Adım 1: Uygulama Çerçevesi, geri dönüşüm sürecinin türünü belirler
Android'deki süreç yönetilir; süreç alanı dar olduğunda, süreç önceliği düşük olacaktır. > > Yüksek dereceli otomatik geri dönüşüm süreci
Android, süreci aşağıdaki gibi 5 öncelik seviyesine ayırır:
Adım 2: Linux çekirdeği aslında belirli süreçleri geri alıyor
Burada sadece süreç özetlenmiştir. Süreç karmaşıktır İlgilenen okuyucular ActivityManagerService.java sistem kaynak kodunu inceleyebilirler.
3.3 Nesneler ve değişkenler için bellek stratejisi
Aşağıda, bellek ayırma ve bellek bırakma stratejisi ayrıntılı olarak açıklanacaktır.
a. Bellek ayırma stratejisi
Not: Bellek ayırmayı açıklamak için 1 örnek kullanın
public class Sample { // s1, mSample1 ve bu sınıfın örnek nesnesini gösteren üye değişkenleri yığın belleğinde depolanır int s1 = 0; Örnek mSample1 = new Sample (); // Yöntemdeki yerel değişkenler s2 ve mSample2 yığın belleğinde saklanır // mSample2 değişkeni tarafından işaret edilen nesne örneği, yığın belleğinde saklanır genel void yöntemi () { int s2 = 0; Örnek mSample2 = new Sample (); } } // mSample3 değişkeninin referansı yığın belleğinde saklanır // mSample3 değişkeni tarafından işaret edilen nesne örneği, yığın belleğinde saklanır // Bu örneğin üye değişkenleri s1 ve mSample1 de yığın belleğinde saklanır Örnek mSample3 = new Sample ();b. Bellek serbest bırakma stratejisi
Statik ayırmanın serbest bırakılması gerekmediğinden ve yığın ayırma yalnızca otomatik olarak çıktı ve çerçeve yığını aracılığıyla yığın üzerinde olduğundan, nispeten basittir, bu nedenle ayrıntılı olarak açıklanmamıştır.
Detaylar aşağıdaki gibidir
Yaygın bellek sorunları aşağıdaki gibidir
4.1 Bellek sızıntısı
Yani ML (Hafıza Sızıntısı), program hafızaya başvurduktan sonra, hafızaya artık ihtiyaç kalmadığında serbest bırakılamaz ve programa geri döndürülemez olgusunu ifade eder.
Uygulamada, yani OOM'da bellek taşmasına neden olmak kolaydır
Bellek taşması Giriş:
Ayrıntılar için lütfen şu makaleye bakın: Android Performans Optimizasyonu: Bellek sızıntıları hakkındaki tüm bilgiler burada!
4.2 Görüntü kaynağı Bitmap ile ilgili
Bu nedenle, aşağıdaki şekilde gösterildiği gibi görüntü Bitmap kaynağını neden optimize edin:
Görüntü Bitmap kaynaklarının kullanımını ve bellek yönetimini temel olarak aşağıdaki yönlerden optimize edin
Aşağıda, her optimizasyon yönü için özel optimizasyon planını ayrıntılı olarak açıklayacağım
Daha spesifik bir giriş için lütfen şu makaleye bakın: Android Performans Optimizasyonu: Bitmap görüntü kaynaklarının kullanımını nasıl optimize edeceğinizi öğretin
4.3 Bellek titremesi
Çok sayıda geçici küçük nesnenin sık sık oluşturulmasından kaçınmaya çalışın
4.4 Kod kalitesi ve miktarı
Kodun kendisinin kalitesi (veri yapısı, veri türü vb.) Ve miktarı (kod miktarı), büyük bellek kullanımı, düşük bellek kullanımı vb. Gibi birçok bellek sorununa neden olabilir.
Temel olarak toplam kod miktarı, veri yapısı, veri türü ve veri nesnesi referanslarından aşağıdaki gibi optimize edilmiştir
4.5 Genel kullanım
Bazı yaygın kullanımlar, aşağıda ayrıntılı olarak anlatacağım çok sayıda bellek sorununa da neden olabilir.
Ayrıca nihai bir bellek optimizasyon çözümü var: Dalvik sanal makinenin yığın bellek boyutunu artırın
Yani, sanal makineye uygulamanın daha fazla yığın belleğe ihtiyacı olduğunu bildirmek için AndroidManifest.xml'nin uygulama etiketine bir android: largeHeap niteliği (değer = true) ekleyin, ancak bu uygulama önerilmez ve önerilmemektedir.
4.6 Ekstra ipuçları
Burada size söylemeyi umduğum bazı bellek optimizasyonu ipuçları var
Geçerli uygulamanın kullanılabilir bellek boyutunu (birim = megabayt) almak için ActivityManager.getMemoryClass () yöntemini çağırın
Uygulama yaşam döngüsünün herhangi bir aşamasında, uygulamanın mevcut bellek kullanımını (bellek düzeyi ile tanımlanır) elde etmek için onTrimMemory () öğesini çağırın ve belleği bu yöntemle döndürülen bellek gerginlik düzeyi parametresine göre serbest bırakın.
Android 4.0'dan sonra sağlanan bir API
Kullanıcı farklı bir uygulamaya geçtiğinde ve görünüm artık görüntülenmediğinde, uygulama görünümünün kapladığı kaynaklar serbest bırakılmalıdır.
1. Not: İşgal edilen kaynakların şu anda serbest bırakılması, sistemin önbellek işleme kapasitesini önemli ölçüde artırabilir
2. Spesifik işlem: Mevcut Activity sınıfının onTrimMemory () uygulamasını uyguladıktan sonra, kullanıcı görünümden ayrılırken bilgilendirilecektir; döndürülen parametre = TRIM_MEMORY_UI_HIDDEN, görünümün gizlendiği anlamına gelirse, görünüm tarafından kullanılan kaynaklar serbest bırakılabilir.
Bu makale temel olarak bellek optimizasyonuyla ilgili bilgileri aşağıdaki şekilde özetlemektedir:
[Ekli] İlgili çerçeve ve bilgiler
Bilgi koleksiyonu
İzle + özel mesajı ücretsiz "Android verileri" yanıtlayın!
Önceki Android gelişmiş mimari materyallerine, kaynak koduna, notlarına ve videolarına erişim sağlayın. Gelişmiş kullanıcı arayüzü, performans optimizasyonu, mimarlık kursu, NDK, hibrit geliştirme (ReactNative + Weex) WeChat uygulaması, Flutter çok yönlü Android gelişmiş uygulama teknolojisi