gpt4 book ai didi

android - 为什么 fragment 泄漏中的 Viewmodel 实例

转载 作者:行者123 更新时间:2023-12-01 23:29:59 24 4
gpt4 key购买 nike

我正在使用 View 模型和实时数据来观察编辑 TextView 中的变化,如下所示。当我使用 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;


}

最佳答案

在 Fragment 的 onCreateView 中使用 .observe(requireActivity(), savedTextObserver); 从来都不是正确的做法:这意味着您想使用 Activity 的生命周期进行观察,这即使您删除 Fragment 或将 Fragment 放在返回堆栈上,也会继续。

相反,您应该使用 .observe(getViewLifecycleOwner(), savedTextObserver); 来获取与 Fragment 的 View 特别关联的生命周期,这是更新您的任何观察者的正确范围Fragment 的 UI(例如您的setAdapter`)。

关于android - 为什么 fragment 泄漏中的 Viewmodel 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66432835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com