我尝试对图片文件解码进行捕获,但它无法捕获内存不足异常,并且应用程序崩溃了。
我知道解码图片文件的一些技巧,例如子采样。
但我需要放大图片才能看到细节,所以我不能对其进行过多的二次采样。
对于一些较新的设备,可以成功分配更大的内存以避免内存不足异常。
对于某些较旧的设备,它不能。
如果我可以为不同的设备定制我的应用程序,那就太好了。
所以我想要:
(1)我希望我能够捕获内存不足异常,这样万一捕获它,我可以减小图像大小。
(2) 或者,我希望能够获取可供分配的可用内存的大小。
我在网上搜索,未能找到答案。
首先,您可以在堆栈跟踪中看到抛出 OutOfMemoryError 的位置。如果您没有捕获它,则可能是因为 a) 您捕获的是 Exception 而不是 Throwable,或者 b) 错误被抛出到 catch 语句之外的其他位置。对于 OutOfMemoryError,您无法保证它将被抛出到哪里。通常它是您处理位图的地方,但也可能是另一个恰好同时分配内存的线程。
获取设备上的可用内存很简单:http://developer.android.com/reference/android/app/ActivityManager.html#getMemoryClass() http://developer.android.com/reference/android/app/ActivityManager.html#getMemoryClass()
如果您还没有看过,Android 团队有一组关于位图和内存的精彩文章:http://developer.android.com/training/displaying-bitmaps/index.html http://developer.android.com/training/displaying-bitmaps/index.html
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)