我正在开发一个相当大的应用程序(大约70个片段)。当我点击我的应用程序时,我以前的所有片段都存储在后台堆栈中。经过一些点击后,我的内存非常高,在旧手机(三星S3)上,我得到一个OutOfMemory异常。
有没有办法对片段backstack的内存使用做些什么? 我已经尝试制作自己的后台堆栈,它修复了内存问题,但唯一的问题是它不记得搜索条件和滚动位置:
Stack<BackStackEntry> mBackStack = new Stack<>();
mBackStack.add(new BackStackEntry(tag, fragment.getClass()));
答案 0 :(得分:0)
您可以为片段使用SingleTone模式。至少会减少内存肯定,因为你不必每次调用时都重新创建片段或者在后台添加它
// Singleton implementation
private static YourFragment instance;
public YourFragment () {
}
/**
* Static method which return the instance of the fragment. If the fragment is null, load it,
* else create new fragment. Singleton pattern.
*
* @param context
* @return
*/
public static YourFragment getInstance() {
if (instance == null) {
instance = new YourFragment ();
}
return instance;
}
您可以使用以下代码访问您的片段:
SearchFragment.getInstance()
答案 1 :(得分:0)
在非常特殊的情况下,您可以请求更大的堆大小 在清单中将largeHeap属性设置为“true” 标签。永远不要因为你的原因而要求大堆 内存耗尽而你需要快速修复 - 你应该只在使用它时使用它 你确切地知道所有内存的分配位置以及原因 必须保留。
阅读https://developer.android.com/training/articles/memory.html