我不断收到java.lang.outofmemory错误

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

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

  • 这44k是压缩大小。 要将其用作背景,它将解压缩成位图。 位图的内存大小是每个像素乘以宽度乘以高度的颜色格式的大小。 更糟的是,如果它被缩放,系统将需要更多的内存来进行缩放。

    因此,例如,如果您使用此颜色格式:http://developer.android.com/reference/android/graphics/Bitmap.Config.html#RGB_565

    然后,您的位图所需的内存为2 x 2560 x 1600 = 7.8125 MB。

    有一个获取更多内存的清单选项:http://developer.android.com/guide/topics/manifest/application-element.html#largeHeap

    尽管您还应该确保为较低的DPI设备提供较小的资源,并只能根据需要读取尽可能多的数据。 如果您不需要每个像素,则BitmapFactory类允许您在读取数据时跳过像素。 BitmapRegionDecoder让你只需读取你需要的图像部分。


    在内部,您的.png用每个像素的整数表示(默认情况下)。 整数是4个字节。 如果你做数学:

    2560 pixels * 1600 pixels * 4 bytes / pixel = 16,384,000 bytes = 15.625 MB
    

    旧款Android设备的每次应用内存限制为16 MB。 便携式网络图形格式通常是压缩的,这就是为什么它的文件大小和表示图像在内存中的大小有明显区别。 而且,即使您的图片没有或不需要Alpha通道,Android也会在Alpha通道上浪费一个字节。


    避免使用位图来填充背景。 他们不会给出最好的结果,并且会在不保留屏幕比例的情况下进行缩放。

    使用9贴片,形状可绘制,简单的颜色和/或固定在某个角落的小型位图。

    链接地址: http://www.djcxy.com/p/93103.html

    上一篇: I keep getting a java.lang.outofmemory error

    下一篇: java.lang.OutOfMemoryError: bitmap size exceeds VM budget