android - 将大量图像加载到内存会导致内存不足异常 - Android

标签 android bitmap out-of-memory

我有点迷迷糊糊了:

案例 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/

相关文章:

android - 自定义布局上的 Onlayout 方法扩展 LinearLayout

android - 智能手机和桌面应用程序通信技术和跨平台框​​架

windows - HDC 是否使用 alpha channel ?

kotlin - CorDapp流测试中的内存泄漏

android - 显示从相机拍摄的照片 : java. lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)

android - 获取安卓手机的当前位置

java - Java 中的 Raspberry pi 3 蓝牙 : my BufferedReader hangs when receiving lots of data

database - 使用位图索引删除记录

android - 无法获取 webview 的绘图缓存 : android

java - 使用密码解密大文件时出现内存不足异常