在我的应用程序中,我们正在使用从 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/