我有点迷迷糊糊了:
案例 1:我尝试制作一个包含 26 张图像的动画(每张图像的大小约为 200KB)。总计为 5,3 MB。动画工作正常。图像已加载到内存中,一切正常。
案例 2:现在,当我尝试制作包含 129 张图像(每张约 30KB,总共 4.6 MB)的动画时,出现内存不足异常。
我正在跟踪内存分配,在“案例 1”中,加载后每个位图的加载位图图像大小为 691200 字节。在“情况 2”中,每个文件的位图大小约为 563520 字节。
使用getRowBytes()
* getHeight()
进行计算
这很奇怪,“case 2”中的图像大小大约小 6 倍,但加载后大小完全相同。
这是我将位图加载到内存的方式:
for (int i = 0; i <= 128; i++) {
imagesHolder[i] = BitmapFactory.decodeResource(
getApplicationContext().getResources(),
getApplicationContext().getResources().getIdentifier(
"image" + (i + 1) + "", "drawable",
getApplicationContext().getPackageName()));
System.out.println(imagesHolder[i].getRowBytes() * imagesHolder[i].getHeight());
totalSize+=imagesHolder[i].getRowBytes() * imagesHolder[i].getHeight();
System.out.println("TOTAL: "+totalSize);
}
那么,为什么我的小图像在加载到内存后变得如此之大?所有提示表示赞赏。 :)
最佳答案
这不是确定存储位图所需内存量的精确方法。每个 Bitmap
对象都包含一些额外的字段,这些字段也需要内存。
看这道题:Android & Dalvik - Get the size of an object
关于android - 将大量图像加载到内存会导致内存不足异常 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9462832/