У меня есть основное действие A, которое использует CursorLoader для запроса БД. Это я создаю в методе onCreate():
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
getSupportLoaderManager().initLoader(LOADER_MEASUREMENTS, null, A.this);
}
Действие A также реализует 3 обратных вызова для CursorLoader:
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args)
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
public void onLoaderReset(Loader<Cursor> loader)
Когда я поворачиваю устройство, я вижу, как работают правильные методы жизненного цикла:
A.onPause()
A.onStop()
A.onDestroy()
A.onCreate() <-- re-connect to existing loader, onCreateLoader() not called
A.onLoadFinished()
A.onStart()
A.onResume()
Затем я открываю суб-активность B и поворачиваю свое устройство. Когда я заканчиваю B и возвращаюсь к Activity A, я вижу следующий прогон:
B.onPause()
A.onLoaderReset() <- why does this run?
A.onDestroy()
A.onCreate()
A.onCreateLoader() <- now runs as loader is null
A.onStart()
...
Почему мой загрузчик reset, потому что я активировал Activity B и вращал устройство? Просто добавьте, что действие B не имеет ничего общего с БД или CursorLoader.