内存泄漏案例分享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.mzph.cn/bicheng/17118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity AR开发插件】如何快速地开发可热更的AR应用

预告 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 Unity AR开发插件使用教程 更新 二、使用插件一键安装HybridCLR和ARCore 三、配置带HybridCLR的ARCore开发环境 四、制作热更数据-AR图片识别场景

StringBufferInputStream类,你学会了吗?

在Java编程中,处理字符串数据流是一项常见的任务。 为了更灵活地处理字符串数据流,Java提供了StringBufferInputStream类,它允许将字符串转换为输入流,从而可以像处理其他输入流一样对字符串进行操作。 本文将深入探讨StringBufferInputStream类的背景、用法、优缺点以及…

RocketMQ如何保证消息不丢失

同步发送消息,那为什么还会有异步,因为异步发送效率高。 存储消息 通过配置持久化策略。 存储消息的过程,先存到内存page cache,再持久化到磁盘,默认配置是直接到内存后就返回成功了,但是如果这时候机器断电了,就会丢…

父进程等待子进程退出

一、 为什么要等待子进程退出? 等待子进程退出是为了确保父进程能够在子进程执行完毕后继续执行或者处理子进程的结果。在许多情况下,父进程需要等待子进程完成后才能继续执行,以确保正确的执行顺序和结果。 以下是一些等待子进程退出的主要…

2024年,游戏行业还值得进入吗?

来自知乎问题“2024年,游戏行业还值得进入吗?”的回答。 ——原问题描述:从超小厂执行策划做起,未来有前途吗? 展望2024年,国内外的游戏市场环境或将变得更加复杂,曾经那个水大鱼大的时代过去了…

工智能在脉搏分析中的matlab应用

人工智能(AI)在脉搏分析中的应用可以通过多种方法实现,包括使用机器学习算法对脉搏信号进行分类、预测或异常检测。MATLAB是一个强大的平台,它提供了各种工具和功能来处理和分析这样的信号。以下是一个简化的步骤,说明…

RocketMQ如何保证顺序消费

为什么会有顺序消费的需求? 业务场景需要,比如一个订单的流程,从创建到支付到发货到评价,需要按照顺序进行。 有可能会有网络波动。 topic可能分为多个queue,那queue的分配是随机的,不同queue之间的消费速…

出现 PermissionError: [Errno 13] Permission denied: ‘/Data‘ 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 执行某个项目的时候,出现如下问题 File "/home/l228/huoyanhao/pytorch-glow-master/pytorch-glow-master/misc/util.py", line 179, in create_result_subdiros.makedirs(result_subdir)File "/home/l228…

C++: 二叉搜索树及实现

目录 一、二叉搜索树的概念 二、二叉搜索树的操作 2.1插入 2.2删除 1.有左子树,无右子树 2.有右子树,无左子树 3.有左子树和右子树 三、二叉搜索树的实现 要点 前言:为了学习map和set,需要先学二叉搜索树作为铺垫。 一、…

基于51单片机的函数发生器设计

一.硬件方案 此函数信号发生器是基于单片机AT89C51设计而成的,能够产生频率范围在0Hz—535Hz的锯齿波、正弦波、三角波、矩形波四种波形,并且能够通过液晶屏1602显示各自的波形类型以及频率数值。电路主要由51单片机最小系统DA0832模数转换模块运放模块…

AI代理的类型、优势及示例

AI 代理的类型、优势和示例 AI 代理是重塑商业动态的关键技术进步。了解这些代理的运作方式,发现它们的关键优势包括效率、可扩展性和成本效益。我们将探索代理的实例及它们在各领域的应用,为未来的人工智能趋势和对客户体验的影响铺平道路。 想象一支由…

`“use strict“`在JavaScript中是什么?它背后的原理是什么?

JavaScript的严格模式(strict mode)是ECMAScript 5引入的一项特性。如果你在脚本或函数的顶部声明 use strict;,你就启用了严格模式: use strict;当JavaScript引擎看到这个指令时,它将开始以一种特殊的模式解释代码。在这种模式下,当检测到某些可能导致潜在错误的编码实…

多重继承引起的二义性问题和虚基类

多重继承容易引起的问题就是因为继承的成员同名而产生的二义性问题。 例:类A和类B中都有成员函数display和数据成员a,类C是类A和类B的直接派生类 情况一: class A {public:int a;void display(); }; class B {public:int a;void display; }; class C:…

添加AXI主IP(AXI4 Lite和AXI4)示例

添加AXI主IP(AXI4 Lite和AXI4)示例 将等效IP添加到框图中。以下是AXI Central的示例步骤 直接存储器存取(CDMA): 1.右键单击方框图中的任意位置,然后选择“添加IP”。 2.搜索并双击AXI Central Direct Memo…

Android 录音AudioRecord

AudioRecord是安卓多媒体框架中用于录制音频的工具。它支持录制原始音频数据,即PCM数据,PCM数据不能被播放器直接播放,需要编码压缩成常见音频格式才能被播放器识别。通常生成PCM文件之后可将PCM文件转成WAV文件一般的播放器便可直接播放了。…

前端开发技巧 --判断文本是否溢出

const isTextOverflower()>{if(element){return element.offsetWidth > element.scrollWidth}return false}实现javascript 判断文本是否溢出

【除了知乎,大家都在逛什么?持续更新~~】

除了知乎,大家都在逛什么? 中文博客琅琊榜 https://github.com/qianguyihao/blog-list 中文博客琅琊榜,只收录优质的中文独立博客,全网最精品。已收录博客数量:328 个博客站点。 这些博主才华横溢,满怀自由…

【2024最新】软考资料大全(免费)

IT行业越来越卷,大家都在忙着搞证,你免费不搞一个? 不管有没有用,有总比没有好噻~ 【初级】,【中级】,【高级】 都有,而且全部免费,全部最新的!真题,论文都…

Java查看线上对象的变量值

背影 有时候线上有些配置类,想查看下配置修改是否生效,传统的方法要通过打日志的方法,如果不想通过打日志的方法,有没有好的方案能解决这个问题呢 解决方案 arthas 步骤 得到类加载器的hashcode sc -d com.example.MyService…

眼底项目经验

眼底项目经验 可解释性不足问题眼底项目有多牛逼可解释性不足解法数据、算力、算法都免费送不仅预测当下,还能预测未来和慢病管理整合,形成一个实时健康检测生态 可解释性不足问题 今天下午和腾讯眼底项目人员讨论, 他们不准备做全身性的多疾种, 因为深…