Я разработал небольшой API для диалоговых фрагментов на основе библиотеки поддержки Google с очень простыми требованиями:Backstack и утечка памяти
- API может добавить (или заменить) модальный диалог
- API может отклонить диалог программно или пользователь может отменить диалог, нажав кнопку
Является ли мой API созданием утечки памяти, постоянно добавляя фрагменты в стопку?
public class DialogFragmentUtils {
private static final String DIALOG_TAG = "dialogTag";
public static void showDialogFragment(@Nullable Activity activity, @NotNull Fragment fragment) {
if (activity instanceof FragmentActivity) {
FragmentActivity fragmentActivity = (FragmentActivity) activity;
FragmentManager fm = fragmentActivity.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment prev = fm.findFragmentByTag(DIALOG_TAG);
if (prev != null && prev.isAdded()) {
ft.remove(prev);
}
ft.add(fragment, DIALOG_TAG);
ft.addToBackStack(null);
ft.commit();
}
}
public static void dismissDialogFragment(@Nullable Activity activity) {
if (activity instanceof FragmentActivity) {
FragmentActivity fragmentActivity = (FragmentActivity) activity;
FragmentManager fm = fragmentActivity.getSupportFragmentManager();
DialogFragment dialog = (DialogFragment) fm.findFragmentByTag(DIALOG_TAG);
if (dialog != null) {
dialog.dismiss();
}
}
}
}
Сколько диалогов мы говорим, так как вас беспокоит утечка памяти? – Warpzit
Почему бы вам просто не проверить? Создайте несколько диалогов и отклоните их различными способами (назад/нормально). Затем запустите кучи дампа, используя Eclipse MAT, и найдите кучу для экземпляров вашего диалога. – talkol