У меня есть полностью настроенный диалог для моего приложения (включая заголовок, кнопки и т. Д.). Я достиг этого, расширяя класс 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?