我有一个带有FrameLayout的活动,其中在导航期间替换片段,如下所示:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
// ...
// fragMap is a HashMap<String,Class<?>> mapping fragments classes
Fragment frag;
Class<?> classa = fragMap.get(s);
frag = (Fragment) classa.newInstance();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right ,R.anim.slide_in_right, R.anim.slide_out_left);
ft.addToBackStack(null);
ft.replace(R.id.fragcontainer, frag);
ft.commit();
当按下后退按钮时,反向交易会激活,一切似乎都正常
当创建活动时,加载第一个片段A并且内存使用量为〜20mb,然后我用B替换A,用C替换B,内存增加到~40mb。
当我按下后退按钮直到显示片段A时,我预计内存使用量会回到~20mb(就像活动一样),但它仍然停留在~40mb。如果再次通过B和C导航,它不会改变,仍然是〜40mb。
我真的不明白这种行为,如果碎片泄漏,每次从A到B到达时都不应该记忆提高C?
我还尝试用以下方法清除背包:
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
但没有任何改变。我还检查了导航回来时每个片段都调用了onDestroy
,并且正在调用它。
有人可以帮忙理解这个吗?我使用的是错误的模式还是什么?