Merhaba Android'in belleği nasıl yönettiğini merak ediyorum ve hiçbir yerde kesin bir cevap bulamıyorum. Mevcut aktivite yığınında 5 aktiviteye sahip bir uygulamam olduğunu varsayalım (4'ü durduruldu ve 1'i devam ettirildi), bağlı servis yok. Tüm aktivitelerimin durması için HOME düğmesine basıyorum. Başka bir bellek tüketen uygulamayı başlatıyorum ve genel cihaz belleği azalmaya başlıyor. Ve soru şu ki
... Başvuruma ne olacak?
- Sistem hafızayı kurtarmak için etkinliklerimden yalnızca birini veya bazılarını yok edebilir mi?
- Sistem başvurumun tüm sürecini öldürecek mi? Tüm faaliyetler güzelce yok edilecek mi?
- Tamamen öldürüldüğünde başvuruma geri döndüğümde ne olacak? Başlangıçtan başlayacak mı (ilk başlangıç gibi) veya etkinlikleri önceki duruma getirmeye çalışacak mı / eğer evet ise - yığının sadece en üstünde mi yoksa hepsi mi?
GÜNCELLEME:
Bu soruyu sormadan önce Aktivite yaşam döngüsünü birkaç kez gördüm ancak sorularıma cevap vermiyor. Bazı testler yaptım ve bazı cevaplarım var. DDMS'deki "durdurma süreci" test için bir ipucuydu.
1. soru için cevabı test etmedim, ancak rehberin dediği gibi:
Bir etkinlik duraklatılırsa veya durdurulursa, sistem etkinliği bitirmesini isteyerek veya yalnızca işlemini sonlandırarak bellekten çıkarabilir.
Görünüşe göre bir veya daha fazla faaliyet, süreci sonlandırmadan nazikçe (onDestroy yöntemi ile) yok edilebilir. Onlara geri döndüğünüzde (onCreate + bundle) alacaksınız.
Soru 2 cevabı:
EVET. Genel olarak sistem, tüm süreci sonlandırır, bu, etkinlikler ve statik alanlar dahil tüm verilerin yok edildiği anlamına gelir. Bu iyi bir şekilde YAPILMAZ - duraklatılan / durdurulan etkinliklerinizden herhangi biri için onDestroy veya finialize () yapamazsınız. Bu nedenle, saveInstanceState () onPause yönteminden hemen önce çağrılır. onPause, temelde bir şeyi kaydetmeniz gereken son yöntemdir çünkü bu yöntemden sonra onStop veya onDestroy'u asla göremezsiniz. Sistem, tuttukları ve yaptıkları her ne olursa olsun tüm nesnelerinizi yok ederek süreci öldürebilir.
Soru 3 cevabı:
Öldürülen bir başvuruya döndüğünüzde ne olacak?
- Android 2.2'den önce - uygulama, başlatıcı etkinliğiyle birlikte başlayacaktır.
- 2.2'den başlayarak - sistem önceki uygulama durumunu geri yükleyecektir. Bu ne demek? Bu, son görünür etkinliğin yeniden oluşturulacağı anlamına gelir (onCreate + bundle). Etkinlik yığınına ne olacak? Yığın iyi ama üzerindeki tüm aktiviteler öldü. Geri düğmesiyle geri döndüğünüzde her biri yeniden oluşturulacak (onCreate + bundle). Bununla ilgili bir şey daha var:
Normalde, kullanıcı bu görevi ana ekrandan yeniden seçtiğinde, sistem belirli durumlarda bir görevi temizler (kök etkinliğin üzerindeki yığındaki tüm etkinlikleri kaldırır). Bu genellikle, kullanıcı görevi 30 dakika gibi belirli bir süre boyunca ziyaret etmediyse yapılır.
Sonuç?
- Aktivite rotasyonu sorunlarını çözmenin android: configChanges = "orientation" ile çözülebileceğini düşünmeyin. Bunu yaptığınızda, farkında bile olmadığınız birçok sorunla karşılaşırsınız.
- Uygulamanızı DDMS ile test edin - İşlemi durdur düğmesi. Bunu gör
- Statik değişkenleri kullanırken dikkatli olun. Bunları aktivite 1'de başlattığınızda - onları aktivite 2'de başlatacağınızı düşünmeyin. Global statiği başlatmak için tek güvenli yer Uygulama sınıfı olacaktır.
- OnStop veya onDestroy'u asla göremeyeceğinizi unutmayın. Dosyaları / veritabanlarını kapatın, indiricileri durdurun onPause. Uygulamanın BG'de bir şey yapmasını istediğinizde - Ön Plan Hizmetini kullanın.
Öyle olurdu ... Umarım eseyime yardım etmişimdir :)