android - 我可以在用于解码图片文件的位图分配中捕获 Android 中的内存不足异常吗?

标签 android android-memory

我 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/

相关文章:

java - java中的JSON对象读取

android - 如何在 dart 中使用异步函数的值

Android Studio Profiler 内存分配 N/A

android - IntelliJ IDEA 注释处理器 : "Obtain processors from project classpath"

android - 安卓倒数计时器

android - Android 应用程序中的内存管理

android - SharedElement 和自定义 EnterTransition 导致内存泄漏

android - Android 应用程序调试是否比常规应用程序使用更多内存?

android - Android 10 中的相机 Intent 权限

android - 如何处理内存不足异常?