У меня есть просмотр списка с просмотром текста в каждом элементе, который при нажатии запускает диалог с элементами выбора чисел для изменения значений в элементе. При проверке утечек памяти с помощью библиотеки LeakCanary я натолкнулся на эту утечку памяти, связанную с фрагментами диалогов, которая появляется при повторном запуске и закрытии диалогов. Я также просмотрел похожие посты о переполнении стека, но ни один из них не помог решить проблему. Реализация фрагмента диалога выглядит следующим образом:
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
Скриншот 2