膨胀布局

时间:2015-05-12 07:56:43

标签: android android-fragments imageview out-of-memory inflate-exception

我的应用程序因膨胀异常导致内存异常随机出现。

我有7个片段(难度)活动,通过按钮启动自己的活动。每个片段都有一个带有30个按钮(级别)的滚动视图。 我已将其设置为可以滑动到每个片段,片段占据整个屏幕。

有时候,当我滑动几次,然后从一组30中选择一个随机按钮时,它会崩溃。它尝试加载活动,并在随机行上发生膨胀异常时给出内存不足异常。该行始终位于xml文件中的imageView或imageButton上。加载的活动是imageViews和imageButtons的网格。

我没有多少例外,但这是我想解决的问题。虽然没有人帮我,但我已经查看了许多其他内存异常的问题。我做了一个内存分析器测试,它没有显示任何异常。

我相信imageViews和imageButtons使用了太多内存,尽管我一次只打开一个活动。

3 个答案:

答案 0 :(得分:2)

这是因为你的图像正在加载。当您加载图像并在页面中移动并查看另一个图像时,堆会增加。随着您继续查看随机图像的过程,堆会增长甚至更多,直到您的应用程序崩溃。这就像在玻璃桌上堆放书籍。您可以移动(缓存)书籍(图像)或玻璃(应用程序)中断。您应该使用图像加载器来加载图像。

https://github.com/nostra13/Android-Universal-Image-Loader

答案 1 :(得分:1)

你提到它总是落在ImageView和ImageButton上 - 这是解决这个问题的线索。你得到OOM'因为这个视图的后台资源具有高分辨率并占用大量内存。尝试降低此图像的分辨率。

你也提到过你有一个ScrollView,这意味着每30个项目就会保留在内存中。可能你最好把它改成适配器支持的RecyclerView。

答案 2 :(得分:0)

遇到同样的问题,我想简化这里所说的所有事情:

简单地说:缩小图片尺寸。

不要使用1080X1920图像......它的分辨率太高了。

这样的图像,即使是压缩的,在部署时也会捕获大约1080X1920X4B = 8.2MB(GPU必须将其部署到它的完整原始分辨率......这就是为什么压缩无助于减少所需的内存大小...... )和我正在谈论的这个RAM ......

拿Gimp或Photoshop缩小图像,比如1/4:540X960,你就不会感觉到差异了。相信我,已经到过那里了。

注意图像和视频的内存消耗。

希望这有帮助,

詹姆斯