android - 使用 LeakCanary 解决 Dialog Fragment 内存泄漏
问题描述
我在每个项目中都有一个带有 textview 的列表视图,单击该列表视图会启动一个带有 numberpicker 元素的对话框以更改项目中的值。在使用 LeakCanary 库检查内存泄漏时,我遇到了与对话框片段相关的内存泄漏,当我反复启动和关闭对话框时会显示该内存泄漏。我也看过 Stack Overflow 上的类似帖子,但没有一个有助于解决这个问题。对话片段的实现如下:
public class NumberDialog extends DialogFragment {
NumberPicker numberPicker;
NumberPicker numberPicker2;
NumberPicker numberPicker3;
public static NumberDialog newInstance() {
NumberDialog frag = new NumberDialog ();
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View child = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);
numberPicker = child.findViewById(R.id.numberPicker1);
numberPicker2 = child.findViewById(R.id.numberPicker2);
numberPicker3 = child.findViewById(R.id.numberPicker3);
numberPicker.setMinValue(0);
numberPicker.setMaxValue(59);
numberPicker3.setMinValue(0);
numberPicker3.setMaxValue(59);
numberPicker2.setMinValue(0);
numberPicker2.setMaxValue(59);
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(getActivity(), R.style.Theme_Material_Dialog_Alert);
builder.setTitle("Choose Value");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
builder.setView(child);
return builder.create();
}
}
泄漏源的屏幕截图如下: 屏幕截图 1
解决方案
推荐阅读
- bi-publisher - 重音字符在 BI Publisher PDF 输出中未正确显示
- html - webkit css resize 不适用于儿童画布?
- excel - 使用 VBA 从 Excel 构建电子邮件,当地址重复时结合电子邮件正文
- java - 如何将数字的二进制截断为前 5 个二进制数字
- android - 有没有办法让 WebView 识别用户选择文本的项目?
- mysql - 未处理的拒绝 SequelizeDatabaseError: 未选择数据库
- alexa - Alexa 技能 - 如何使用数字调用 Alexa 意图技能
- javascript - 我的模式的关闭按钮不起作用
- prometheus - 计算移动时间窗口中连续点之间百分比下降的发生次数
- javascript - 为什么我的带有 if 语句的 while 循环不能正常工作?