java - 关于Android中BitmapFactory.Options的问题

标签 java android garbage-collection bitmap bitmapfactory

我一直在阅读有关解码位图的性能问题,并收到 OutOfMemoryError“位图超出 VM 预算”的问题,而我希望不会内存不足并在线阅读这是一个常见问题,称为错误许多开发者的框架。

通常,我在第二次通过时会遇到上述错误。假设我成功加载了一个相当大的位图,然后回收它,甚至将 ref 设置为 null。当我第二次调用相同的方法将我的位图加载到内存中时...崩溃。

我在这里和其他地方的在线帖子中读到,有几件事可以用 BitmapFactory.Options 完成(例如,显式提供输入缓冲区)。但是,在盲目地使用我所发现的内容之前,我希望对这些类有更多了解的人可以提供更多的信息。

  1. 显式地向 BitmapFactory.Options.inTempStorage 提供字节数组与在编码过程中如果没有它 BitmapFactory 会做什么之间有什么区别?为什么这会/应该有助于解决 OutOfMemoryError?它是否提供比默认缓冲区更小的缓冲区,因此在内存耗尽之前有更多机会进行清理?

  2. 当我调用 Bitmap.recycle() 时具体发生了什么,为什么它与将 Bitmap 设置为 null 不同?注意:执行其中一项或两项操作对我是否(以及何时)出现 OutOfMemory 错误没有影响。

  3. 有没有什么时候我应该明确邀请 GC 参与处理这类问题?我一直(在 Java 和 .Net 中)都假设 GC 在大多数情况下应该被信任来决定它在何时何地执行它的操作,因为收集的后果不仅仅是释放内存(而且我个人对它们的了解还不足以做出那个决定)。

更新:

这个视频回答了我的大部分问题:

Google I/O 2011:Android 应用的内存管理

http://www.youtube.com/watch?v=_CruQY55HOk

最佳答案

我发现这可能很有趣:http://osdir.com/ml/AndroidDevelopers/2009-08/msg01230.html .您是否尝试过 System.gc() 来确认它来自未正确清理 native 堆的问题?

关于java - 关于Android中BitmapFactory.Options的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4105800/

相关文章:

java - JSR 303 : Is it possible to validate whole graph automatically?

java - ehcache xml 需要 defaultCache 元素,其他缓存正在获取 defaultCache 属性

java - Activity 变灰并有两个按钮可供选择

java - 当我离开 Activity 并返回时,Activity 不断重启

java - 更改屏幕 fragment 后崩溃

android - Android 中带有开关框的钛 TableView 在滚动时会导致问题?

java - 如何从命令行检查正在运行的 JVM 的堆使用情况?

javascript - 何时/是否在 Javascript 中使用 Delete

java - G1 垃圾收集器 : Perm Gen fills up indefinitely until a Full GC is performed

java - 为什么 hibernate 在不同的 JVM 实例中为相同的查询创建不同的列别名?