2012-03-21 17 views
16

onRetainNonConfigurationInstance'un kullanımdan kaldırılmasından beri Yapılandırma değişiklikleri için çerçeveyi daha fazla kullanıyorum. ViewPager'ı ana Fragmanlarımı tutmak için kullandığımdan beri, Yapılandırma değişikliklerini standart Aktivite veya Görünüm gibi onSaveInstanceState kullanacak şekilde sınırlandıran setRetainInstance kullanamıyorum.onSaveInstanceState limit?

Sorunsuz bir şekilde sorunsuz çalışıyor ancak şu anda oldukça iyi bir Serializable veri kümesinden geçiyorum, bu da bana toplulukların iyi bir fikir olup olmadığına karar vermek istiyor.

tl; dr: onSaveInstanceState, üzerinde geçirdiğiniz şeylere boyut sınırlaması var mı?

+0

Sanırım öyle değil. Muhtemelen 'SharedPreferences' kullanır - sanırım. –

+0

"ViewPager'ı ana fragmanlarımı tutmak için kullandığım için setRetainInstance kullanamıyorum" - Neden "ViewPager" içindeki parçalarla setRetainInstance() 'yi kullanamazsınız? Bu sınırlamayı gösteren herhangi bir yer bulamıyorum. Linkin var mı? Teşekkürler! – CommonsWare

+0

Sadece işe yaramıyor, muhtemelen bir böcek. Ben hem FragmentPagerAdapter hem de FragmentStatePagerAdapter ile denedim ve ne Fragments 'setRetainInstance() 'ile doğru şekilde sonuçlandı. Onları "ViewPager" dan (aşağıya bakın) benzer bir standart anahtarlığa taşıdığımda her şey doğru çalıştı. http://developer.android.com/resources/samples/Support13Demos/src/com/example/android/supportv13/app/ActionBarTabsPager.html – HandlerExploit

cevap

14

"Oldukça büyükçe" bir şeyden daha fazlasını söylemek yardımcı olabilir.

Bu veri bir IPC'den geçer ve IPC sınırı yaklaşık 1 MB'dir. Sıralanan boyutunuzu bundan daha önemli tutmak istiyorsanız; 100K muhtemelen iyi bir maksimumdur. Ve gerçekten bunu mümkün olduğu kadar küçük tutmak isteyebilirsiniz (orada ne koyduğunuzu düşünün ve boşa harcamayın), çünkü kendi verileriniz öldürülse bile bu veriler RAM tarafından sistemde tutulmalıdır.

0

Sınır bellek sınırını ve OutOfMemory hatalarını almadığınız için, bu iyi olmalıdır.

Geçiş nesnesinde herhangi bir Görünüm veya Bağlam olmadığından emin olun, çünkü kullanıcı yönünü sürekli değiştirdiğinde bellek kullanımı hızla büyür.

+0

Uygulama geri dönüştürülürse bellekte nasıl tutulur? Bu bilgi o zaman bile ısrar ediyor, dolayısıyla uygulamanın bağımlı olacağı herhangi bir belleğin tutulamayacağını biliyorum, bu nedenle OutOfMemoryErrors uygulamanın kendisinde oluşmayacaktı. Ve Serializable nesnelerini geçtiğimi açıkça belirttim, bunun bir Görünümü veya İçeriği iletmek imkansız. Ancak, onRetainNonConfigurationInstance üzerinden bir tane geçirdiyseniz, tüm aktiviteyi sızdıracağından, bu senaryodaki konfigürasyon değişikliklerinin sonunda hafızanın bitmesine neden olur. – HandlerExploit