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

在 Activity 代码中查找内存泄漏以释放内存使用并避免

在 Activity 代码中查找内存泄漏以释放内存使用并避免

尚方宝剑之说 2023-06-04 11:07:42
我有一个Activity带有ConstraingLayout很多ImageViews 的 a(每张卡一个)。获胜后,通过单击将出现的 ImageView,将Activity“重新加载”显示一组新的牌来玩。问题是每次获胜后,加注使用的内存Activity而不是返回初始使用量。这会导致OutOfMemory Exception某些内存不足的设备(例如 Nexus 7)。:(逻辑是:在onCreate方法中,我设置了ConstraintLayout30 ImageViews(卡片的正面)和其他 30 ImageViews(卡片的背面)对于每个ImageView(正面和背面),我OnClickListener通过缩放可绘制资源来设置和图像每次用户点击一个时ImageView,我将卡片两侧的 alpha 设置为仅显示正确的一面如果用户找到所有匹配项,将出现 win 视图:如果用户单击它,将调用 win 方法,该方法“重新加载活动”在的第一次GiocaMemory运行AndroidStudio是profiler:获胜后(第二次获胜后onCreate)使用的内存为:现在Java内存使用量为28,1 MB,而不是返回初始值25,2 MB。屏幕截图指的是具有 16 个框的布局。使用 30 盒布局,使用的内存增加了很多。(例如从 49 MB 到 83 MB)我可能会说图像的大小调整得足够多,以便使用尽可能少的内存,所以也许它们不是问题所在。如果我错了请告诉我。为什么每次赢后使用的MBJava都会增加?你能帮我找到我留在代码中的一些内存泄漏吗?我用来“重新加载”活动的方式GiocaMemory是正确的,还是有其他方式可以让我释放更多资源?我发现很难找到它们,因为我对 Android 编程还比较陌生,尤其是因为我几乎从未遇到过与内存使用过多相关的问题。
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您是否正确地放弃了 AudioManager 中的焦点侦听器?

AudioManager#abandonAudioFocus(OnAudioFocusChangeListener listener)

实际的 OOM 可能是所提到的非回收列表的结果,但这可能是内存泄漏的原因。


查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

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