我有一个导航抽屉菜单(只有几个项目)调用切换片段,如下所示:
FragmentTransaction trans = fragmentManager
.beginTransaction()
.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right)
.replace(R.id.container, newFragment)
.addToBackStack(String.valueOf(item.Index)); // item.Index is clicked nav. drawer item index
trans.commit();
现在,当用户使用抽屉在应用程序中导航时,后端堆栈会不断增长和增长。当堆栈中有很多项目(例如> 30或类似的东西)时,正在使用一些我不喜欢的内存,因为在某些时候它会达到临界点并且我会得到OOMException。
那么有没有办法从后台堆栈中删除OLDEST项目?我不想使用popBackStack()
(和类似的),因为它将删除最新的项目,我想摆脱第一个(最旧的)项目,因为用户可能不记得他/她在哪里10导航更早。
答案 0 :(得分:1)
我找到了某种解决方法,所以我会回答我自己的问题,也许有人会觉得它很有用。
由于无法从FragmentManager
删除最旧的堆栈,因此我决定抛弃它并使用我自己的“后台堆栈”实现。
此处有更多详情: http://stuffleftatparty.com/android-app-will-eat-its-entire-memory-by-design
答案 1 :(得分:0)
我认为您可以按照以下方式删除前10个片段
if (getSupportFragmentManager().getFragments() != null && getSupportFragmentManager().getFragments().size() > 30) {
Iterator itr = getSupportFragmentManager().getFragments().iterator();
int index = 0;
//REMOVE FIRST 10 fragments on Stack
while (itr.hasNext()) {
if (index < 10) {
itr.remove();
}else {
break;
}
index++;
}
}