gpt4 book ai didi

android - 如何为内存泄漏问题完全销毁对话 fragment ?

转载 作者:行者123 更新时间:2023-12-05 06:19:11 26 4
gpt4 key购买 nike

我有一个空的对话框 fragment 。为了获取内存泄漏问题,我将 LeakCanary 库添加到我的应用程序中。使用此命令打开对话框 fragment 时:

DialogFragment fragment = TabsFragment.newInstance();
fragment.setStyle(DialogFragment.STYLE_NO_FRAME, R.style.DialogFragments);
fragment.show(getSupportFragmentManager(), "MyFragment");

然后关闭它,LeakCanary 告诉我这个错误:

ScreenShot

我尝试在 OnCreate 方法中添加 setRetainInstance 并在 onDestroyView 中添加 view = null。但是内存泄漏错误仍然显示。

这是我的 fragment :

public class TabsFragment extends DialogFragment {

private View view;

public static TabsFragment newInstance() {
return new TabsFragment();
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}

@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.my_fragment, container, false);
return view;
}

@Override
public void onDestroyView() {
super.onDestroyView();
dismiss();
view = null;
}
}

如何解决这个问题?

最佳答案

你可以这样打开对话框:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.add(TabsFragment.newInstance(), "Fragment");
ft.addToBackStack(null);
ft.commit();

然后在对话框 fragment 的 onDismiss 方法中,编写以下代码:

FragmentManager fragmentManager = getChildFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (fragmentManager.getBackStackEntryCount() > 0)
fragmentManager.popBackStack();
fragmentTransaction.commit();

关于android - 如何为内存泄漏问题完全销毁对话 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60918546/

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