自定义GridView的内存不足异常

这个问题在这里已经有了答案:

  • 将图像加载到位图对象时出现奇怪的内存不足问题40个答案

  • 您正尝试为图像数据分配太多内存。 正如您在评论中所解释的那样,您的图像相当大,并且只要创建适配器就会被读取。

    读入内存将消耗每个像素4个字节,所以如果你的图像是1024像素平方,数学是:

  • 1024×1024×4 = 4MB
  • 15张图片×4 MB /图片= 60MB
  • 这可能超过了48MB的堆预算。

    您可能希望提高显示这些图像的效率。 考虑:

  • 只有在显示图片时才加载图片,使用GridView的getView()机制;
  • 使用BitmapFactory加载具有样本大小的位图。

  • Esp for “..在GridView加载图像:
    您可以使用inSampleSize加载所有图像并将原始图像替换为可见图像 - 这意味着可见的视图部分,动态加载图像时无需BitmapFactory及其OptionsinSampleSize

    您可以根据不同的设备缩小它们以加载图像而不会遇到内存问题。 在你的情况下,一些手机可能不会在第一次运行时表现出相同的行为,但最终,如果不处理优化的图像加载解决方案,应用程序将崩溃。

    将缩小后的版本加载到内存中的主题。
    http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
    Android上的内存不足错误

    关于如何避免它们:
    如何避免在Android中使用位图时出现内存不足错误

    有关概述:
    http://blogs.innovationm.com/android-out-of-memory-error-causes-solution-and-best-practices/ http://android-developers.blogspot.de/2009/01/avoiding-memory- leaks.html

    在设置drawable作为你的imageview的背景之前,即:

    iv.setBackgroundResource(R.drawable.image);  
    

    获取缩放的位图或尝试其他选项,如inSampleSize ,检查您的解决方案如何影响图像质量。

    对于评论:

    Bitmap drawableImage=BitmapFactory.decodeResource(context.getResources(),R.drawable.image);
    Bitmap bitmap = Bitmap.createScaledBitmap(drawableImage, width, height, false);
    Drawable drawableScaled = new BitmapDrawable(context.getResources(), bitmap);
    
    链接地址: http://www.djcxy.com/p/93091.html

    上一篇: Out Of Memory Exception with custom GridView

    下一篇: Decode the file to Bitmap in Android throwing exception