【问题标题】:Questions about BitmapFactory.Options in Android关于Android中BitmapFactory.Options的问题
【发布时间】:2010-11-05 12:25:10
【问题描述】:

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

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

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

  1. 向 BitmapFactory.Options.inTempStorage 显式提供字节数组与在编码过程中没有它时 BitmapFactory 会做什么有什么区别?为什么/应该对 OutOfMemoryError 有所帮助?它是否提供比默认缓冲区更小的缓冲区,因此在内存不足之前有更多机会进行清理?

  2. 当我调用 Bitmap.recycle() 时具体发生了什么,为什么它与将 Bitmap 设置为 null 不同?注意:在我是否(以及何时)出现 OutOfMemory 错误方面,做任何一个或两个都没有影响。

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

更新:

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

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

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

【问题讨论】:

  • 这里有同样的问题。请与我们分享您最终找到的最佳做法。
  • 我用一个很棒的视频链接更新了我的问题。如果您遇到 OutOfMemoryExceptions 或类似内存问题的任何问题,这是必须注意的。

标签: java android garbage-collection bitmap bitmapfactory


【解决方案1】:

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

【讨论】:

  • 谢谢。我将阅读更多关于 vm heap 和 native heap 之间的区别的内容,并且我还将尝试使用 BitmapFactory.Options、GC.collect 和两者,看看我想出了什么。再次感谢。
  • 对您的实验有任何反馈吗?我很想知道。
  • @Rich.. 请告诉我们您的实验。有同样的问题。
  • 伙计们...在我的更新中查看上面的视频。如果您正在处理大型位图或任何占用大量内存的内容,那么这是给您的。我遇到的问题是不相关的,但是有更多关于运行时如何处理内存的信息非常重要。很棒的视频^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
相关资源
最近更新 更多