Устранение утечки памяти фрагмента диалога с LeakCanary - PullRequest
1 голос
/ 02 июля 2019

У меня есть просмотр списка с просмотром текста в каждом элементе, который при нажатии запускает диалог с элементами выбора чисел для изменения значений в элементе. При проверке утечек памяти с помощью библиотеки 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

...