我已經開發了基於谷歌支持庫有非常簡單的要求,對話的片段一個很小的API:返回堆棧和內存泄漏
- 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
爲什麼你不檢查?創建幾個對話框並以各種方式關閉它們(返回/ ok)。然後使用Eclipse MAT運行堆轉儲,並在堆中搜索對話框的實例。 – talkol