我最近重构了一个应用程序,将 ViewFlipper 替换为 FrameLayout,并在其中交换 Fragment。
每当用户请求其中一种视图时:
我创建了一个新的Fragment并替换了旧的。那些从屏幕上移除的Fragment会调用onDestroy方法,但我加载到屏幕上的位图所占用的内存并没有被释放,因此在Fragment之间进行一些交换后应用程序会崩溃。
我也尝试在onDestroy中删除引用。
每当用户请求其中一种视图时:
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();
}
我创建了一个新的Fragment并替换了旧的。那些从屏幕上移除的Fragment会调用onDestroy方法,但我加载到屏幕上的位图所占用的内存并没有被释放,因此在Fragment之间进行一些交换后应用程序会崩溃。
我也尝试在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;
}
但是内存一直在增长。
有人知道任何解决方案吗?也许可以重用片段?有效地销毁它?我在听着。