0

我有一个包含单个 Fragment 的 Activity,并且该 Fragment 有一个 ViewPager 和一个 FragmentPagerAdapter,它分页其他 Fragment:

                                         --> 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 配置,禁用 chaching,但无济于事。我还尝试在 onDestroyView 中回收 Childfragment 的所有位图,但没有帮助。

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

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

4

3 回答 3

1

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

于 2013-11-06T07:45:09.797 回答
0

您必须知道位图需要大量内存(每个像素 4 个字节)=> 因此,如果不缩小,5MP 照片将需要 20MB。

阅读此处的开发人员指南,了解有关将位图缩小到所需大小的更多信息。

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

于 2013-11-06T07:46:38.060 回答
0

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

于 2013-11-06T07:54:57.707 回答