LeakCanary使用

Android LeakCanary的使用和原理 通过监听Activity的onDestory,手动调用GC,然后通过ReferenceQueue+WeakReference,来判断Activity对象是否被回收,然后结合dump Heap的hpof文件,通过Haha开源库分析泄露的位置。 阅读详情

一·概述

首先说一下内存泄露有什么影响:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

二.使用

下面看看如何使用leakcanary

首先在gradle文件中引入相关库

 releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'

然后在全局Application中进行配置

public class MyApplication extends Application {

    private RefWatcher mRefWatcher;
    @Override
    public void onCreate() {
        super.onCreate();
        mRefWatcher = LeakCanary.install(this);
    }
    public static RefWatcher getRefWatcher(Context context){
        MyApplication mApp = (MyApplication) context.getApplicationContext();
        return mApp.mRefWatcher;
    }
}

使用RefWatcher观察Fragment的内存泄露

public abstract class BaseFragment extends Fragment {

  @Override public void onDestroy() {
    super.onDestroy();
    RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity());
    refWatcher.watch(this);
  }
}

上传至服务器

public class LeakUploadService extends DisplayLeakService{
    @Override
    protected void afterDefaultHandling(HeapDump heapDump, AnalysisResult result, String leakInfo) {
        super.afterDefaultHandling(heapDump, result, leakInfo);
        if(!result.leakFound||result.excludedLeak){
            return;
        }
        //然后上传我们的文件
        UploadUtil.uploadFile(heapDump.heapDumpFile,"服务器地址");
    }
}

在正式发布的应用中使RefWatcher失效

mRefWatcher = RefWatcher.DISABLED;

三.实例

下面我们用leakcanary来检测一下内存泄漏,看看到底行不行
代码如下

public class MainActivity extends AppCompatActivity {
    private TextView textViewShowMessage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void click(View view){
        Toast.makeText(this, "启动", Toast.LENGTH_SHORT).show();
        new Thread(){
            @Override
            public void run() {
                super.run();
                SystemClock.sleep(10000);
            }
        }.start();
    }
}

当我们让线程运行起来以后,然后旋转屏幕,很明显上面的代码会产生内存泄露,因为Activity虽然销毁了,但是Thread类持有外部类的引用,产生了内存泄漏。

这时候通知栏会出现一个提示,
这里写图片描述

我们点开通知

这里写图片描述

可以看到泄露信息。这就是leakcanary的使用,总结一下,功能强大,使用简单

最后给出Demo下载地址
Leakcanary使用Demo

LeakCanary使用步骤 工具特点LeakCanary自动检测、快速定位、界面友好实时监控内存分配,可导出.hprof文件。 阅读详情

相关推荐

【PB03F 超详细-环境搭建】蓝牙5.2安信可PB-03F-Kit开发板二次开发环境搭建

PB-03是由深圳市安信可科技有限公司开发的蓝牙模块。本博文介绍安信可PB-03F-Kit开发板的基本情况、开发环境搭建,以及以点亮LED为例介绍程序编写和固件烧录的操作流程。 安信可PB-03F-Kit开发板使用的PHY6252这样一款高集成度的低功耗蓝牙系统级芯片(SoC),专为物联网(IoT)、移动设备、可穿戴电子设备、智能家居等各种应用而设计。......

qq_44078824的博客 1万+

iOS内存管理

转自:http://zhidao.baidu.com/question/401056405.html iOS平台的内存使用引用计数的机制,并且引入了半自动释放机制;这种使用上的多样性,导致开发者在内存使用上非常容易出现内存泄漏和内存莫名的增 长情况; 本文会介绍iOS平台的内存使用原则与使用陷阱; 深度剖析autorelease机制;低内存报警后的处理流程;并结合自身实例介绍内存暴增的问

leaf8742的专栏 676

25个Prompt去除AI味,让AI写作更像真人

自然语言生成技术飞速发展,如今AI写作已经深度融入内容创作、营销运营和日常办公。但许多用户发现,AI生成的文本常常带着一股“AI味”——句子过于工整、过度总结、细节空洞,导致内容被一眼识破,甚至面临“AI率”过高的尴尬。其实,这种塑料感源于大模型的训练数据与对齐机制,它偏好生成结构完整、逻辑平滑的“安全文本”。要解决这一问题,核心不在于更换工具或复杂调参,而在于掌握提示词工程的底层逻辑:通过限制结构、注入细节、切换视角、打乱顺序等具体指令,引导模型生成更接近人类表达习惯的文本。本文基于实战经验,提供25个可

weixin_26824299的博客 260

LeakCanary的简单介绍及使用

利用ContentProvider进行初始化注册 5 种 Android 泄漏场景的监控Activity是利用application.registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback)监听全局Activity生命周期Fragment首先是通过接口监听 Activity.onCreate()事件,再通过接口监听 Fragment 的生命周期ViewModel是通过Hook。

缘来的精彩的博客 3386

告别付费!手把手教你用DataV.GeoAtlas获取全国街道级GeoJSON数据(附完整避坑指南)

本文详细介绍了如何免费使用阿里云DataV.GeoAtlas工具获取全国街道级GeoJSON数据。通过可视化选取、格式转换、数据校验等步骤,提供了一套完整的避坑指南和工作流,帮助前端和可视化开发者高效解决高精度地图数据获取难题,节省成本并提升开发效率。

weixin_29085865的博客 901

Ubuntu24.04/20.04设置网络共享文件夹

Ubuntu20.04利用向日葵远程控制时,不能传输文件。使用linux版本QQ来传输是可以的,不过linuxqq功能真的很弱。因此,打算在Ubuntu系统中建立一个共享文件夹,可在局域网中访问。 1、新建共享文件夹 获取root权限,或者登陆root账户。可在/home文件夹(或其它文件夹)下新建一个文件夹,如share。 右击文件夹,选择“本地网络共享”菜单。按下图设置。 点击确定。如果系统已经安装了samba服务器,就可以进入第3步。如果没有,会提示安装,按提示安装,可能会出错,可进.

willhu2008的专栏 2万+

Android内存优化检测工具LeakCanary使用

Android内存优化检测工具LeakCanary使用方法总结

Crazy程序猿 5395

笔试题-2023-星宸-数字IC设计【纯净题目版】

4 笔试题-2023-星宸-数字IC设计【纯净题目版】

w0shishabi的博客 1172

Android性能优化之利用LeakCanary检测内存泄漏及解决办法

LeakCanary

QG 1585

Python 爬虫实战:抓取百科网站上某个词条的详细信息

百科网站(如维基百科)为用户提供了丰富的知识内容,涵盖了从历史、文化到科技等几乎所有领域的知识。对于需要大量数据进行分析、研究或机器学习项目的开发者而言,抓取这些网站的数据显得尤为重要。通过编写一个 Python 爬虫,我们能够轻松地抓取百科网站上的某个词条及其详细信息,从而获取并整理这些知识内容。本篇博客将深入介绍如何通过 Python 编写爬虫来抓取百科网站(如维基百科)的某个词条的详细信息,包括标题、正文内容、参考文献等。requests:发送 HTTP 请求,获取页面内容。

2201_76125261的博客 1671

2、OTA/gm - C滤波器的架构与设计

本文深入探讨了OTA/gm-C滤波器的两种主要设计方法:基于LC梯形网络的设计与多环反馈(MLF)结构。前者包括元件替代法和信号模拟法,分别通过电感替代或电路方程模拟实现低敏感度滤波器;后者通过积分器级联与反馈网络合成全极点或含任意传输零点的传递函数。文中详细分析了不同结构如IFLF和LF的反馈矩阵、传递函数及性能差异,指出LF结构在敏感度、噪声和整体性能上的优势。同时比较了各类方法的优缺点及适用场景,为高频连续时间集成电路滤波器的设计提供了系统性指导。

fanta的博客 137

如何看 leakcanary 的 错误信息并解决

转载:https://www.cnblogs.com/whoislcj/p/6001422.html https://www.jianshu.com/p/1e7e9b576391 内存泄漏是不使用或用完的内存,因为某些原因无法回收,造成的一种内存浪费;内存泄漏的本质是内存浪费。以个人理解来解释,通俗一点就是 1. GC回收的对象必须是当前没有任何引用的对象 ...

一站到底s的博客 6957

XYC Q8开源掌机刷第三方系统教程

分区结束后直接将各种游戏文件放入OD分区的Roms文件夹下

m0_60352504的博客 4570

LeakCanary原理及使用

一、LeakCanary简介 LeakCanary是Square公司为Android开发者提供的一个自动检测内存泄漏的工具,LeakCanary本质上是一个基于MAT进行Android应用程序内存泄漏自动化检测的的开源工具,我们可以通过集成LeakCanary提供的jar包到自己的工程中,一旦检测到内存泄漏,LeakCanary就会dump Memory信息,并通过另一个进程分析内存泄漏的信息并展示出来,随时发现和定位内存泄漏问题,而不用每次在开发流程中都抽出专人来进行内存泄漏问题检测,极大地方便了Andr

noblef的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LeakCanary使用简介

这一篇博客主要记录一下LeakCanary的使用方式

橡果生长记的博客 2981

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LeakCanary的使用

(转载)http://chenfuduo.me/2016/01/21/LeakCanary%E7%9A%84%E4%BD%BF%E7%94%A8/#more LeakCanary是用于Android中内存泄露检测的一个工具。那么什么是内存泄露?内存泄露和内存溢出的区别是什么?简单的说下我的理解-内存溢出(out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,

u010746364的博客 2350

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeakCanary 使用

LeakCanary github地址:LeakCanary 要使用 LeakCanary,请将leakcanary-android依赖项添加到应用程序的build.gradle文件中: dependencies { // debugImplementation because LeakCanary should only run in debug builds. debugImplementation 'com.squareup.leakcanary:leakcanary-android:

时代我西的博客 3018

leakcanary的使用以及常见的泄露

1.gradle 引用 debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1' //testCompile 'com.squareup.leakcana...

smallwei2014的博客 1382

LeakCanary

一、LeakCanary LeakCanary由Square开源的一款轻量第三方内存泄漏检测工具 1、LeakCanary的使用 (1)在app build.gradle中加入引用 debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5' releaseCompile 'com.squareup.leak...

黑夜的触手 1040

LeakCanary使用详解

官方地址: https://github.com/square/leakcanary 相关文章: Android内存优化(六)LeakCanary使用详解(刘望舒的文章 3.6w阅读量) android使用Leaks检测内存泄漏(2.3w阅读量 23赞) 性能优化总结2:leakcanary的使用(简洁易懂)(6.6k阅读量) 使用流程: 1、添加依赖: dependencie...

songzi1228的博客 659

android中leakcanary的使用

LeakCanary检测内存泄漏: LeakCanary是Square公司出的开源框架(Square出品,必属精品),是一个Android和Java的内存泄露傻瓜化并且可视化的内存泄露分析工具,当检测到某个activity有内存泄露,LeakCanary会弹出通知,定位到内存泄露的位置。使用它大大减少OOM的问题,提高App的质量。 1. List item 在 build.gradle 中加入引...

muranfei的博客 1483

leakcanary以及leakcanary2.0使用方法总结

leakcanary使用方法总结 以下操作都是在网上查看他人文章,总结出来适合自己的操作方法。 一、添加依赖 Android Studio在 build.gradle里添加依赖。 debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3' releaseImplementation 'com.squareup.lea...

weixin_43771048的博客 2776

LeakCanary原理解析

转载注明出处:http://blog.youkuaiyun.com/xiaohanluo/article/details/78196755 使用 LeakCanary是Square为Android应用提供的一个监测内存泄露的工具,源码地址:https://github.com/square/leakcanary。 在gradle文件中引入依赖: dependencies { debug...

王三的专栏 1万+

leakcanary的使用

它是什么 一句话说,就是: Android项目中,用于检测内存泄露,优化性能的工具 解决了什么问题 解决了,内存泄漏难以发现的问题。通过Leakcanary,可以轻松的找到GC中跟搜索法可达,然而不再使用的对象。 一般情况下,这种问题是很难被发现的,原因是他的出现是不经意间的,其中,内存泄露常见的场景有: 内存泄露常见场景 非静态内部类的静态实例 非静态内部类会持有外部类的引用 在外部类生命周期结束后,静态实例会长期维持着外部类的引用,导致无法被gc 多线程相关的匿名内部类\非静态内部类

小雨的博客 2407
上一篇: Android中的数据存储
下一篇: 如何打印你的Log
lxn_李小牛
博客等级 码龄11年 220粉丝 342原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值