2012-03-21 15 views
16

Dal momento che il deprecazione di onRetainNonConfigurationInstance ho sfruttato sempre più il framework per le modifiche di configurazione. Dal momento che utilizzo ViewPager per contenere i frammenti principali, non è possibile utilizzare setRetainInstance, che limita le modifiche della mia configurazione all'utilizzo di onSaveInstanceState come farebbe un'attività o una visualizzazione standard.Limite onSaveInstanceState?

Sta funzionando perfettamente senza problemi, ma al momento sto passando un set di dati Serializable abbastanza consistente attraverso di esso che mi fa venir voglia di spingere le comunità in input indipendentemente dal fatto che sia una buona idea.

tl; dr: onSaveInstanceState ha una limitazione di dimensioni su ciò che si passa attraverso di esso?

+0

Penso che non sia così. Probabilmente usa 'SharedPreferences' - Lo immagino. –

+0

"Dato che utilizzo il ViewPager per conservare i miei frammenti principali, non posso usare setRetainInstance". Perché pensi di non poter usare 'setRetainInstance()' con i frammenti in un 'ViewPager'? Non riesco a trovare alcun posto che citi questa limitazione. Hai un link? Grazie! – CommonsWare

+0

Semplicemente non funziona, probabilmente è un bug. Ho provato sia con 'FragmentPagerAdapter' che con' FragmentStatePagerAdapter' e nessuno dei due ha permesso a Fragments di funzionare correttamente con 'setRetainInstance()'. Quando li ho spostati da 'ViewPager' a un normale switch simile a (vedi sotto), tutto ha funzionato correttamente. http://developer.android.com/resources/samples/Support13Demos/src/com/example/android/supportv13/app/ActionBarTabsPager.html – HandlerExploit

risposta

14

Sarebbe utile dire qualcosa di più che "abbastanza consistente". :)

Questi dati passano attraverso un IPC e il limite IPC è di circa 1 MB. Vuoi mantenere la dimensione del tuo marshalling significativamente più piccola di quella; 100K è probabilmente un buon massimo. E davvero vuoi mantenerlo il più piccolo possibile (pensa a quello che hai messo lì e non sprecare spazio), perché questi dati dovranno essere conservati dal sistema nella RAM anche quando il tuo processo viene ucciso.

0

Il limite è il limite di memoria e dal momento che non si verificano errori OutOfMemory, ciò dovrebbe andare bene.

Assicurati solo di non avere alcuna vista o contesto sull'oggetto che passa perché questo può causare un rapido aumento dell'uso della memoria se l'utente cambia costantemente l'orientamento.

+0

Come viene tenuto in memoria se l'applicazione viene riciclata? Questa informazione è persistente anche allora quindi so che non può essere conservata alcuna memoria che dipenderebbe dall'applicazione, quindi ovviamente OutOfMemoryErrors non si verificherebbe sull'applicazione stessa. E ho dichiarato esplicitamente che stavo passando oggetti serializzabili, è impossibile passare una vista o un contesto attraverso questo. Ma se si superasse uno su onRetainNonConfigurationInstance, si perderebbe l'intera attività, quindi sì alla fine esaurirebbe la memoria nelle modifiche di configurazione in quello scenario. – HandlerExploit

Problemi correlati