Я недавно провела рефакторинг приложения и заменила ViewFlipper на FrameLayout, в котором я переключаюсь между фрагментами.
Каждый раз, когда пользователь запрашивает одно из представлений:
public void showLibraryOf(long publisherId) {
library = new DownloadLibraryFragment(id, viewFactory());
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.container, library);
ft.commit();
library.setAdapterObserver(this);
}
public void showMyLibraryOf(long publisherId) {
myLibrary = new MyLibraryFragment(id, viewFactory());
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.container, myLibrary);
ft.commit();
}
public void showHelp() {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.container, new HelpFragment());
ft.commit();
}
Я создаю новый фрагмент и заменяю старый. При удалении с экрана вызывается onDestroy, но память, занятая растровыми изображениями, которые я загружаю на экран, не удаляется, поэтому приложение падает после некоторого обмена между фрагментами.
Я также пытался удалить ссылки на onDestroy
@Override
public void onDestroyView() {
destroy();
super.onDestroyView();
adapter.clear();
adapter.clearObservers();
adapter.notifyDataSetChanged();
view.setAdapter(new ArrayAdapter<Journal>(getActivity(), 0));
adapter = null;
view = null;
}
Но память продолжает расти.
Кто-нибудь знает какое-нибудь решение? возможно повторное использование фрагментов? эффективно уничтожить это? Я слушаю.