我有一个容器片段。我在其中加载片段。当我想加载一个新片段时,我使用此代码
FragmentTransaction ft=activity.getSupportFragmentManager().beginTransaction();
ft.add(R.id.mainframe,new_fragment_here).hide(getCurrentFragment()).addToBackStack(null).commit();
我要问的是,当我隐藏一个片段时,如果内存不足,可以由垃圾收集器将其删除吗?
当我想回到旧片段时,我只需使用getFragmentManager().popBackStack();
当我使用此代码时,我的片段及其图像或视频是否被永久破坏?
这种用法是否会导致内存不足错误?
我不得不说我几乎所有的片段都显示了来自网络的图像,有些片段只显示了一张图像,而其他片段则显示了更多的图像。
答案 0 :(得分:1)
我相信您要问的是有关Fragment的生命周期以及GC在后端堆栈中如何工作的信息。
根据我的观察和知识,当您将Fragment添加到Backstack时,Fragment就位于设备的RAM中,但是如果有很多任务(Fragment) 如果还活着,GC可能会根据需要强行破坏Fragment。
要更好地了解片段的生命周期以及Backstack中的片段会发生什么情况,请参考此流程图。
此图可能有点复杂,但可以帮助您了解片段的工作原理。
注意::当您弹出/替换片段时,片段本身被破坏了,您可以通过在片段onDestroy()
处保留一个BreakPoint来对其进行检查。
如果没有可用的图像,请参考here