Решил уйти от Loader и в будущем от фрагментов в Android и в процессе переосмысления появился вопрос как AsyncTaskLoader кэширует данные? После изменения конфигурации мы инициализируем Loader (initLoader) и если он уже существует и у него до этого были возвращены некоторые данные через deliverResult, то он возвращает их заново.
Покопавшись в исходниках фрагментов и лоадеров я понял что при изменении конфигурации LoaderManager сохраняет все существующие лоадеры, а потом восстанавливает их обратно. То есть Activity контролирует жизненный цикл всех Fragment через FragmentManager, который в свою очередь контролирует жизненный цикл Loader через LoaderManager.
В итоге я хочу спросить знающих. Правильно ли я понимаю что на уровне ОС создается инстанс Activity, который при изменении конфигурации не уничтожается, а отвязывается от контекста, а после привязывается к новому контексту и следовательно все поля и объекты внутри Activity остаются вплоть до вызова onDestroy? И если я не прав, то как Activity хранит LoaderManager при изменении конфигурации? Навряд ли через статические переменные. Могу ли я привязаться к жизненному циклу Activity, чтобы там хранить кэшированные данные сессии своего лоадера, которые я буду уничтожать в соответствии с жизненным циклом Activity?
P.S. Я не хочу использовать статические переменные и синглтоны.
P.S.S. Уже после написания вопроса нашел в исходнике Activity связку класс для хранения объектов, которые не изменяются при изменении конфигурации:
/*Activity.java*/
static final class NonConfigurationInstances {
Object activity;
HashMap<String, Object> children;
List<Fragment> fragments;
ArrayMap<String, LoaderManager> loaders;
VoiceInteractor voiceInteractor;
}
/* package */ NonConfigurationInstances mLastNonConfigurationInstances;
Из этого следует что ОС все таки уничтожает Activity.
TL;DR Я использую MVP. Как мне привязать кэширование данных моего Presenter не завязываясь на Fragments, не использую базу данных, не сохраняя данные в sharedpreferences, а только сохраняя кэш в виде объектов и используя жизненный цикл и методы Activity?