2013-08-06 19 views
6

Birçok parçayı tutan bir görüntüleyici cihazım var. Etkinlik arka plana gönderildiğinde ve kaynaklar gerektiğinde, işletim sistemi uygulamayı veya en azından bazı parçaları keser. Etkinliğe döndüğümde, bu olay çöküyor çünkü etkinlik, temizlemeden önce tuttuğu tüm parçaların yeni örneklerini eklemeye çalışıyor ve şimdi bazı alanlar boş. Tabii ki bu durum, devlet tasarrufunu ve Paketleri kullanarak geri yüklemeyi düzgün bir şekilde uygulayarak giderilebilirdi, ancak bunu yapmak istemiyorum. Bunun yerine, parçaları geri yüklemeyi önlemek istiyorum. İşletim Sistemine, GC'yi gönderdikten ve parçaları parçalara ayırdıktan sonra, onları yeniden yaratma zahmetine girmemesi için bir yol var mı? Temizlik tamamlandığında, bir kullanıcı simgeyi dokundurarak başlattıysa, aktivitenin geri dönüşte yeniden yaratılmasını istiyorum. Bunu yapma şansın var mı?Android, aktivitenin geri yüklenmesini önler

Burada önerilen çözüm https://stackoverflow.com/a/15683289/552735 çalışmıyor. Bu, istisnalara neden olur java.lang.IllegalStateException: Fragement artık f2 anahtarı için mevcut değil: index 3

+1

Fragmanlarınızı tutan etkinliğin "onStop()" yönteminde "finish()" ifadesini eklemeyi denediniz mi? Hiçbir şeyden vazgeçmeyecek. –

+0

Ev düğmesine bastığımda bile arka planda her gönderiminde faaliyeti öldürür. İstediğim bu değil - sadece işletim sisteminin onları yok etmeden önce var olan tüm parçaları yeniden yaratmasını istemiyorum. ViewPager'ın görebildiğim kadarıyla, kendi geri yükleme mekanizmasına sahip olması, bu sorunlara neden oluyor. – delegate

cevap

8

Bunun gibi bir sorunum vardı. İşte tamir ettim nasıl: Bu yöntem Etkinliği sistem tarafından öldürüldüğü zaman saklanacağını kesinlikle hiçbir UI durum bilgilerini sağlamak olacağını

@Override 
    protected void onSaveInstanceState(Bundle savedInstanceState) 
    { 
     savedInstanceState.clear(); 
    } 

Not - Bu onRestoreInstanceState() aldığında da herhangi Görüntüleme geri değil etkisine sahiptir onStart()'dan sonra aynı Paketle çağrıldı.

+2

Bu, bu semptom tedavisinin bir çözümü değildir. – Roel

+1

Bu, aktivite durumunun geri yüklenmesi hayati veya önemli değilse, çok iyi bir çözümdür. Bu şekilde, tüm aktivite yeniden yaratılır ve her şey iyi çalışır. –

0

Kaydetme/geri yükleme örneği durumu eylemlerini devre dışı bırakamazsınız. Bu mantığı gerçekten uygulamak istemiyorsanız, özellikle formunuz ağır bir şekilde fragmanlarla yüklüyse formu yeniden yüklemeniz gerekir.

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    startActivity(new Intent(this,YOUR_ACTIVITY.class)); 
    finish(); 
} 
+0

Bu kod soruyu yanıtlarken, sorunun nasıl ve/veya neden çözüldüğüne ilişkin ek bağlam sağlayarak yanıtın uzun vadeli değerini artıracaktır. – Badacadabra

İlgili konular