记一次Android Studio Profiler使用,找到内存泄露原因

Android Studio Profiler使用 第5步生成内层泄漏日志之后,后面会显示内层泄漏个数和方法列表。如果Leaks的数目不是0,就会出现内层泄漏个数并显示黄色叹号。再根据references对应的类名,找到在项目中调用它的地方。然后就找到内层泄漏的地方啦。测试完成,选择MEMORY,选择_capture_ _heap dump,_然后点击record。开启一个新的分析会话(start a new profiling session),根据包名引入你手机目前运行进行分析的app;此时正常使用你的App功能,把可能出现内层泄漏的模块测试一下; 阅读详情

多的不说,直接上图:

bmp格式的图片不支持上传,差评,用手机拍下
1.先从reference 找到引用链

在这里插入图片描述

2.再从fields找到具体引用
在这里插入图片描述

UIThread 里的部分代码:

	@Override
    public void run() {
        try {
        	Looper.prepare();
    		if( runnable==null ){
    			iLog.w(TAG+" run() runnable is null");
    		}
    		
    		if( mHandler==null ){
    			iLog.w(TAG+" run() mHandler is null");
    		}
    		mHandler.obtainMessage(what_run_prepare).sendToTarget();
    		
        	runnable.run();//此处
        }
        catch(Exception e){
        	iLog.e(TAG+" run() "+e.getMessage());
        }
        finally{
	        mHandler.obtainMessage(what_run_completed).sendToTarget();
	        Looper.loop();
        }
	}


    Runnable runnable = () -> {
        try {
            doInBackground();
        } catch (Exception e) {
            iLog.w(TAG + " onStart UIThread exceptione=" + e.getMessage());
        }
    };

原因: Looper.loop();是死循环,相当于 UIThread里有个while(true) 一直在跑,所以会一直对activity有引用,activity不会被回收。

解决方法:那就是在activity 退出时 停止该线程 或 停止该线程中的looper 也相当于停止线程,不过不推荐直接用stop(),会报错,建议在内部声明个Looper mLooper 去获取 该线程的Looper , mLooper = Looper.myLooper(); 然后在destroy的时候 调用 mLooper.quit(); 就行。

Android常见内存泄露分析及MAT与Profiler内存分析时间 1.Java内存分配策略 Java程序运行时的内存分配策略有三种:静态分配、栈式分配和堆式分配。对应的存储区域如下: 静态存储区(方法区):主要存放静态数据、全局static数据和常量。这块内存在程序编译时就已经分配好,并且在程序整个运行期间都存在。 栈区:方法体内的局部变量都在栈上创建,并在方法执行结束时这些局部变量所持有的内存都会自动被释放。 堆区:又称动态内存分配,通常就是指在程序运行时直接new出来的内存。这部分内存在不使用时将会由Java垃圾回收器来负责回收。 2.堆与栈的区别 栈内存: 阅读详情

相关推荐

Android Studio Profiler 内存泄漏排查:3步定位并解决 Activity/Fragment 泄漏

本文详细介绍了如何使用Android Studio Profiler工具排查和解决Android开发中的内存泄漏问题,特别是Activity和Fragment泄漏。通过三步定位流程:强制GC确认内存状态、捕获堆转储分析、追踪引用链,开发者可以高效识别并修复常见泄漏场景。文章还提供了性能优化和内存管理的实用技巧,帮助提升应用稳定性。

weixin_33834137的博客 1400

使用Android Studio 查看内存泄漏

用新版的AS 的profiler 查看内存泄漏 记录一下使用Android Studio 的profiler 查看内存泄漏的过程。新版的AS 的profiler 功`能强大。我们可以很方便的查看到一个界面里的内存泄漏。 首先我们制造一个内存泄漏的Activity public class MemoryLeakActivity extends AppCompatActivity { private static int FLAG = 999; @Override protected

qq_33667332的博客 1万+

Halcon 算子 select_shape

作用:借助形状特征选择区域; 参数翻译(对应以上参数顺序): 输入区域、 输出满足条件的区域、 输入参数形状特征('anisometry', 'area', 'area_holes', 'bulkiness'等)、 输入参数关系符('and', 'or')、 输入参数下限值(0.0 ≤ Min ≤ 99999.0)、 输入参数上限值(Max >= Min 并且0.0 ≤ Max ≤ 99999.0); 描述: 算子select_shape根据形状特征选择区域,对于...

奔跑的郑的博客 2万+

性能优化之内存泄漏排查(查看系统内存和CPU占用)

Android性能优化之内存优化 计算 APP 获得的最大内存分配值 Runtime rt=Runtime.getRuntime(); long maxMemory=rt.maxMemory(); Log.i("maxMemory:",Long.toString(maxMemory/(1024*1024))); 内存泄漏 一、内存泄漏查看 1 生成.prof文件 AS 内自...

5ingwings(SiHao)的博客 1万+

无人机飞控技术最详细解读

已剪辑自: https://zhuanlan.zhihu.com/p/64519280[导读]被称作是“飞行器的大脑”的飞控到底是什么?以前,搞无人机的十个人有八个是航空、气动、机械出身,更多考虑的是如何让飞机稳定飞起来、飞得更快、飞得更高。如今,随着芯片、人工智能、大数据技术的发展,无人机开始了智能化、终端化、集群化的趋势,大批自动化、机械电子、信息工程、微电子的专业人材投入到了无人机研发大潮中,几年的时间让无人机从远离人们视野的军事应用飞入了寻常百姓家、让门外汉可以短暂的学习也能稳定可靠的飞行娱乐。不可

qq_41854911的博客 1万+

SMPTE ST 2110 概论(一)

SMPTE ST 2110 概论(一)前言ST 2110与ST 2022-6ST 2110-10:基本结构与时序ST 2110-20:未压缩的视频流后续 前言 这是一份我在实习期间制作的,关于SMPTE ST 2110的简单介绍。 这篇文章主要以梳理总结 SMPTE ST 2110 的概念为主,关于具体的内容,比如IP数据报的格式、RTP时间戳的具体代码内容等等,大家可以查阅 SMPTE ST 2...

Cidd0422的博客 2万+

性能优化中使用Profiler进行内存泄露的排查及解决方式

性能优化中使用Profiler进行内存泄露的排查及解决方式

Mr_Tony的专栏 4322

【零基础入门哈希签名架构,从Lamport到SPHINCS+】第二集 哈希签名树 Merkle Tree Authentication

在第一集中,我们一直忽略了一个问题。设想一下,假如有一个Hacker(黑客),在截获到Sender发送给Receiver的公钥之后,把这个公钥改成Hacker自己的公钥,然后再发给Receiver,那么Receiver就会误认为这是Sender的公钥。所以我们之前所说放方案,其安全性都需要建立在一个前提下:Receiver需要确认公钥确实是Sender发出的。

m0_50572808的博客 2452

Profiler内存泄露实际案例分析

Profiler内存泄露分析,系统卡顿分析。

李岳锋的专栏 1919

linux和mac安装+配置circos(

一定要下载完这两个包,GD才会work,要不然会报错,且-modules显示也是fail。官网的教程说的很明白,但是很多包都已经过时了需要在网上找。一般来讲,所有包的安装都不会太困难,除了GD。1.是因为官网给的链接下出来的tgz无法解压。2.我的电脑安装后GD照样是fail的。,进入这个地址下一个.tgz。第二点的原因在于,官网的情况。,进入这个地址,按部就班。GD安装困难有以下几点。搞了一天终于配置成功。

xiufan1的博客 549

论文精读-ReTransformer ReRAM-based Processing-in-MemoryArchitecture for Transformer Acceleration

Transformer已经成为一种流行的深度神经网络(DNN)模型,用于神经语言处理(NLP)应用,并在神经机器翻译、实体识别等方面表现出优异的性能。然而,其在自回归解码器中的规模化点积注意机制在推理过程中带来了性能瓶颈。Transformer也是计算和内存密集型的,需要硬件加速解决方案。

a284365的博客 1922

Android Studio自带Profiler工具内存泄露分析步骤

1、运行需要检测内存泄露的程序 这里以“com.example.opengltest”程序为例。 2、点击Profiler按钮 3、点击SESIONS "+"号按钮选择设备,选择对应设备下的应用或进程 4、双击内存区块 5、操作应用程序要检测的部分或模块 6、关闭应用程序,等待内存释放,恢复平直曲线 7、点击鼠标右键“Dump java head”按钮等待几秒 自动进入内存泄露分析界面 8、选择应用包名 9、选择“Reference”按钮,勾选“Show nearest.

hqyhqyhq的专栏 2万+

优化点列图(RMS半径)的操作数

优化点列图(RMS半径)的操作数

weixin_72050316的博客 2256

Android Studio Profiler使用心得 检测内存泄露问题

最近在分析app的内存泄露问题研究了下as的profiler功能  这里记录下个人心得 内存泄露相关文档:https://juejin.im/post/5a652d31518825734108080d 首先  对于profiler基础介绍 :https://blog.csdn.net/gaugamela/article/details/79027538 下面是个人心得 1.首先得出结论pr...

Jason_Wang的博客 5758

永恒之蓝漏洞复现(ms17-010)

Metasploit Framework(MSF)是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasploit是采用Perl语言编写的,但是再后来的新版中,改成了用Ruby语言编写的了。在kali中,自带了Metasploit工具。

渗透之路,攻防之间皆学问 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android Studio Profiler 检查内存

Android Studio Profiler 检查内存简单介绍。

且听真言 8434

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

使用新版Android Studio检测内存泄露和性能

内存泄露,是Android开发者最头疼的事。可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴。 怎么才能检测内存泄露呢?网上教程非常多,不过很多都是使用Eclipse检测的, 其实1.3版本以后的Android Studio 检测内存非常方便, 如果结合上MAT工具,LeakCanary插件,一切就变得so easy了。熟悉Android Studio界面工欲善其事,必先利其器。我们接下来先来熟

老于的笔记的专栏 4054

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android Studio3.0 Memory Profiler检测内存泄露

简介 Memory Profiler是Android Profile中的一个组件,Android Profile是Android Studio 3.0 替换之前的Android Monitor工具的,主要用来观察内存,网络,cpu,今天主要介绍Memory Profiler,他可以让你观察出内存抖动和内存泄露 如何进入Memory Profiler Memory Profiler主面板介绍 ...

R.先森的博客 1539

Android内存分析工具:Memory Profiler

Android Memory Profiler内存工具

橡果生长记的博客 3万+

Android studio profiler使用

2、打开profile的home,找到Analysis Memory Usage,点击右下角start profiler task,开始分析内存,等待分析完成,分析过程中页面是卡死状态,正常现象。4、如果不是很确定是哪里的问题,可以把图片放入AI工具帮你分析。1、把怀疑内存泄露的页面都跑一边,然后回到初始页面。3、按照下面步骤查看泄露的类。

Mr_su_9726的博客 1913

android profiler 内存泄露定位,通过 Android profiler发现内存泄漏

Android studio自带的profiler具有非常强大的功能,通过它可以查看项目中是否存在内存泄漏,具体的查看方法如下代码比较简单MainActivitypublic class MainActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(B...

weixin_31100705的博客 920

使用android studio查看内存,Android Studio Profiler使用心得 检测内存泄露问题

最近在分析app的内存泄露问题研究了下as的profiler功能 这里记录下个人心得下面是个人心得1.首先得出结论profiler不详细提供分析c或c++库进行的内存占用 其中包括android 系统使用的库或者自己的.so库 它们占用的内存在下面Native部分统计2.profiler统计中详细可以查看的内存占用主要就是下图java部分和allocated部分了(不知道这个 看profiler...

weixin_29331015的博客 1076

Android Profiler实战宝典:揪出CPU耗时元凶与内存泄露小偷

Android Profiler是Android Studio内置的性能分析工具,能实时监控CPU、内存等指标,帮助开发者定位性能问题。本文重点讲解CPU耗时和内存泄漏两大核心问题的排查方法。 对于CPU耗时问题,通过采样或追踪模式录制卡顿场景,分析报告中的时间轴、线程列表和函数调用视图,快速定位耗时函数。实战案例中,发现RecyclerView滑动卡顿是由于UI线程加载图片、复杂计算和频繁创建对象导致,通过优化代码解决。 内存泄漏问题则通过内存快照对比和引用链分析,找出泄漏对象及其持有者。常见场景如静态C

顾林海 1904

android 内存泄露实战分析

前两天测试测出一个内存泄露问题,困扰了我好几天,毫无头绪,今天突然灵光一现,找到了问题原因,解决了内存泄露问题,解决方法很简单,但是总要的是问题分析过程,所以有比较把解决问题思路记录下来,以便后续分析类似问题有参考作用,一下进入正题。以上是性能测试同事测出的问题,红框的地方表示电话应用出现了三个泄露,遇到这种问题,咱们先拿到hprof问题,拿不到就找测试要或者自己跑对应的测试用例,测试方法也可以找测试要,拿到hprof文件后,使用android studio的profiler打开:已上片是我自己抓取的hpr

limeng的博客 2519

Android studio Memory Profiler简单使用

二、基本介绍 Memory Profiler是Android Profiler的一个组件, 用于帮助分析内存泄露和内存抖动的问题。 Memory Profiler的功能包括: 展示应用内存使用情况的实时图像、抓取内存的dump信息、强制垃圾回收及追踪内存分配。 2.1 开启步骤 打开Memory Profiler的步骤为: 1、 依次点击Android Studio的View...

ZhangJiqun&191cm&85kg 4607
上一篇: java.lang.IllegalStateException: Fragment no longer exists for key f#0: unique id de59a648-c55c-43e
下一篇: 安卓自定义View - 基础
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值