我有一个包含单个片段的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的所有位图,没有帮助。
我的嵌套片段设置是否与此问题有关?在另一个应用程序中,我只有一个带有Viewpager和Childfragments的Activity(没有中间片段),我没有这个问题。
我在Eclipses DDMS视图中检查了堆大小,当应用程序仍有45%的堆大小可用时,应用程序如何崩溃?
堆视图说:Heap size 10 MB Allocated 5,4 MB Free 4,5 MB
该应用程序如何能够内存不足?
答案 0 :(得分:1)
首先,您应该使用FragmentStatePagerAdapter。它可用于许多片段,并在您在它们之间滑动时处理保存/恢复状态。
答案 1 :(得分:0)
您必须知道位图需要大量内存(每个像素需要4个字节)=>所以500万张照片如果没有缩小就需要20MB。
阅读开发人员指南here,详细了解如何将位图缩小到所需的大小。
简而言之,您要求系统检索位图的信息而不检索位图本身。使用该信息,您可以计算inSampleSize(某个因子来缩放它)并要求系统返回具有该比例的位图。
答案 2 :(得分:0)
这是android.refer中众所周知的问题。 http://developer.android.com/training/displaying-bitmaps/index.html