Android performans optimizasyonu: bellek optimizasyonunu tam olarak gerçekleştirmenizi sağlar (metin şekilde gösterildiği gibi değildir, şekil tabloda gösterildiği gibi değildir)

Önsöz

Android geliştirmede performans optimizasyon stratejileri çok önemlidir

Bu makale esas olarak performans optimizasyonunda bellek optimizasyonunu açıklamaktadır, umarım beğenirsiniz

içindekiler

1. Tanım

Uygulamanın bellek kullanımını ve alan işgalini optimize edin

2. İşlev

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. Bilgi rezervi: Android bellek yönetimi mekanizması

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

  • ActivityManagerService tüm süreçleri puanlar (puan, adj değişkeninde saklanır)
  • Puanı Linux çekirdeğine güncelleyin
  • Gerçek bellek kurtarma işlemi Linux çekirdeği tarafından yapılır
  • 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

    • Android'in nesneler ve değişkenler için bellek stratejisi Java ile aynıdır
    • Bellek yönetimi = nesnelerin / değişkenlerin bellek tahsisi + bellek serbest bırakma

    Aşağıda, bellek ayırma ve bellek bırakma stratejisi ayrıntılı olarak açıklanacaktır.

    a. Bellek ayırma stratejisi

    • Nesnelerin / değişkenlerin bellek tahsisi, program tarafından otomatik olarak halledilir
    • 3 tür vardır: sırasıyla statik değişkenler, yerel değişkenler ve nesne örnekleri için statik ayırma, yığın ayırma ve yığın ayırma
    • Detaylar aşağıdaki gibidir

    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

    • Nesnelerin / değişkenlerin bellek serbest bırakılması, Java çöp toplayıcı (GC) / çerçeve yığını tarafından işlenir
    • Burada temel olarak nesne tahsisinin bellek bırakma stratejisini açıklayın (yani yığın ayırma) = Java çöp toplayıcı (GC)

    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.

    • Java çöp toplayıcı (GC) bellek sürümü = aşağıdakileri içeren çöp toplama algoritması:

    Detaylar aşağıdaki gibidir

    4. Yaygın bellek sorunları ve optimizasyon çözümleri

    Yaygın bellek sorunları aşağıdaki gibidir

  • Bellek sızıntısı
  • Hafıza titremesi
  • Resim Bitmap ile ilgili
  • Kod kalitesi ve miktarı
  • Yanlış günlük kullanım
  • Aşağıda her bir bellek problemini detaylı olarak analiz edip bir optimizasyon planı vereceğim
  • 4.1 Bellek sızıntısı

    • Giriş

    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.

    • Uygulama üzerindeki etkisi

    Uygulamada, yani OOM'da bellek taşmasına neden olmak kolaydır

    Bellek taşması Giriş:

    • 1.png
    • Bellek sızıntılarının temel nedeni

    • Bellek sızıntılarının yaygın nedenleri
  • Koleksiyon sınıfı
  • Static anahtar sözcüğü ile değiştirilen üye değişkenleri
  • Statik olmayan iç sınıf / anonim sınıf
  • Kaynak nesnesi kullanımdan sonra kapatılmaz
    • Optimizasyon

    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

    • Optimizasyon nedeni

    Bu nedenle, aşağıdaki şekilde gösterildiği gibi görüntü Bitmap kaynağını neden optimize edin:

    • Optimizasyon yönü

    Görüntü Bitmap kaynaklarının kullanımını ve bellek yönetimini temel olarak aşağıdaki yönlerden optimize edin

    • Spesifik optimizasyon planı

    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

    • Giriş

    • Optimizasyon

    Ç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ı

    • Optimizasyon nedeni

    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.

    • Optimizasyon

    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

    • Optimizasyon nedeni

    Bazı yaygın kullanımlar, aşağıda ayrıntılı olarak anlatacağım çok sayıda bellek sorununa da neden olabilir.

    • Optimizasyon

    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

    • İpucu 1: Mevcut kullanılabilir bellek boyutunu alın

    Geçerli uygulamanın kullanılabilir bellek boyutunu (birim = megabayt) almak için ActivityManager.getMemoryClass () yöntemini çağırın

    • İpucu 2: Mevcut bellek kullanımını öğrenin

    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

    • İpucu 3: Görünüm gizlendiğinde, hafızayı serbest bırakın

    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.

    5. Bellek optimizasyonuna yardımcı olacak analiz araçları

    • Hafızanın nedenini tam olarak anlasanız bile, bulunması zor hafıza problemlerinin olması kaçınılmazdır.
    • Aşağıda, bellek optimizasyon analizine yardımcı olmak için birkaç temel araç kısaca tanıtılacaktır.
  • MAT (Bellek Analiz Araçları)
  • Yığın Görüntüleyici
  • Tahsis İzleyici
  • Android Studio'nun Bellek Monitörü
  • LeakCanary
  • 6. Özet

    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

    Jackie Chan, Huang Zitao'nun film yapma becerisine övgüde bulundu. Hiç "Gerçek Adam" ı gördünüz mü?
    önceki
    Mavericks "100 Milyon Kilometre Hatıra Sürümü" N1S sınırlı miktarlarda satılır, ilk tat aynı anda çevrimiçi ve çevrimdışı olarak satılır
    Sonraki
    Model oyun kontrolü: THE51 büyük büyüsünün ayrıntılarını artırın
    "Avengers 4" ün anakara çıkış zamanı, Kuzey Amerika'dan eşi görülmemiş bir şekilde iki gün ileride.
    LeTV Luosheng'in gelmesi kolaydır, yeniden doğabilir mi?
    Model Oyun Kontrolü: Dağ Ormanı Versiyonu NZ-666 Büyük Yeşil Biber
    "Game of Thrones" u ezmek için yeni dizide Nolan'ın kardeşi gökyüzüne karşı mı? Yeterince beynimi yakmıyorum
    "Bugünün Film Eleştirmeni", "İyi Öğretmen" Yu Qian'ı filmin arkasındaki küçük parçalar ve parçalar hakkında konuşmaya davet ediyor
    Model oyun kontrolü: RGM-79S keskin nişancı tüfeği Spartan Jim
    Kola içtikten sonra şişeyi yemeyi unutmayın
    60.000 yuan'da Sony, büyük bir siyah ses teknolojisi dalgası yayınladı
    Nihayet bu Douban 9 puanlık Japon dizisi yeni olana kadar bekledik ve yayınlandıktan hemen sonra 9 sayı oldu, bazıları ağladığımı söyledi.
    Bu yıl "The King of Reversal", son şaheseri "The Mirage" ile Çin anakarasına indi.
    Model oyun kontrolü: Zakutou kapsülünün yeni oyunu, küçük biyokimyasal sahne
    To Top