ViewPager加载图片OOM解决过程

问题描述

通过一个ViewPager加载图片,每个ItemView里面有一个ImageView和一个ProgressBar。当调用instantiateItem的时候,会启动一个AsyncTask去下载图片并显示。但是不断地滑动图片,大概二三十张的时候就会崩溃,报OOM错误。

解决思路

由于每当调用instantiateItem的时候,我都会重新inflate一个新的View,然后保存在数组里面。在destroyItem方法里面去调用container.remove()方法,但是由于View的引用仍然保存在数组里面,所以View就无法得到回收,所以在remove的时候,也同时将数组相应的元素设为了null。在AsyncTask里面也有ImageView和ProgressBar的引用,可能造成了内存泄露。后来就改为了WeakReference去保存ImageView。
但是问题依然没有解决,然后继续想办法,想到了图片里面的bitmap可能要手动释放,就在destroyItem的时候,手动将ImageView的bitmap进行释放,调用了bitmap的recycle方法。
后来发现情况有所好转,但是滑多了还是会有问题。
就想到了ViewPager其实不需要一直inflate View,可以在初始化ViewPager的时候就inflate几个View,我是创建了4个View,然后之后的滑动就一直重复利用这4个View,通过取模运算,使用相应的View,果然就内存就上升的很慢,而且上升上去之后也能通过GC降下来。

你可能感兴趣的:(ViewPager加载图片OOM解决过程)