为什么 Fragment 中的 Viewmodel 实例会泄漏

2023-12-14

我正在使用视图模型和实时数据来观察编辑文本视图中的变化,如下所示。当我使用leakcanar运行应用程序时,它向我显示内存泄漏:Mainactivity.fragviewmodel泄漏。

FragViewModel model;

@Override
public View onCreateView(@NotNull LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    model = new ViewModelProvider(requireActivity()).get(FragViewModel.class);

    final Observer<String> savedTextObserver = newName -> {
        list = MainActivity.quotesDatabaseClass.quoteDao().getQuotes();
        adapter.setData(list);
    };
    model.getTextToSave().observe(requireActivity(), savedTextObserver);
}

@Override
public void onDestroyView() {
    super.onDestroyView();

    fragmentEmojiBinding = null;
    model = null;


}

Using .observe(requireActivity(), savedTextObserver);在一个片段中onCreateView从来都不是正确的事情:这就是说您想要使用 Activity 的生命周期进行观察,即使您删除 Fragment 或将 Fragment 放在返回堆栈上,该生命周期也会继续。

相反,你应该使用.observe(getViewLifecycleOwner(),保存的文本观察者); to get the Lifecycle specifically associated with the Fragment's view, which is the correct scope for any Observer that updates your Fragment's UI (such as your设置适配器`)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Fragment 中的 Viewmodel 实例会泄漏 的相关文章

随机推荐

  • 如何将数组中的值添加到其前后的值

    我试图将数字数组转换为非零整数元素值的步骤 即 spread 0 0 n 0 0 returns gt 0 n 2 0 n 1 n 0 n 1 0 n 2 spread 0 0 0 n 0 2 returns gt 0 n 3 0 n 2
  • 针对性能不佳的 Lint 警告 - 80+ 次观看

    我收到此 lint 警告错误 highscores xml has more than 80 views bad for performance 这是我的高分表 有 15 行 3 列 这是我的应用程序的 Lite 版本 我的付费版本将容纳
  • 启动错误:java.lang.InknownClassChangeError:org/apache/struts2/convention/DefaultClassFinder$InfoBuildingVisitor

    我有一个 Struts2 应用程序 最初是基于 XML 的 但现在我第一次引入了基于注释的操作 并且该应用程序在启动时崩溃了 鉴于以下操作映射 在应用程序启动时 我收到错误 java lang InstantiationError com
  • python 字典 keyError

    python 新手 看起来像是简单可行的代码片段KeyError patt list jkasb dict for i in patt dict i 1 if dict i is None else dict i 1 This line t
  • 没有 StreamReader 构造函数接受字符串

    我正在将 NET 4 6 1 控制台应用程序移植到 NET Core 我安装了 NETStandard Library 1 6 但它不允许我将文件路径字符串传递到 StreamReader 构造函数中 查看定义确认它不可用 它去哪儿了 这是
  • 在Python中使用静态地址和偏移量从进程读取内存地址

    我正在尝试在 Python 中读取另一个进程的内存 并且我有程序的静态地址和所有偏移量 我正在使用win32api去做这个 我已经可以使用没有偏移量的地址读取进程的内存 但我不知道如何使用偏移量 我已经尝试过该脚本这个答案但它返回 1 我已
  • 使用 python 和 numpy 进行二维卷积

    我正在尝试使用 numpy 在 python 中执行二维卷积 我有一个二维数组 如下所示 内核 H r 代表行 H c 代表列 data np zeros nr nc dtype np float32 fill array with som
  • 如何在foreach迭代中修改多维数组的子元素

    我试图修改多维数组的每个数组元素中第一个子元素的内容 但是 如果我通过引用传递所述元素 则会收到错误消息 不是预期的 我是否需要放弃 foreach arr as list 语法并恢复到标准 for 循环并使用计数器变量进行访问 forea
  • 谷歌街景标题问题

    我正在从事一个项目 我需要显示走向道路的谷歌地图街景 我为全景对象设置了标题 0 但对于不同的位置 它显示的标题不同 例如 在某些情况下 它显示前往街道 而对于某些位置 它显示前往家 panorama theMap getStreetVie
  • 协助UI Dispatcher处理大量的方法调用

    以下帖子已成为bit 比预期更长 我对此表示歉意 但也许你会发现阅读起来很有趣 也许你有一个想法可以帮助我 我正在开发一个小型应用程序 其 GUI 由许多列表控件组成 每个列表控件都有一个thread与之相关的是永久生产正在添加到列表中的字
  • Android:SlidingDrawer的高度可以用wrap_content设置吗?

    我正在尝试实施一个SlidingDrawer将占据整个屏幕宽度 但其高度由其内容动态确定 换句话说 标准fill parent宽度和布局行为wrap content对于高度 这正是我在布局 XML 中指定的方式 见下文 但滑动抽屉始终打开到
  • 无法在 VBA (Excel) 中迭代哈希表

    我正在使用哈希表 引用 mscorlib dll 我用数据填充它 我可以获取任何项目 只要我将请求类型转换为与哈希表中存储的类型完全相同的类型 ContainsValue Key 所有这些都有效 但我无法通过 For Each 循环迭代它
  • 使用 Cython 将 malloc 缓冲区从 C 转换为 Python,而不进行复制?

    在 Cython 中 假设我有一个 C 函数 它返回一个使用 malloc 分配的大缓冲区 并预计稍后使用 free 释放 现在我需要将此缓冲区作为 字节 str 对象传递给 Python 它将获得它的所有权 并在 str 对象消失时调用
  • 检查字符串数组中的整数

    我正在尝试检查字符串数组是否存在转换后的整数 这位于一个过程中 其中 nc ecosite is an integer多变的 current consite是一个字符串数组 ecosite is an integer current eco
  • 如何用java模拟真实的鼠标点击?

    我正在尝试在 Java 中执行鼠标单击 以单击外部程序中的某些内容 为此 我正在使用java awt robot 以及以下代码 Robot bot new Robot int mask InputEvent MOUSE BUTTON1 DO
  • Delphi Android - 检测设备方向变化

    Delphi Android 开发新手 如何检测屏幕方向已更改 即从肖像到风景 反之亦然 发生这种情况时如何触发代码 例如 我有一个图像尺寸为 300x200 在纵向模式下 但当设备切换到横向时 我希望它调整并占据全屏宽度 在你的表单中实现
  • 如何降低 RealityKit 中阴影的不透明度?

    我在 Reality Composer 中构建了一个场景 并在其中添加了 3 个对象 问题是阴影太强烈 黑暗 我尝试使用 RealityKit 中的定向光this答案而不是 Reality Composer 中的默认灯光 因为您没有调整其中
  • 将所有链接与特定文本匹配

    我正在寻找 PHP 中的正则表达式 它将锚点与其上的特定文本相匹配 例如 我想获得带有文本 mylink 的锚点 例如 a href blabla mylink a 所以它应该匹配所有锚点 但前提是它们包含特定文本所以它应该匹配这些字符串
  • 仅删除唯一元素

    有很多关于如何删除重复项和类似问题的资源 但我似乎无法找到任何有关删除唯一元素的资源 我正在使用 SWI Prolog 但我不想使用内置程序来实现此目的 也就是说 调用remove unique 1 2 2 3 4 5 7 6 7 X 应该
  • 为什么 Fragment 中的 Viewmodel 实例会泄漏

    我正在使用视图模型和实时数据来观察编辑文本视图中的变化 如下所示 当我使用leakcanar运行应用程序时 它向我显示内存泄漏 Mainactivity fragviewmodel泄漏 FragViewModel model Overrid