內存泄漏案例分享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.pswp.cn/bicheng/17118.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17118.shtml
英文地址,請注明出處:http://en.pswp.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…

眼底項目經驗

眼底項目經驗 可解釋性不足問題眼底項目有多牛逼可解釋性不足解法數據、算力、算法都免費送不僅預測當下,還能預測未來和慢病管理整合,形成一個實時健康檢測生態 可解釋性不足問題 今天下午和騰訊眼底項目人員討論, 他們不準備做全身性的多疾種, 因為深…