Android Gallery 由于内存使用而崩溃

标签 android memory crash gallery image-gallery

在我的应用程序中,我们正在使用从 android dev (http://developer.android.com/resources/tutorials/views/hello-gallery.html) 获取的照片库。它从/sdcard 加载所有照片/DCIM(所有子目录)。虽然我们已经让它重新采样显示的图像以使用更少的内存,但如果用户有很多图片或滚动太快,它仍然会崩溃。

有没有关于如何使图库不使应用程序崩溃的建议?

(谷歌不应该为我们提供一个“脱离 self ”的画廊来处理所有这些问题吗?)

最佳答案

标准android gallery 的问题在于它不会使用 View 回收。你可以做任何你想做的缓存图像等。画廊本身会将所有添加到画廊的 ImageView 保存在内存中。这可能会导致画廊快速滚动,但也会导致大量内存不足异常。

一个好的解决方案是使用 Compatibility Library (从 Api Level 4 开始可用)和可以在那里找到的 Viewpager。如果您使用的是 FragemtSatePagerAdapter,它将为您提供一个非常易于维护的画廊,它更有用(不再跳转图像等)。如果内存紧张,当前未显示在画廊中的 fragment 可能会被破坏。

一定要正确实现 fragment 的生命周期。这意味着:

  • 一个 fragment 需要一个空的构造函数。
  • 将 fragment 数据保存在onSaveInstanceState中.在您的情况下,您可能希望保存图像的路径。

如果您还没有使用 fragment ,那么使用 viewpager 可能看起来需要做很多工作。但这是值得的。之后您和您的用户将拥有一个更好的应用程序。

关于Android Gallery 由于内存使用而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064117/

相关文章:

android - android中的缓存 Activity

c++ - 为什么我的系统不释放缓冲区/缓存

Java Runtime.getRuntime().freeMemory() 问题

c - 在 C 中实现拼写检查器 : Valgrind reports memory errors

android - 我的应用程序不断崩溃(致命异常)

ios - 显示/隐藏按钮时应用崩溃

android - AVD中的简单数学游戏崩溃

android - Android上的Haskell解释器?

android - 是否可以重置 Android 文件的最后修改日期?

java - 尝试在空对象引用上调用虚拟方法 'java.lang.String[] android.os.Bundle.getStringArray(java.lang.String)'