Jazzy ViewPager +图片加载=内存不足

时间:2014-06-18 00:54:56

标签: android android-viewpager out-of-memory universal-image-loader

使用JazzyViewPager滚动70张左右的图像时出现OutOfMemory错误。

在Jazzy寻呼机的某处似乎有一个糟糕的内存泄漏。即使我滚过它们,我也看到它仍然保留着图像。即使在更强大的设备上,我滚动浏览70张图像后也会失去记忆。

我正在使用带有此视图寻呼机的通用图像加载器,所以不确定它是否与它有任何关系。

其他人有这个问题吗?

1 个答案:

答案 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);
}

我监控了内存使用情况,现在一切都很好。