leakcanary的使用以及常见的泄露

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

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.leakcanary:leakcanary-android-no-op:1.6.1'

2.使用

在自己的Application的onCreate()中调用

if (AppConfig.IS_DEBUG) {
    refWatcher = LeakCanary.install(this);
}

AppConfig.IS_DEBUG是我定义的一个常量,在buildTypes进行赋值,进行自己来管理DEBUG状态

buildTypes {
    release {
        minifyEnabled false
        signingConfig signingConfigs.debug
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        buildConfigField "boolean", "IS_DEBUG", "false"
        buildConfigField "boolean", "IS_LOG", "false"

    }
    debug {
        signingConfig signingConfigs.debug

        buildConfigField "boolean", "IS_DEBUG", "true"
        buildConfigField "boolean", "IS_LOG", "true"
    }
}

3.典型泄露

3.1查看泄露情况

简单情况下,是用了leakcanary,运行程序时会在测试机上安装一个APP,可以在这里查看。

也可以通过,Android studio来查看详情,打开这个路径

打开后,找到设备中,对应APP的hprof文件

双击hprof文件,打开

 

打开分析,然后运行

就可以看到具体的泄漏情况了

 

3.2工具类静态变量,使用非Application上下文创建泄露

这是我定义的一个toast工具类,static Toaster mToaster;mToaster是static的,因为它的生命周期是跟随Application 的,如果使用activity之类来创建,就会在activity销毁后还保留该activity的引用,就导致了泄露。

public class Toaster {
    private Toast mToast;
    private Handler mHandler;

    private TextView mText;
    private Runnable lastRun;


    private Toaster(){
        Looper mainLooper = Looper.getMainLooper();
        mHandler=new Handler(mainLooper);
    }

    private static Toaster mToaster;


    public static Toaster getToaster(){

        if (mToaster == null) {
            mToaster=new Toaster();
        }
        return mToaster;
    }


    public void show(final String text){

        if (!TextUtils.isEmpty(text)){

            if (mToast == null) {
                mToast=new Toast(App.instance);

                LayoutInflater mInflate= (LayoutInflater) App.instance.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View inflate = mInflate.inflate(R.layout.toast_layout, null);
                mText = ((TextView) inflate.findViewById(R.id.message));
                mToast.setView(inflate);
                mToast.setDuration(Toast.LENGTH_SHORT);
                //mToast.setGravity(Gravity.CENTER_HORIZONTAL,0,0);
            }
            if (lastRun != null) {
                mHandler.removeCallbacks(lastRun);
            }
            mHandler.post(lastRun= new Runnable() {
                @Override
                public void run() {
                    mText.setText(text);
                    mToast.show();
                }
            });

        }

    }
}

3.3 MediaPlayer的内存泄漏

mediaPlayer使用,释放不正确导致泄露,正确的写法应该这样

if (mediaPlayer != null) {
    mediaPlayer.stop();

    /*查看了Mediaplayer的源码,发现存在一个引用,应该回收,但是在release方法中,并没有没处理,只有在reset方法中,这个引用才被消除。 */
    mediaPlayer.reset();

    mediaPlayer.release();
    mediaPlayer = null;
}

 

 

使用LeakCanary分析并解决Android内存泄露 使用LeakCanary分析并解决Android内存溢出 LeakCanary是一款内存溢出分析工具,至于什么是内存溢出网上有很多帖子,这里就不废话了,改工具是在app里植入一个新进程的和一个新入口的工具组件,也就是说使用了leakcanary的app安装后会在桌面看到两个app入口,卸载其中一个另外一个也会被卸载,并且两个入口运行在不同的进程。而在leakcanary入口里可以看到主app里内 阅读详情

相关推荐

LeakCanary简单使用介绍

在Android的性能优化中,内存优化是必不可少的点,而内存优化最重要的一点就是解决内存泄漏的问题,在Android的内存泄漏分析工具也不少,比如PC端的有:AndroidStudio自带的Android Profiler、MAT等工具;手机端也有,就是LeakCanary,源码中是LeakCanary的简单使用Demo

Android 内存泄漏检测工具 LeakCanary 的使用

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

hello_1995的博客 2万+

ROS2机械臂实战:从基础控制到视觉抓取

本文详细介绍了ROS2机械臂从仿真环境搭建到视觉抓取的全流程实战指南。内容涵盖使用Gazebo搭建仿真环境、编写基础控制节点、集成视觉感知进行目标检测与坐标变换,并设计状态机逻辑实现自动化抓取。通过系统集成与联调,帮助开发者掌握ROS2机械臂开发的核心技能。

weixin_29197699的博客 449

leakcanary的使用

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

小雨的博客 2407

Linux内核同步原语之队列自旋锁(Queued Spin Lock)深度解析

本文深度解析了Linux内核中的队列自旋锁(Queued Spin Lock)机制。通过对比传统自旋锁的瓶颈,详细阐述了队列自旋锁如何利用紧凑的4字节结构、每CPU节点数组和pending位优化,有效解决多核(SMP)系统中的缓存行乒乓和惊群效应,实现公平、高效的锁等待队列,从而显著提升内核在高并发场景下的可扩展性与性能。

weixin_29205061的博客 303

Angular 相关的知识点和项目汇总

Angular 知识点和项目汇总

weixin_45428910的博客 578

LeakCanary的简单介绍及使用

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

缘来的精彩的博客 3386

ISCE2+MintPy环境搭建实战:用Anaconda五分钟搞定InSAR处理全家桶

本文提供了一份详细的ISCE2+MintPy环境安装教程,旨在帮助InSAR处理初学者快速搭建开发环境。通过使用Anaconda创建虚拟环境并配置国内镜像,用户可在五分钟内一键安装ISCE2和MintPy全家桶,有效解决依赖冲突和版本兼容性问题,让用户能专注于数据处理本身。

2y3u4i5o6p的博客 1003

【内存泄露】LeakCanary常见问题

Android SDK会导致泄漏吗? 是。在AOSP和制造商实现中,有许多已知的内存泄漏已经随着时间的推移得到了修复。当这样的泄漏发生时,您作为应用程序开发人员几乎无法修复它。出于这个原因,LeakCanary有一个内置的、需要识别的Android泄漏列表,称为“库泄漏”(请参见对泄漏进行分类). 如果你找到一个新的,请制造问题(选择AndroidSDK/Support库中的泄漏)并遵循以下步骤: 提供整个泄漏跟踪信息(包括元数据),并使用backticks(`)进行格式化。 阅读该版本Androi

柳的博客 1525

扣子(coze)实战|手把手教你搭建AI换装自动化工作流

摘要:本文介绍了使用Coze平台搭建AI换装工作流的详细教程。工作流包含模特图片上传、服装替换、任务提交和智能轮询等模块,通过change_model插件实现异步换装处理,并内置30秒循环查询机制。该工具支持自定义API密钥对接不同AI服务商,目前已上线共享空间并提供会员服务(59.8元/年)和VIP课程(499元/年),包含100+智能体和实战案例资源。完整体验地址见文中链接。

yueyehuguang的博客 1843

YOLOv11改进 | Conv改进篇 | 含2种改进,引入DynamicConv替换普通Conv卷积下采样和C3k2_DynamicConv替换C3k2(来自CVPR2024)

本文提出了一种基于DynamicConv动态卷积优化的YOLOv11轻量化模型改进方案。通过引入多专家机制的动态卷积模块,在增加模型参数量的同时保持较低的计算复杂度(FLOPs),有效解决了低FLOPs模型在大规模预训练中的性能瓶颈问题。文章详细介绍了动态卷积的工作原理、核心代码实现,并提供了在YOLOv11中集成DynamicConv和C3k2_GhostModule_DynamicConv模块的完整教程,包括模块添加、配置文件修改和模型训练验证过程。实验结果表明,该方案在保持高效推理速度的同时显著提升了

Ai缝合怪、助力小伙伴高效发论文 537

如何在Android Studio中使用LeakCanary检测内存泄露

内存泄露检测是项目性能优化不可避免的问题,只有解决内存泄露问题才能从根本上解决OOM。在Eclipse中提供Mat工具来检测内存泄露,但是使用较为麻烦,界面也不是很直观。对于有耐心,有想法的,也是可以尝试了解一下。知道Leak的出现,为内存泄露检测带来了福音。1.什么是LeakCanaryLeakCanaryA memory leak detection library for Android an

qq_26585943的博客 6657

AI上推荐 之 逻辑回归模型与GBDT+LR(特征工程模型化的开端)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 8252

Android 内存泄露及LeakCanary分析

Java中的WeakReference是弱引用类型,每当发生GC时,它所持有的对象如果没有被其他强引用所持有,那么它所引用的对象就会被回收,同时或者稍后的时间这个WeakReference会被入队到ReferenceQueue中,LeakCanary中检测内存泄露就是基于这个原理。:原因如上,Handler持有外部类的引用,Message持有Handler的引用,MessageQueue持有Message的引用,Looper持有MessageQueue的引用,Looper一直存在,导致引用链都不会被回收;

行知致简的专栏 2256

2011-2024年间各省数字普惠金融指数数据(覆盖广度、使用深度和数字化程度)

2、指标:数字金融普惠指数、数字金融覆盖广度指数、数字金融使用深度指数、普惠金融数字化程度指数、数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。中国各省的数字普惠金融指数数据,从数字金融覆盖广度、数字金融使用深度和普惠金融数字化程度3个维度来构建数字普惠金融指标体系。数字普惠金融指数一共3个维度、33项具体指标。全套指数包含数字金融覆盖广度指数、数字金融使用深度指数和普惠金融数字化程度指数,以及数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。

【优快云】 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LeakCanary直面项目中的内存泄露

感谢原博主,转载自:http://blog.youkuaiyun.com/donkor_/article/details/54095110 ============================================================================================================ 前言:  LeakCanary一个直白的

虾米哥 专栏 401

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

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

LeakCanary原理解析

总结一下,LeakCanary流程中最经常被问到的两个问题:

1 606

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java轻易不会发生内存泄露_LeakCanary傻瓜式的内存泄露检测工具

LeakCanary傻瓜式的内存泄露检测工具在Android开发过程中如果需要处理图片或者大量数据的时候,常常会遇到OOM(http://www.doczj.com/doc/34652dc30912a216147929fb.htmlng.OutOfMemoryError),一般出现最多的是在创建Bitmap上,也有可能是在内存中处理了大量的数据造成。一般会针对Bitamp做下面几种的优化:1. 增...

weixin_34099891的博客 183

Android 内存泄露神器之LeakCanary

随着我们项目的不断完善,有一天突然发现性能出现在了我们面前,随之而来的就有内存泄漏、内存溢出等概念 先介绍一下内存溢出,即应用某一时刻所占有的内存超过所申请的内存,发生了内存溢出,OOM(OUT OF MEMORY )。 内存泄露呢,就是类持有外部类实例对象的引用,垃圾回收机制就回收不了该对象,所产生的现象。 今天主要讲讲如何检测内存泄露,导致内存泄露的原因有很多,比如: 1.cursor...

lzq520210的博客 417

LeakCanary 傻瓜式的内存泄露检测工具

在开发Android应用的过程中如果需要处理图片或者大量数据的时候,就有可能会遇到OOM(java.lang.OutOfMemoryError),一般出现最多的是在创建Bitmap上,也有可能是在内存中处理了大量的数据上。出现OOM应用会直接崩溃,即使没有出现OOM,内存使用过大的时候应用也会出现卡顿。所以内存的优化在开发Android应用时是一个比较重要的任务。一般会针对Bitamp的内存优化有...

weixin_34026276的博客 110

android中的内存泄露

1.内存泄露 2.LeakCanary

wzy885588的专栏 301

LeakCanary 最新版 2.12 内存泄露工具使用

在使用LeakCanary之前,我们需要添加下面的依赖: dependencies { // debugImplementation 是因为 LeakCanary 应该只工作在 debug 编译环境. debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12' }

jiet_h的博客 2381

LeakCanary检查内存泄露

LeakCanary检测内存泄露内存泄露 内存泄露的概念 当一个对象已经不再需要却无法被GC回收,就是内存泄露 内存泄露的危害 1.“A small leak will sink a great ship.” - Benjamin Franklin 2.千里之堤, 毁于蚁穴。 – 《韩非子·喻老》 3.对于移动设备来说,运行内存想极其有限的,分配给每个app的内存也是有上限

chenkaisq的博客 472

内存泄露之常见问题解决--初级篇

身为一个段子猿,我决定来写写最近的学习心得。1.简介在整个Android开发过程中,内存泄露是导致OOM的一个重点因素。大意思就是:GC无法回收原本应该被回收的对象,这个对象就引发了内存泄露。那有什么危害呢?手机的内存大小是有限的,如果不能释放的话,你就无法创建新的对象,你的新界面等等就无法正常运行,然后程序就OOM了(OutOfMemory)。2.OOM以及内存泄露OOM通俗点讲就是,你家里有2个

超哥的博客 5142
上一篇: 判摄像头是否可用
下一篇: FlexboxLayout使用以及注意点
vode
博客等级 码龄11年 4粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值