我知道有很多关于不同情况下Android中OOM的问题和论坛,但我找不到完整的解决方案。
我有一个活动,用户可以在许多动画之间滚动。因为只有动画应该在滚动时移动,并且在开始时它必须在没有用户交互的情况下移动,所以我使用了一个 ViewFlipper,里面有动画。如下图所示:
问题在于,在 3.0 以上的平板电脑和设备上,它会在翻转一些动画并播放它们后抛出 OOM。为了解决问题,我到目前为止所尝试的方法是:
BitmapFactory.Options
我使用(我按照教程Loading Large Bitmaps Efficiently tutorial )缩小了动画图像。我在教程中唯一没有实现的是缓存。- 由于动画很多,位图很多,我一次只加载了 3 个动画(当前视图,左侧一个和右侧一个),但是添加和删除位图会使应用程序的速度变慢太多。
- 我试图让垃圾收集器更快地释放我的图像,方法是手动调用所有可能有帮助的东西:
setCallback(null)
,setImageDrawable(null)
,destroy()
,destroyDrawingCache()
(AdView 的最后 2 个)。我什至尝试recycle()
过(对于位图),但它导致了其他异常
上述更改后有一些改进,但我仍然在模拟器 Android 4.x WVGA854 或 WVGA800 上收到 OOM(经过较长时间)。但即使它没有引发 OOM,内存分析显示 80% 的负载在一开始就有问题的设备上。此外,由于动画删除和添加,所有设备上的用户体验都很糟糕。
我开始认为更多的是架构/设计问题。可能是模拟器问题?您现在是否比 DDMS 的内存分析器更好?
我将非常感谢任何建议,我不知道还能尝试什么:)