我知道这个问题被多次询问,但我的情况仍然清晰有用。
我在2列网格视图中显示一些图像。当用户点击图像时,我在ViewPager中显示图像。在gridview中显示的图像大约是200X200px,我想在DialogFragment中在ViewPager中显示相同的图像,放大尺寸大约800X800px。
图像的实际尺寸很大,分辨率不同。我已按照http://developer.android.com/training/displaying-bitmaps/index.html链接进行操作,并将图像按比例缩小到我的应用所需的大小。在ViewPager片段对话框中,我还使用bitmap.recycle()
回收图像并在PagerFragment onDestroy中显式调用System.gc()
(我知道这是一种不好的做法)。但即使这样,我也会出现内存不足错误。最重要的是,我只在Android 4.2.1(Nexus 7)中遇到此问题,但在Android 4.1.2(Samsung Tab)和Android 4.4(Nexus 7)上没有遇到此问题。
对于后来的2个Android版本,我甚至不必调用System.gc()
。没有这个,它的效果非常好。我查看了Viewpager的300到400张图片。但是对于前者滚动60张图片后,App崩溃了OutOfmemory错误。为了解决这个问题,我现在使用了一种解决方法android:largeHeap="true"
,我觉得这对myapp非常糟糕,无法消化它。
如果有人能帮助我避免android:largeHeap="true"
,我真的很感激。
在我的应用程序中,我必须在GridView中显示大约6000个图像,并在ViewPager中显示链接到GridView的放大图像。我在滚动gridview时异步加载来自FileSystem的20个图像。
提前致谢...
答案 0 :(得分:0)
使用LRUCache来保存图像。使其成为唯一拥有当前不在屏幕上的Bitmap的东西。这样,旧的位图将被踢出并快速收集垃圾。