当前位置: 首页 > news >正文

内存泄漏案例分享2-Fragment的内存泄漏

案例2——hprof文件显示出Fragment内存泄漏

接下来我们来看fragment内存泄漏,老规矩查看fields和references,确保它符合内存泄漏的情形;我们点击jump to source查看泄漏的位置

在这里插入图片描述

Fragment#MZBannerView#内部类Runnbale

/*** Banner 切换时间间隔*/
private int mDelayedTime = 5000;
private final Runnable mLoopRunnable = new Runnable() {@Overridepublic void run() {if (mIsAutoPlay) {mCurrentItem = mViewPager.getCurrentItem();mCurrentItem++;if (mCurrentItem > mAdapter.getCount() - 1) {mCurrentItem = 0;mViewPager.setCurrentItem(mCurrentItem, false);mHandler.postDelayed(this, mDelayedTime);} else {mViewPager.setCurrentItem(mCurrentItem);mHandler.postDelayed(this, mDelayedTime);}} else {mHandler.postDelayed(this, mDelayedTime);}}};

可以看到Fragment内存泄漏的第一个原因,内部类runnable持有了view的实例,每个Runnbale会发送一个延时5秒的消息,消息发送期间,有可能view、fragment已经结束了生命周期,此时产生了内存泄漏。
解决办法也很简单,view离开窗口的时候,释放Handler中消息,释放Runnbale对view 的引用。

  1. 静态Runnbale内部类+对view的弱引用(此部分代码与前面的示例很相似,不重复贴代码了)
  2. 离开窗口remove#handler消息
    view对Activity暴露了pause方法,在Activity销毁时,强制清空handler的任务;
// view代码
/*** 停止轮播*/public void pause() {mIsAutoPlay = false;mHandler.removeCallbacks(mLoopRunnable);mBannerPageClickListener = null;}
// Activity代码:@Overridepublic void onDestroy() {super.onDestroy();dataBing.homeBanner.pause();}
http://www.lryc.cn/news/354993.html

相关文章:

  • Selenium的百度高级搜索-自动化(未完成)
  • cs与msf权限传递,以及mimikatz抓取win2012明文密码
  • java欢迪迈手机商城设计与实现源码(springboot+vue+mysql)
  • 【FPGA】Verilog:2-bit 二进制比较器的实现(2-bit binary comparator)
  • RPA(机器人流程自动化)技术解读
  • Qt | QTabBar 类(选项卡栏)
  • 基于Pytorch框架的深度学习ShufflenetV2神经网络十七种猴子动物识别分类系统源码
  • Leetcode260
  • Webpack性能调优:从加载器到插件的全面优化
  • cin-getline缓存区
  • 牛客前端面试高频八股总结(1)(附文档)
  • 韦专家:广告投放方式和内容运营底层方法论逻辑上有什么关系?
  • 003 ++ --
  • DDR、LPDDR和GDDR的区别
  • 【附代码】@hydra.main 没有返回值,如何解决函数返回?
  • js深入理解对象的 属性(properties)的特殊 特性(attributes)
  • 【MATLAB】去除趋势项(解决频谱图大部分为零的问题)
  • jmeter发送webserver请求和上传请求
  • 如何看centos 有没有安装x11
  • 超详细的前后端实战项目(Spring系列加上vue3)前后端篇(四)(一步步实现+源码)
  • 决策树|随机森林 GBDT XGBoost|集成学习
  • 【C语言实现TCP通信】
  • 黑马点评-短信登录
  • CentOS7 部署单机版 elasticsearch
  • Mujoco仿真【xml文件的学习 4】
  • vue数据持久化仓库
  • OrangePi AIpro评测 - 基础操作篇
  • 不含一阶导数项的线性二阶微分方程的通解
  • Redis篇 String
  • 【vue-2】v-on、v-show、v-if及按键修饰符