从backstack调用片段时会发生什么?

时间:2019-01-05 14:05:33

标签: android android-fragments

我有一个容器片段。我在其中加载片段。当我想加载一个新片段时,我使用此代码

FragmentTransaction ft=activity.getSupportFragmentManager().beginTransaction();
                    ft.add(R.id.mainframe,new_fragment_here).hide(getCurrentFragment()).addToBackStack(null).commit();

我要问的是,当我隐藏一个片段时,如果内存不足,可以由垃圾收集器将其删除吗?

当我想回到旧片段时,我只需使用getFragmentManager().popBackStack();

当我使用此代码时,我的片段及其图像或视频是否被永久破坏?

这种用法是否会导致内存不足错误?

我不得不说我几乎所有的片段都显示了来自网络的图像,有些片段只显示了一张图像,而其他片段则显示了更多的图像。

1 个答案:

答案 0 :(得分:1)

我相信您要问的是有关Fragment的生命周期以及GC在后端堆栈中如何工作的信息。

根据我的观察和知识,当您将Fragment添加到Backstack时,Fragment就位于设备的RAM中,但是如果有很多任务(Fragment) 如果还活着,GC可能会根据需要强行破坏Fragment。

要更好地了解片段的生命周期以及Backstack中的片段会发生什么情况,请参考此流程图。

此图可能有点复杂,但可以帮助您了解片段的工作原理。

注意::当您弹出/替换片段时,片段本身被破坏了,您可以通过在片段onDestroy()处保留一个BreakPoint来对其进行检查。

Fragment lifeCycle

如果没有可用的图像,请参考here