为了账号安全,请及时绑定邮箱和手机立即绑定

Android应用程序内存不足问题 - 尝试了一切但仍然不知所措

Android应用程序内存不足问题 - 尝试了一切但仍然不知所措

12345678_0001 2019-08-06 13:24:25
Android应用程序内存不足问题 - 尝试了一切但仍然不知所措我花了整整4天时间尽我所能来弄清楚我正在开发的应用程序中的内存泄漏,但事情很久以前就停止了。我正在开发的应用程序具有社交性,因此请考虑配置文件活动(P)并列出包含数据的活动 - 例如徽章(B)。您可以从配置文件跳转到徽章列表到其他配置文件,到其他列表等。所以想象一下这样的流程P1 - > B1 - > P2 - > B2 - > P3 - > B3等。为了保持一致性,我正在加载同一个用户的配置文件和徽章,所以每个P页面是相同的,所以是每个B页面。这个问题的一般要点是:在导航了一下之后,根据每个页面的大小,我在随机位置得到了一个内存不足的例外 - 位图,字符串等 - 它似乎并不一致。在做了一切可以想象的事情来弄清楚为什么我的内存不足之后,我什么也没想出来。我不明白的是,如果Android在加载时耗尽内存而不是崩溃,那么为什么Android不会杀死P1,B1等。如果我通过onCreate()和onRestoreInstanceState()返回它们,我会期望这些早期活动会死亡并复活。更别说这个 - 即使我做P1 - > B1 - >返回 - > B1 - >返回 - > B1,我仍然会崩溃。这表明某种内存泄漏,即使在转储hprof并使用MAT和JProfiler后,我也无法查明它。我已禁用从Web加载图像(并增加了加载的测试数据以弥补它并使测试公平)并确保图像缓存使用SoftReferences。Android实际上试图释放它所拥有的一些SoftReferences,但就在它崩溃内存之前。徽章页面从Web获取数据,从BaseAdapter将其加载到EntityData数组中并将其提供给ListView(我实际上使用的是CommonsWare的优秀MergeAdapter,但在此Badge活动中,实际上只有1个适配器,但我无论哪种方式都想提到这个事实)。我已经完成了代码并且无法找到任何可能泄漏的内容。我清除并取消了我能找到的所有内容,甚至是System.gc()左右,但应用程序崩溃了。我仍然不明白为什么堆栈上的非活动活动不会被收获,我真的很想知道这一点。在这一点上,我正在寻找任何提示,建议,解决方案......任何有用的东西。谢谢。
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

你是否对每个活动都有一些参考?AFAIK这是让Android不能从堆栈中删除活动的原因。

我们也能在其他设备上重现此错误吗?我遇到了一些Android设备的奇怪行为,具体取决于ROM和/或硬件制造商。


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 649 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信