使用Bitmaps很快就会内存不足

时间:2013-11-06 07:32:22

标签: android android-fragments

我有一个包含单个片段的Activity,而Fragment有一个带有FragmentPagerAdapter的ViewPager,可以分页其他片段:

                                         --> ChildFragment
MyActivity -> HostFragment w ViewPager   --> ChildFragment
                                         --> ChildFragment

在ChildFragment中,我使用Android-Universal-Image-Loader 库来显示几个图像。 在Nexus S上,我的臭名昭着

java.lang.OutOfMemoryError: bitmap size exceeds VM budget
在大约10个Childfragments刷过(约50-100位图)之后,速度非常快。 我尝试将所有推荐设置设置为UIL配置,禁用链接,无济于事。 我也尝试在onDestroyView中回收一个Childfragment的所有位图,没有帮助。

  1. 我的嵌套片段设置是否与此问题有关?在另一个应用程序中,我只有一个带有Viewpager和Childfragments的Activity(没有中间片段),我没有这个问题。

  2. 我在Eclipses DDMS视图中检查了堆大小,当应用程序仍有45%的堆大小可用时,应用程序如何崩溃? 堆视图说:Heap size 10 MB Allocated 5,4 MB Free 4,5 MB 该应用程序如何能够内存不足?

3 个答案:

答案 0 :(得分:1)

首先,您应该使用FragmentStatePagerAdapter。它可用于许多片段,并在您在它们之间滑动时处理保存/恢复状态。

答案 1 :(得分:0)

您必须知道位图需要大量内存(每个像素需要4个字节)=>所以500万张照片如果没有缩小就需要20MB。

阅读开发人员指南here,详细了解如何将位图缩小到所需的大小。

简而言之,您要求系统检索位图的信息而不检索位图本身。使用该信息,您可以计算inSampleSize(某个因子来缩放它)并要求系统返回具有该比例的位图。

答案 2 :(得分:0)

这是android.refer中众所周知的问题。 http://developer.android.com/training/displaying-bitmaps/index.html