В моем приложении для Android есть фрагменты, один из которых очень тяжелый (он загружает много вещей из Интернета), а другой - легкий (например, панель настроек).
Я переключаюсь между фрагментами с помощьючто-то вроде этого:
private Fragment myFragment1;
private Fragment myFragment2;
......
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.main_fragment, myFragment2);
ft.commit();
Моя проблема в том, что при замене он входит в onStop () и onDestroy () фрагмента.И поскольку я не освобождаю свои тяжелые вещи в onDestroy (), у меня большая утечка памяти ...
Я хотел бы сохранить в памяти все свои фрагменты и только показывать /скрыть их от экрана.Было бы хорошо сделать быстрое переключение между экранами, не загружая все время.
Итак, вопрос: Как я могу изменить свой код, чтобы сохранить все мои фрагменты в памяти? Я хотел бы иметь сонет как:
Fragment1.onPause();
Fragment2.onResume();
А не:
Fragment1.onPause();
Fragment1.onStop();
Fragment1.onDestroy();
Fragment2.onCreate();
Fragment2.onResume();
Еще одна вещь, я использую android.support.v4.app.Fragment на Android 2.2 и более.
Большое спасибо!
РЕДАКТИРОВАТЬ 1:
Я нашел некоторую помощь и выполнил эту функцию:
private void changeFragement(Fragment f, String fragmentTag) {
try {
if (f != null && fragmentTag != null) {
fm = getSupportFragmentManager();
ft = fm.beginTransaction();
Fragment currentFragment = fm.findFragmentById(R.id.main_fragment);
if (currentFragment != null)
ft.hide(currentFragment);
Fragment cachedFragment = fm.findFragmentByTag(fragmentTag);
if (cachedFragment == null)
ft.add(R.id.main_fragment, f, fragmentTag);
else
ft.show(f);
/*Fragment cachedFragment = fm.findFragmentByTag(fragmentTag);
if (cachedFragment == null)
cachedFragment = f;
ft.replace(R.id.main_fragment, cachedFragment, fragmentTag);*/
ft.addToBackStack(null);
ft.commit();
}
} catch (IllegalStateException err) {
}
}
Проблема в том, что фрагменты не очень хорошо заменены, я не очень хорошо понимаю "ft.addToBackStack (null);" ... Не могли бы вы помочь мне исправить этот код?