在DialogFragment的onCreateView()内部膨胀视图会导致内存泄漏

时间:2014-07-02 21:32:52

标签: android listview view memory-leaks android-dialogfragment

我的程序中有内存泄漏。我有一个ListView,其每个项目都有一个Button,当用户按下它时,我希望我的程序显示DialogFragmentEditText个字段和一个{{ 1}}将对来自这些字段的数据以及启动对话框的项执行某些操作。因此,每次打开和关闭该对话框时,我的应用程序的内存消耗都会增加,经过多次重新打开后,它达到~150 MB的RAM然后应用程序冻结(没有Button错误或崩溃,只是冻结和减速整个操作系统只显示几MB的空闲RAM。

经过一些测试后,我发现泄漏是由于某种原因,由OOM行引起的(我在代码中用注释标记了这一点)。如果我“评论”这一行,泄漏就会消失,我的应用程序的RAM消耗在重新打开后不再增加。所以,我希望你能帮我找到问题,为什么这一行(或者其他东西)会导致内存泄漏,因为我的知识不足以找到明确的解释和解决这个问题的方法。关闭对话框后,View v = inflater.inflate(R.layout.fragment_flag_dialog, container, false);应该被垃圾收集,但由于某种原因,它不是。

下面是我的代码,顺便说一下,我实例化并使用下面提供的View以及我BaseAdapter内的另一个PopupListAdapter pListAdapter = new PopupListAdapter(getActivity(), someArrayList, someString); listView.setAdapter(pListAdapter);的以下代码Fragment并持有Activity。请不要注意班级名称ListView。在这种情况下我没有在弹出窗口中使用它,我在普通的PopupListAdapter中使用它,我只是设计它在其他地方的弹出窗口中使用并在这里重复使用它,因为它完全匹配情况。 / p>

Activity

1 个答案:

答案 0 :(得分:0)

自从我看到这个问题以来已经有一段时间了,但我记下了#34;陷阱"这是其中一个可能需要很长时间才能调试的。

将dialogFragment放在其自己的类中或声明它不是静态的应修复内存泄漏。

抱歉,我不能'提供链接,但尝试一下,让其他人知道这个解决方案是否有帮助。

编辑:

public static class FlagDialogFragment extends DialogFragment {
        private String commentId;
        private String number;
        private View testView;

并在你的onCreateView

里面
testView = inflater.inflate(R.layout.fragment_flag_dialog, container, false);

然后在onDestroyView()

   testView = null;

让我知道这是如何运作的?