存储了第一个和最后一个可见位置之外的3个位置的bitmap//即dataCache中始终只缓存了(M=6+Gallery当前可见view的个数)M个bitmapint start = mGallery.getFirstVisiblePosition()-3;int end = mGallery.getLastVisiblePosition()+3;Log.v(TAG, "start:"+ start);Log.v(TAG, "end:"+ end);//释放position<start之外的bitmap资源Bitmap delBitmap;for(int del=0;del<start;del++){delBitmap = dateCache.get(del);if(delBitmap != null){//如果非空则表示有缓存的bitmap,需要清理Log.v(TAG, "release position:"+ del);//从缓存中移除该del->bitmap的映射dateCache.remove(del);delBitmap.recycle();}}freeBitmapFromIndex(end);}/*** 从某一位置开始释放bitmap资源* @param index*/private void freeBitmapFromIndex(int end) {//释放之外的bitmap资源Bitmap delBitmap;for(int del =end+1;del<dateCache.size();del++){delBitmap = dateCache.get(del);if(delBitmap != null){dateCache.remove(del);delBitmap.recycle();Log.v(TAG, "release position:"+ del);}}}
上面的代码我们每一步写的很详细,我们有效的避免了OOM的问题。大家不要小看了这个
问题,我们在开发的时候会经常遇到,希望大家在开发的时候思考的全面一点,这样我们在开发的时候不就减少犯错误。