【发布时间】:2013-07-20 15:02:40
【问题描述】:
我基于 Google 支持库开发了一个用于对话框片段的小型 API,要求非常简单:
- API 可以添加(或替换)模式对话框
- API 可以通过编程方式关闭对话框,或者用户可以通过按下按钮关闭对话框
我的 API 是否会因为不断地向 backstack 添加片段而造成内存泄漏?
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();
}
}
}
}
【问题讨论】:
-
由于您担心内存泄漏,我们讨论了多少对话框?
-
你为什么不检查一下?创建多个对话框并以各种方式关闭它们(返回/确定)。然后使用 Eclipse MAT 运行堆转储并在堆中搜索对话框的实例。