6

Dal developer guide on Loaders,Quando un'attività viene distrutta a causa di una modifica della configurazione, anche i suoi caricatori vengono distrutti?

riconnessione automaticamente cursore dell'ultimo caricatore quando ricreata dopo una modifica della configurazione. Pertanto, non è necessario che richieda nuovamente i propri dati.

Da questo blog post on Loaders,

quando un'attività è distrutto, l'attività incarica il suo LoaderManager per distruggere e chiudere i caricatori (così come qualsiasi risorse ad essi associati, come ad esempio un cursore).

La domanda è qual è quella corretta? Quando un'attività viene distrutta a causa di una modifica della configurazione, cosa succede a (1) i suoi Caricatori (2) le risorse associate ai suoi Caricatori, come ad esempio Cursor.

+2

Le modifiche alla configurazione vengono gestite in modo leggermente diverso rispetto alla distruzione in background o nello stack. Ad esempio, le istanze di frammento possono essere mantenute attraverso le modifiche alla configurazione ma non con altri tipi di distruzione. Questa discrepanza potrebbe essere qualcosa del genere, ma non conosco i dettagli, motivo per cui questo è un commento al posto di una risposta. –

+0

@KevinKrumwiede vorrei comunque server come risposta. ma per aggiungere a ciò, le attività che non contengono risorse o attività nude vengono uccise istantaneamente voglio dire che i loro onDestroy() sono chiamati abbastanza veloci ma un'attività molto più caricata richiede tempo per chiamare onDestroy(), credo che si traduca quando ucciderlo completamente .. – Elltz

risposta

0

Come accennato in this blog post about loaders, si chiede in particolare che:

La parte migliore di Pale gommate è che sopravvivono modifiche di configurazione.

Noterete che un'attività è non distrutto su modifiche di configurazione - come si vede nella this picture: Activity lifecycle

onDestroy() viene chiamato solo quando l'attività sta finendo o viene distrutta dal sistema (cioè, your process dies).

+0

Che dire di 'Activity.onDestroy()'? Chiama le callback di Loader? Per quanto ho provato, se premo il pulsante indietro, viene chiamato 'Loader.onReset', ma se faccio scorrere un'app da fuori non viene chiamata. In questo caso viene chiamato solo 'Activity.onDestroy()'. Come dovrei gestirlo? Dovrei chiamare manualmente 'reset' sul mio loader in' Activity.onDestroy() '? –

+0

@ MichałZ.- FragmentController.doLoaderDestroy() 'di FragmentActivity' onDestroy() 'richiama' FragmentHostCallback.doLoaderDestroy() 'in' LoaderManager.doDestroy() 'in' LoaderInfo.destroy() 'in' Loader. reset() 'quindi non sono sicuro del motivo per cui non è il tuo caso. Hai un progetto di esempio che puoi allegare a un bug su [b.android.com] (http://b.android.com)? – ianhanniballake

+0

grazie per la tua risposta. Lo testerò un po 'di più e poi alla fine presenterò un problema. O forse si tratta di ordinare - forse viene chiamato dopo 'onDestroy' quindi non riesco a vedere i log. Qualche idea su come eseguirne il debug? –