使用JazzyViewPager滚动70张左右的图像时出现OutOfMemory错误。
在Jazzy寻呼机的某处似乎有一个糟糕的内存泄漏。即使我滚过它们,我也看到它仍然保留着图像。即使在更强大的设备上,我滚动浏览70张图像后也会失去记忆。
我正在使用带有此视图寻呼机的通用图像加载器,所以不确定它是否与它有任何关系。
其他人有这个问题吗?
答案 0 :(得分:2)
JazzyViewPager确实存在泄漏。
我运行了一个内存分析器,发现JazzyViewPager维护了所有添加视图的地图:
private HashMap<Integer, Object> mObjs = new LinkedHashMap<Integer, Object>();
public void setObjectForPosition(Object obj, int position) {
mObjs.put(Integer.valueOf(position), obj);
}
它总是添加对象,但永远不会删除。
为了解决这个问题,我在JazzyViewPager中添加了一个remove方法:
public void removeObject(int position) {
Object removed = mObjs.remove(position);
if (removed != null) {
LogUtils.LOGD(TAG, "Removed obj at pos " + position);
}
}
并从我的适配器的destroyItem()
:
@Override
public void destroyItem(ViewGroup container, int position, Object obj) {
container.removeView(((JazzyViewPager)container).findViewFromObject(position));
// make sure to remove the reference from the jazzyviewpager map
((JazzyViewPager)container).removeObject(position);
}
我监控了内存使用情况,现在一切都很好。