Проблемы с памятью с настроенными диалогами - PullRequest
2 голосов
/ 12 января 2012

У меня есть полностью настроенный диалог для моего приложения (включая заголовок, кнопки и т. Д.). Я достиг этого, расширяя класс Dialog, и он отображается и работает должным образом, но он теряет всю память, которую он потребляет при создании.

Это ядро ​​этого:

public class MyDialog extends Dialog {
    public MyDialog(Context context, String title) {
        super(context, R.style.MyDialog);
        setContentView(R.layout.my_dialog);
    }   
}

и я создаю его экземпляр таким образом, в Activty:

MyDialog dialog = new MyDialog(this);
dialog.show

Это действительно странно, что вам приходится передавать ссылку на Activity вместо Context, когда это что-то крайне нежелательно, по словам инженеров Android:

http://android -developers.blogspot.com / 2009/01 / избегая-памяти leaks.html

Я пытался отменить обратные вызовы диалогового окна до System.gc () следующим образом:

private void unbindDrawables(View view) {
    if (view.getBackground() != null) {
        view.getBackground().setCallback(null); 
    }
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            unbindDrawables(((ViewGroup) view).getChildAt(i));
        }
        ((ViewGroup) view).removeAllViews();
    }
}


 ...

 unbindDrawables(dialog.findViewById(R.id.dialog_container));

Это имеет некоторый эффект, часть памяти освобождается, но не все.

Недавно у меня также были проблемы с памятью при настройке строк для ListView, и я думаю, что они связаны между собой.

Я что-то упустил? Я совершаю ужасную ошибку? или это что-то обычное на Android?

1 Ответ

0 голосов
/ 12 января 2012

Попробуйте вызвать recycle() метод в вашем методе unbindDrawables.

И почему вы не передаете контекст приложения вместо активности конструктору MyDialog?Таким образом:

MyDialog dialog = new MyDialog(getApplicationContext());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...