直接进入家庭活动时,我正在传递意图标志FLAG_ACTIVITY_CLEAR_TOP,我仍然可以在hprof记录中看到其他活动的参考。
在hprof报告中,我可以看到大部分内存泄漏是由于以下原因: android.media.AudioManager。 或编辑文本上的SpellCheckListener
请帮我解决此内存泄漏问题。 Clear top应该已经完成了所有的活动。
如果clear top完成了活动,那么audiomanager或spellchecklistener即将进入画面。在我的代码中,我没有使用audiomanager或spellchecklistener。
答案 0 :(得分:0)
Intent intObj=new Intent(context, MainActivity.class);
intObj.putExtra("finish", true); // if you are checking for this in your other Activities
intObj.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intObj);
答案 1 :(得分:0)
这个答案不会给你一个明确的解决方案,不是因为我不愿意,而是因为它不可能(甚至更难,不仅仅是查看你的代码,而是非常了解你的代码)。但根据我的经验,我可以告诉你,由于直接引用的对象不会发生那种内存泄漏 - 你声明的对象(并继续引用另一个类/对象)依赖于许多其他类等等,并且可能你看到由于对你的任何实例的错误处理导致内存泄漏,同时引用其他实例,这就是为什么你看到一个你甚至没有声明的课程时会感到惊讶。
调试内存泄漏通常是一项非常艰苦的工作,不仅仅是因为正如我上面所述,它有时并不直接依赖于您声明的内容,而且因为找到解决方案可能并非易事。您可以做的最好的事情就是您似乎正在做的事情:DDMS + HPROF。我不知道你有多少知识,但是虽然它不是一种通用的方法,this link帮助我找到了代码中的内存泄漏。
虽然看起来微不足道,但调试这类事情的最佳方法是逐步删除代码的一部分(总体而言,意味着使用其他类的实例)并查看HPROF报告的更改方式。
答案 2 :(得分:0)
AudioManager泄漏可能有多种原因。 我的工作解决方案是使用可以找到的解决方法on github。
可在此处进一步讨论:Android Context Memory Leak ListView due to AudioManager