android – Backstack和内存泄漏

android – Backstack和内存泄漏,第1张

概述我已经开发了一个基于Google支持库的对话框片段的小API,其要求非常简单: > API可以添加(或替换)模式对话框 > API可以通过编程方式关闭对话框,或者用户可以通过按下按钮来关闭对话框 我的API是否通过不断向backstack添加片段来创建内存泄漏? public class DialogFragmentUtils {private static final String DIAL 我已经开发了一个基于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();        }    }}}
解决方法 是的,它容易出现内存不足,而不是内存泄漏.所有后台堆栈片段都使用硬引用保存在内存中.因此,如果你在后台堆栈中保留了大量的碎片,那么你将会失去记忆.

看看这里:When a Fragment is replaced and put in the back stack (or removed) does it stay in memory?

更新:我看到你的DIALOG_TAG没有改变所以你一次只在一个堆栈中保留一个片段,因为如果它存在,你删除旧的片段.在这种情况下,您可能没有内存不足的问题.

总结

以上是内存溢出为你收集整理的android – Backstack和内存泄漏全部内容,希望文章能够帮你解决android – Backstack和内存泄漏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1129918.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存