gpt4 book ai didi

Android - BitmapFactory.decodeByteArray - OutOfMemoryError (OOM)

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:06 26 4
gpt4 key购买 nike

我已经阅读了 100 多篇关于 OOM 问题的文章。大多数是关于大位图的。我正在做一个 map 应用程序,我们在其中下载 256x256 天气叠加图 block 。大多数是完全透明的并且非常小。我刚刚在调用 BitmapFactory.decodeByteArray(....) 时在 442 字节长的位图流上发生崩溃。

异常状态:

java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap Size=9415KB, Allocated=5192KB, Bitmap Size=23671KB)

代码是:

protected Bitmap retrieveImageData() throws IOException {
URL url = new URL(imageUrl);
InputStream in = null;
OutputStream out = null;
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

// determine the image size and allocate a buffer
int fileSize = connection.getContentLength();
if (fileSize < 0) {
return null;
}
byte[] imageData = new byte[fileSize];

// download the file
//Log.d(LOG_TAG, "fetching image " + imageUrl + " (" + fileSize + ")");
BufferedInputStream istream = new BufferedInputStream(connection.getInputStream());
int bytesRead = 0;
int offset = 0;
while (bytesRead != -1 && offset < fileSize) {
bytesRead = istream.read(imageData, offset, fileSize - offset);
offset += bytesRead;
}

// clean up
istream.close();
connection.disconnect();
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeByteArray(imageData, 0, bytesRead);
} catch (OutOfMemoryError e) {
Log.e("Map", "Tile Loader (241) Out Of Memory Error " + e.getLocalizedMessage());
System.gc();
}
return bitmap;

}

这是我在调试器中看到的:

bytesRead = 442

所以Bitmap数据是442 Bytes。为什么它会尝试创建一个 23671KB 的位图并耗尽内存?

最佳答案

我以前遇到过这样的问题。 Android 使用 Bitmap VM,它非常小。确保通过 bmp.recycle 处理位图。更高版本的 Android 有更多的位图虚拟机,但我一直在处理的版本有 20MB 的限制。

关于Android - BitmapFactory.decodeByteArray - OutOfMemoryError (OOM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7291029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com