Android是否需要从文件中加载完整的位图,然后再对其进行采样?
In:-有消息称,对位图进行采样仍可能导致内存错误 这个问题对新版本的Android仍然有效吗Android是否需要从文件中加载完整的位图,然后再对其进行采样?,android,Android,In:-有消息称,对位图进行采样仍可能导致内存错误 这个问题对新版本的Android仍然有效吗 这是否意味着在采样之前,Android需要将全尺寸位图加载到内存中?我相信这会使用本机内存,因为图像处理是在本机代码中实现的。较新版本可能有更多的物理内存,但它仍然限于系统堆栈大小;这样,编程位图仍然需要非常小心地使用内存量 在这几年的谷歌I/O(2012年)上,有一个名为“少花钱多办事”的精彩演讲,展示了一些非常好的缓存技术,你应该研究一下。我相信你可以在YouTube Android开发者帐户上找
这是否意味着在采样之前,Android需要将全尺寸位图加载到内存中?我相信这会使用本机内存,因为图像处理是在本机代码中实现的。较新版本可能有更多的物理内存,但它仍然限于系统堆栈大小;这样,编程位图仍然需要非常小心地使用内存量 在这几年的谷歌I/O(2012年)上,有一个名为“少花钱多办事”的精彩演讲,展示了一些非常好的缓存技术,你应该研究一下。我相信你可以在YouTube Android开发者帐户上找到这段视频
找到视频:以下是获取可用内存量的方法:
Runtime.getRuntime().maxMemory()
下面是一个关于记忆的有趣博客:
安卓的问题是,你永远不知道什么时候会运行内存不足的应用程序,应用程序就会崩溃。这就是为什么您应该尽量避免加载太大的BIMAP(我通常使用最大值800/600或类似值,具体取决于屏幕方向……)
如果加载多个位图(如图库或其他视图组),则应使用弱引用:
另外,如果查看提供的链接中的示例,缩放首先仅解码边界,然后决定使用的缩放
当您不再需要位图时,请调用:
bitmap.recycle();
不要使用WeakReference!我在视频中提到的一个建议/技术是,WeakReference在这方面不是很好,即使你大量使用。它指出并显示了可在兼容包中使用LruCache的代码。视频如下: