Android 从FragmentManager泄漏片段

Android 从FragmentManager泄漏片段,android,memory-leaks,fragment,fragmentmanager,Android,Memory Leaks,Fragment,Fragmentmanager,我正在与碎片泄漏作斗争,我不知道如何处理它: 我有一个片段活动我正在使用带有两个按钮的支持库v4:前进和后退。“前进”按钮使用长动画将片段添加到backbackback,而“后退”按钮将从backbackback弹出片段 第四个按钮单击侦听器的代码: FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setCustomAnimations(R.anim.own

我正在与碎片泄漏作斗争,我不知道如何处理它:

我有一个片段活动我正在使用带有两个按钮的支持库v4:前进和后退。“前进”按钮使用长动画将片段添加到backbackback,而“后退”按钮将从backbackback弹出片段

第四个按钮单击侦听器的代码:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.own_slide_in_left, R.anim.own_slide_out_right, R.anim.own_slide_in_left, R.anim.own_slide_out_right);
transaction.add(R.id.fragment_holder, new FirstFragment());
transaction.addToBackStack(null);
transaction.commit();
getSupportFragmentManager().popBackStackImmediate();
对于“后退”按钮,请单击“侦听器”:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.own_slide_in_left, R.anim.own_slide_out_right, R.anim.own_slide_in_left, R.anim.own_slide_out_right);
transaction.add(R.id.fragment_holder, new FirstFragment());
transaction.addToBackStack(null);
transaction.commit();
getSupportFragmentManager().popBackStackImmediate();
当我按下后退按钮并在动画进行时旋转设备时,旋转后的视觉效果似乎一切正常,但前面的片段泄漏了。我可以通过在片段的ctor或onSaveInstanceState中设置断点来判断。当它不应该的时候,它会在每一个旋转上

我做错了什么


编辑:使用本机片段,Android 4.0.3,这个问题仍然存在,你是什么意思?片段在分离后不会作为活动销毁…这就是为什么您可以为片段分配一个标记,然后再附加它。我的片段拥有大量资源,多次这样做会导致内存不足错误,因为每次创建片段并在旋转时“泄漏”。我应该如何修复它以完全删除它们?您确定要重用相同的片段还是每次都要重新创建一个新片段?另一件事,在OnDetch回调中,为实例变量(如View)设置nullify。每个声明为类变量且具有上下文引用的变量。我每次都创建一个新变量,但我无法理解为什么只有在动画尚未完成时屏幕方向发生时,此问题才会持续。如果动画完成,然后我旋转设备,则一切正常。我建议您重新使用相同的设备,并使用其标记恢复它