在:在 Android 中以正确的大小解码位图- 已发布对位图进行采样仍可能导致内存错误。
这个问题对较新版本的 Android 仍然有效吗?
这是否意味着在向下采样之前,Android 需要将全尺寸位图加载到内存中?我相信这使用本机内存,因为图像处理是在本机代码中实现的。
在:在 Android 中以正确的大小解码位图- 已发布对位图进行采样仍可能导致内存错误。
这个问题对较新版本的 Android 仍然有效吗?
这是否意味着在向下采样之前,Android 需要将全尺寸位图加载到内存中?我相信这使用本机内存,因为图像处理是在本机代码中实现的。
较新的版本可能有更多的物理内存,但它仍然受限于系统堆栈大小;这样,编程位图仍然应该非常小心地使用所使用的内存量。
在今年的 Google I/O(2012 年)上,有一个名为“Doing more with less”的精彩演讲,展示了一些您应该研究的非常好的缓存技术。我相信您可以在 YouTube Android 开发者帐户上找到此视频。
以下是获取可用内存量的方法:
Runtime.getRuntime().maxMemory()
这是一个关于记忆的有趣博客:http: //codelog.dexetra.com/getting-around-android-memory-blues
Android 的问题是你永远不知道什么时候你可能会耗尽内存并且应用程序会崩溃。这就是为什么你应该尽量避免加载太大的双图(我通常使用最大 800 / 600 或类似的东西,具体取决于屏幕方向......)
如果为画廊或其他视图组加载多个位图,您应该使用弱引用:http:
//developer.android.com/reference/java/lang/ref/WeakReference.html
此外,如果您查看链接中的示例,您提供的缩放首先仅解码边界,然后决定要使用的比例。
当您不再需要位图时,请调用:
bitmap.recycle();