0

當我使用JazzyViewPager滾動70個左右的圖像時,出現OutOfMemory錯誤。JazzyViewPager + ImageLoading = OutOfMemory

在Jazzy尋呼機的某個地方似乎有一個糟糕的內存泄漏。即使當我滾過它們時,我發現它仍然保留着圖像。即使在更強大的設備上,在滾動瀏覽70張左右的圖像後,我仍然記憶猶新。

我使用通用圖像加載器與此視圖分頁器,所以不知道如果這與它有任何關係。

其他人有這個問題嗎?

回答

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

它總是添加對象,但絕不會取消。

爲了解決這個問題,我添加了一個remove方法的JazzyViewPager:

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

我監視內存的使用情況,現在一切都很好。

+0

努力!謝謝你也解決了我的問題 –