【发布时间】:2016-04-21 12:49:25
【问题描述】:
我有一个框架布局,用于交换片段。我使用导航抽屉,每个菜单项都会打开一个片段。所以可以肯定的是,在所有应用程序周期中,屏幕上同时只有 1 个片段(因此只有 1 个活动)。下面你可以找到我的片段启动方法
public void startFragment(Fragment f)
{
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
transaction.replace(R.id.fragment_container, f);
transaction.commit();
}
所以当我检查 Android Studio 时,每次我用上述方法替换片段时,内存使用量都会增加。 FragmentTransaction.remove 不释放片段,replace 也不释放。所以一段时间后,如果我单击每个菜单项并一遍又一遍地打开片段,内存使用量会增加很多。
所以我的问题是如何释放旧替换的片段?我只想要一个在内存中。或者我们可以说;我想摧毁他们
【问题讨论】:
-
@Fllo 感谢您的解释。所以我会将每个上下文引用的变量分配给每个片段中的 null ondestroyview
-
@Fllo 所以我将每个 ui 元素分配给 null ,它似乎没有太大变化。我改变的是,创建了一个名为 mainView 的变量并在 onCreateView inflater.inflate 中分配。然后在 onDestroyView 中将这个变量赋值为 null 好像有点区别。我做错了什么?
标签: android android-fragments memory-management