6

我试图对图片文件解码进行捕获,但它无法捕获内存不足异常,并且应用程序崩溃了。

我知道解码图片文件的一些技巧,例如二次采样。但是我需要放大图片才能看到细节,所以我不能对它进行过多的二次采样。对于一些较新的设备,它可以成功分配更大的内存以避免内存不足的异常。

对于一些较旧的设备,它不能。

如果我可以为不同的设备定制我的应用程序,那就太好了。

所以我想:(1)我希望我能捕捉到内存不足的异常,所以如果我捕捉到它,我可以减小图像大小。(2) 或者,我希望能得到可用内存的大小进行分配。

我在网上搜索,找不到答案。

4

1 回答 1

5

首先,您可以在堆栈跟踪中看到抛出 OutOfMemoryError 的位置。如果你没有捕捉到它,要么是因为 a) 你捕捉到了 Exception 而不是 Throwable,或者 b) 错误被抛出到了你有 catch 语句的其他地方。使用 OutOfMemoryError 你不能保证它会被扔到哪里。通常它是您处理位图的地方,但它可能是另一个同时分配内存的线程。

在设备上获取可用内存很简单:http: //developer.android.com/reference/android/app/ActivityManager.html#getMemoryClass()

如果您还没有看过 Android 团队有很多关于位图和内存的文章:http: //developer.android.com/training/displaying-bitmaps/index.html

祝你好运!

于 2013-07-16T01:26:41.037 回答