我 try catch 图片文件解码,但未能捕获内存不足异常,应用程序崩溃。
我知道解码图片文件的一些技巧,例如子采样。 但是我需要放大图片才能看到细节,所以我不能对它进行太多二次采样。 对于一些较新的设备,它可以成功分配更大的内存以避免内存不足异常。
对于一些旧设备,它不能。
如果我可以为不同的设备定制我的应用程序,那就太好了。
所以我想: (1) 我希望我能捕捉到内存不足的异常,这样万一我捕捉到它,我就可以减小图像的大小。 (2) 或者,我希望能得到可用内存的大小来分配。
我在网上搜索,找不到答案。
最佳答案
首先,您可以在堆栈跟踪中看到抛出 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
祝你好运!
关于android - 我可以在用于解码图片文件的位图分配中捕获 Android 中的内存不足异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17666390/