SORU
24 EYLÜL 2011, CUMARTESİ


Android hafıza sorunları dışında uygulama - her şeyi denedim ve hala kayıp

Tam 4 gün her şey geliştiriyorum bir uygulama bellek sızıntısı anlamaya miyim harcadım, ama her şey uzun zaman önce anlamını yitirdi.

Geliştiriyorum uygulaması sosyal doğa, sanırım profil Faaliyetleri (P) ve liste Faaliyetler çok veri ile - örneğin rozetler (B). Hop diğer listeler, vb diğer profiller için rozet listesi için profil.

Düşün, böyle bir akımı P1 ->B1 ->P2 ->B2 ->P3 ->B3, vb. Tutarlılık için, her P sayfa aynıdır yani aynı kullanıcı profilleri ve rozetleri yükleniyor, ben de her B Sayfa.

Genel özü sorunudur: sonra gezinmek için biraz bağlı olarak boyutunu her sayfa, bir bellek yetersiz özel durum rastgele yerler - bit eşlem, Dizeleri, vb - değil gibi görünüyor tutarlı.

Her şey hayal belleği çalışan ben neden anlamaya yaptıktan sonra, hiçbir şey ile geldi. Anlamadığım şey Android yükleme sırasında yetersiz bellek çalışır ve yerine çöker P1, B1, vb öldürmek değil. Bu önceki faaliyetleri ölmesini bekler ve eğer ben hiç onCreate üzerinden onlara Geri dirilmiş olurdu() ve onRestoreİnstanceState().

Eğer yaparsam bile bırak bu - P1 ->B1 ->Geri ->B1 ->Geri ->B1, hala bir kaza. Bu bir bellek sızıntısı bir tür olduğunu gösterir, ancak buna rağmen, hprof damping ve MAT ve JProfiler kullandıktan sonra, onu bulamamak.

Resimler yükleniyor (ve test verileri için makyaj ve testin adil olması için yüklü arttı) engelli ve resim önbelleği SoftReferences kullanır emin oldum. Android aslında var birkaç SoftReferences ücretsiz çalışır, ama önce bellek çöküyor.

Rozet sayfa al veri web, yük bir dizi EntityData bir BaseAdapter ve yem için bir liste Görünümü (ben aslında kullanarak CommonsWare excellent MergeAdapter ama bu Rozet etkinliği, orada gerçekten sadece 1 adaptör zaten, ama istediğim söz bu aslında her iki şekilde).

Kodu inceledim ve kaçak bir şey bulmak mümkün değildi. Ve bulabildiğim her şeyi temizledim ve Sistemi yazılımıdır.() gc sol ve sağ ama hala app çöküyor.

Ben hala yığında etkin olmayan faaliyetler hasat alamadım neden anlamıyorum, ve gerçekten anlamak isterdim.

Bu noktada, herhangi bir ipucu, tavsiye, çözüm... yardımcı olabilecek bir şeyler arıyorum.

Teşekkür ederim.

CEVAP
27 EYLÜL 2011, Salı


Ben hala neden etkin olmayan bir yığın üzerinde olduğunu anlamıyor musun hasat alamadım, ve gerçekten anlamak isterdim.

Bu işler böyle yürümez. Aktivite yaşam döngüsünü etkileyen sadece bellek yönetimiglobaltüm süreçler, Android gibi arasında bellek belleği yetersiz olduğuna karar verir ve arka plan işlemleri geri almak için öldürmek gerekir.

Eğer uygulamadır oturan ön plana itibaren daha fazla ve daha fazla faaliyetleri, asla gitmem arka plan, bu yüzden her zaman onun vurmak yerel işlem bellek sınırı önce sistemi gelirse kapatmak için öldürme işlemi. (Ve süreci öldürmek ne zaman, süreci hosting öldürürtümfaaliyetlerine, şu an ön planda ne olursa olsun dahil.)

Çok fazla faaliyetleri aynı anda çalışmasına izin veriyorsun, ve/veya bu faaliyetleri her çok fazla kaynak tutan. temel sorun, bana öyle geliyor ki:

Sadece potansiyel olarak ağır rasgele sayıda istifleme güvenmeyin navigasyon faaliyetleri yeniden tasarlamak gerekiyor. Sen istersen başka bir ciddi miktarda malzeme onStop() (gibi arama setContentView() temizlemek faaliyet görünüm hiyerarşisi ve net bir değişken her türlü şey olabilir tutarak), sadece gidiş için bellek yetersiz.

Yeni Parça APİs daha sıkı belleği yöneten tek bir aktivite ile faaliyetlerinin bu keyfi yığını yerine kullanmayı düşünebilirsiniz. Örneğin, eğer kullandığınız yığın geri imkanı parçaları, ne zaman bir parça almaya gidiyor geri yığını ve artık görünür, onun onDestroyView() yöntemi çağrılır tamamen kaldırmak görünümü hiyerarşi, büyük ölçüde azaltarak, onun ayak izi.

Şimdi, bildiğim kadarıyla sen çökmesini akış tuşuna, geri gitmek için bir aktivite, geri tuşuna basın, başka bir aktivite, vb ve asla derin yığını, evet sadece bir sızıntı olduğunu. Sızıntı hata ayıklama açıklamaktadır bu blog yazısı: http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • How It Should Have Ended

    How It Shoul

    5 Mart 2007
  • L- Crysis

    L- Crysis

    30 Aralık 2011
  • Samantha Crain

    Samantha Cra

    30 EKİM 2008