fragment内存泄漏

weixin_42573988 2019-11-14 11:22:58
public void replaceFragment(Fragment fragment) {
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.container, fragment);
ft.commit();
}

R.id.container是一个FrameLayout,用来放fragment,我快速点击几个按钮替换fragment会引起内存泄漏。
具体看下图:



fragment 我只是简单在上面放一些控件,具体类里面我连findViewById都还进行。但是就是会出错。
replaceFragment的调用,我每次都是new一个新的对应fragment。

麻烦大佬指点一下。
...全文
497 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
NO Exception? 2019-11-15
  • 打赏
  • 举报
回复
引用 11 楼 weixin_42573988的回复:
[quote=引用 10 楼 泰山123 的回复:] 你用replace性能才不高呢
几十个fragment都一起add,太疯狂了。[/quote] 你可以用谁加谁啊,fragment是轻量级的
王能 2019-11-15
  • 打赏
  • 举报
回复
看泄漏提示是软件盘相关的问题,你可以返回上一个页面再看看会不会有泄漏提示 理论上返回后就不会提示了
weixin_42573988 2019-11-15
  • 打赏
  • 举报
回复
引用 10 楼 泰山123 的回复:
你用replace性能才不高呢
几十个fragment都一起add,太疯狂了。
NO Exception? 2019-11-14
  • 打赏
  • 举报
回复
引用 1 楼 泰山123的回复:
不要每次都replace啊
repalce等于add remove
NO Exception? 2019-11-14
  • 打赏
  • 举报
回复
不要每次都replace啊
NO Exception? 2019-11-14
  • 打赏
  • 举报
回复
你用replace性能才不高呢
NO Exception? 2019-11-14
  • 打赏
  • 举报
回复
引用 4 楼 weixin_42573988的回复:
[quote=引用 1 楼 泰山123 的回复:] 不要每次都replace啊
引用 2 楼 泰山123 的回复:
[quote=引用 1 楼 泰山123的回复:]不要每次都replace啊
repalce等于add remove[/quote] 问题是我的框架是下面有一排按钮,很多,没点一个上面的区域就要显示对应的fragment,如果我不用replace的方式,释放原理的,那么最后有可能就相当于所有fragment多存在,这样很耗内存。[/quote] 用add然后显示show
weixin_42573988 2019-11-14
  • 打赏
  • 举报
回复
好像是EditText引起的,只要fragment上面放了EditText就会。
weixin_42573988 2019-11-14
  • 打赏
  • 举报
回复
引用 6 楼 小林子(yhl) 的回复:
我觉得如果是Viewpager+Fragment的话,你的问题出现在Adapter的getItem()上,至于其他我也不清楚你如何编写的代码。可以参考https://blog.csdn.net/qq_32536991/article/details/88837924
没用Viewpager
小林子(yhl) 2019-11-14
  • 打赏
  • 举报
回复
我觉得如果是Viewpager+Fragment的话,你的问题出现在Adapter的getItem()上,至于其他我也不清楚你如何编写的代码。可以参考https://blog.csdn.net/qq_32536991/article/details/88837924
weixin_42573988 2019-11-14
  • 打赏
  • 举报
回复
引用 3 楼 小林子(yhl) 的回复:
private boolean isFirstLoad = false;//初始化为false @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isFirstLoad && isVisibleToUser) { isFirstLoad = false; } } 避免重复加载就可以
我的fragment没初始化,就一个空壳。就onCreateView时用inflate创建view,然后就啥都不敢。
weixin_42573988 2019-11-14
  • 打赏
  • 举报
回复
引用 1 楼 泰山123 的回复:
不要每次都replace啊
引用 2 楼 泰山123 的回复:
[quote=引用 1 楼 泰山123的回复:]不要每次都replace啊
repalce等于add remove[/quote] 问题是我的框架是下面有一排按钮,很多,没点一个上面的区域就要显示对应的fragment,如果我不用replace的方式,释放原理的,那么最后有可能就相当于所有fragment多存在,这样很耗内存。
小林子(yhl) 2019-11-14
  • 打赏
  • 举报
回复
private boolean isFirstLoad = false;//初始化为false @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isFirstLoad && isVisibleToUser) { isFirstLoad = false; } } 避免重复加载就可以

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧