使用ViewPager,处理图片时出现outOfmemomery错误

Using ViewPager, outOfmemomery error when dealing with images

我一直在使用 viewPager 加载图像:它可以完美地加载两张图像,但是当我增加图像数量时它崩溃了。 我已经压缩了图像尺寸,但这并没有解决问题。 根据 Whosebug 上的一些类似问题,我也使用了 Recycle 但这也没有解决问题

还有其他增加内存管理的方法吗?

谢谢

你有没有用样本量来衡量它们?尝试用它创建位图,这样它只会加载所需大小的位图,而不是将完整大小的位图加载到内存中。

public int calculateInSampleSize(BitmapFactory.Options options) {
    DisplayMetrics displayMetrics = cxt.getResources().getDisplayMetrics();
    int reqWidth = displayMetrics.widthPixels;

    final int height = options.outHeight;
    final int width = options.outWidth;

    double devCal2 =  (height*1000)/width;
    int reqHeight = (int) ((devCal2/1000)*reqWidth);

    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        final int halfHeight = height / 2;
        final int halfWidth = width / 2;

        // Calculate the largest inSampleSize value that is a power of 2 and keeps both
        // height and width larger than the requested height and width.
        while ((halfHeight / inSampleSize) > reqHeight
                && (halfWidth / inSampleSize) > reqWidth) {
            inSampleSize *= 2;
        }
    }

    return inSampleSize;
}

public Bitmap createBitmap(){

    BitmapFactory.Options options2 = new BitmapFactory.Options();
    options2.inJustDecodeBounds = true;
    options2.inDither=true;
    BitmapFactory.decodeFile(cxt.getExternalFilesDir(filepath) +"/companylogo.png",options2);
    options2.inSampleSize = calculateInSampleSize(options2);//=32
    options2.inJustDecodeBounds = false;

    return BitmapFactory.decodeFile(cxt.getExternalFilesDir(filepath) +"/companylogo.png",options2);
}

参考请查看http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

我还了解到使用弱引用对图像来说是个好主意,也许这会有所帮助 http://eclipsesource.com/blogs/2012/07/31/loading-caching-and-displaying-images-in-android-part-1/