glide是一款非常优秀的图片加载框架,目前很多项目在使用。提供了非常方法,在此,笔者就不一一列举了,可以到官网查找。

目前项目在做内存排查,因为是车机项目,之前开发的时候没有注意内存方面的问题(车机项目你懂的),现在ota期间系统提出让我们优化内存,说出现过应用内存一直增加的情况。

一脸懵逼,第一想法是系统在甩锅,哥可不接。后来自己偷偷的排查下,是有些需要优化的地方。特此记录如下。

第一想法是,车机项目加载了很多背景图,有些都在200k~~400k,和UI沟通,无法再压缩,会糊。

第二是排查代码,一顿操作,各种点击,发现本地代码有需要优化的地方。静态内部类,弱引用搞起。

最后发现是报了glide内存泄漏,话不多说上图

点进去一个

RequestManager是glide内部一个类,查找使用方法

从view 到application都可以传,传哪个就和哪个生命周期绑定

看了代码,当前我在fragment和adapter中传入的都是activity,修改写法,在activity中使用传入activity在fragment中使用传入fragment这也是官方推荐的使用方式。

AndroidStudio profiler 观察下内存情况

heap dump文件

点开其中一个

阿西吧,明明已经按照官方方法调用了,但是还是报了内存泄漏风险。我想静静。。。

moment later

我有到设置中去切换白天黑夜模式,看了下日志切换白天黑夜模式的时候并没有销毁activity,而是再次点击进入应用是才调用了ondestroy方法,是因为这个原因?

抱着这种想法,我多次切换白天黑夜模式,并且退出进入应用,没有报多个activity实例,一直都是2个,嗯...大概是这个原因了,这时候我想如果我进入应用中

这时候实例中activity应该只有一个实例了吧。然并卵,手动gc释放,没有变化。后来和后面一大佬聊天,被告知,androidstudio 手动gc并不能回收activity实例,

它是系统内存不足时被AMS回收的。如果这样的话那就能解释的同了。

后来我想如果传入application呢,上家公司做瀑布流列表我依稀记得是全局封装的application,说干就干。一顿操作

heap dump文件

androidtudio peofiler没有再报溢出,差不多时间两种方式内存占用趋势也基本一致,最后内存也大体相同。

得出结论:

1.glide能很好的管理内部,引用。profiler虽然提醒了内存溢出,但是这只是有风险,并不一定会报

2.glide传入application 在应用没有动态列表图片加载的时候可以满足加载图片和内存两者之间的平衡,如果瀑布流图片较多,可考虑加入内存清理机制

大家有什么观点,欢迎共同探讨

一次glide内存泄漏排查分析的更多相关文章

  1. Chrome JS内存泄漏排查方法(Chrome Profiles)

     原文网址:http://blog.csdn.net/kaitiren/article/details/19974269 JS内存泄漏排查方法(Chrome Profiles)   Google Ch ...

  2. 填坑总结:python内存泄漏排查小技巧

    摘要:最近服务遇到了内存泄漏问题,运维同学紧急呼叫解决,于是在解决问题之余也系统记录了下内存泄漏问题的常见解决思路. 本文分享自华为云社区<python内存泄漏排查小技巧>,作者:luti ...

  3. windows 下面的内存泄漏排查.

    内存泄漏排查 一下本人只是简单的介绍一个实用, 如果读者很感兴趣, 可以查阅msdn自己去深入调查相关的API和原理. API 介绍 1. 马上打印泄漏信息:_CrtDumpMemoryLeaks() ...

  4. JVisualVM简介与内存泄漏实战分析

    JVisualVM简介与内存泄漏实战分析 学习了:https://blog.csdn.net/kl28978113/article/details/53817827

  5. AndroidStudio 内存泄漏的分析过程

    前言部分这次泄漏是自己代码写的太随意引起的,讲道理,代码写的太为所欲为了,导致有些问题根本就很难发现. 泄漏产生的原因,由于activity未被回收导致.这里给我们提出的一个警示,在使用上下文的时候, ...

  6. JS内存泄漏排查方法——Chrome Profiles

    一.概述 Google Chrome浏览器提供了非常强大的JS调试工具,Heap Profiling便是其中一个.Heap Profiling可以记录当前的堆内存(heap)快照,并生成对象的描述文件 ...

  7. JS内存泄漏排查方法-Chrome Profiles

    原文链接:http://caibaojian.com/chrome-profiles.html 一.概述 Google Chrome浏览器提供了非常强大的JS调试工具,Heap Profiling便是 ...

  8. [转]JS内存泄漏排查方法(Chrome Profiles)

    Google Chrome浏览器提供了非常强大的JS调试工具,Heap Profiling便是其中一个.Heap Profiling可以记录当前的堆内存(heap)快照,并生成对象的描述文件,该描述文 ...

  9. 内存泄漏排查之:Show me your Memory

    java 语言有个神奇的地方,那就是你时不时会去关注下内存.(当然了,任何牛逼的同学都应该关注内存) 今天我们就来这么场景吧:某应用运行了一段时间后,ecs监控报警了,内存比较高了,怎么办?随着时间的 ...

  10. Node 内存泄漏排查案例

    背景 在阿里云上看到我运行了一段时间的程序,发现 memory 一项基本是在稳步提升,就知道有内存泄漏的情况出现.如下图 近三日从 35% 升到 40%,缓慢而坚定的提升. 代码 排查此问题需要分析其 ...

随机推荐

  1. ET介绍——强大的基于.dotnet7+Unity3d的双端C#开源游戏框架

    ET是一个开源的游戏客户端(基于unity3d)服务端双端框架,服务端是使用C# .net core开发的分布式游戏服务端,其特点是开发效率高,性能强,双端共享逻辑代码,客户端服务端热更机制完善,同时 ...

  2. 详解数仓对象设计中序列SEQUENCE原理与应用

    本文分享自华为云社区<GaussDB(DWS)对象设计之序列SEQUENCE原理与使用方法介绍>,作者:VV一笑. 1. 前言 适用版本:8.2.1及以上版本 序列SEQUENCE用来生成 ...

  3. OpenMP优化for循环的基础运用

    OpenMP优化for循环的基础运用 OpenMP作为多线程并行优化API,其使用方式与C++自带的多线程使用方式有很大的不同. 在使用OpenMP时,我们是通过 #pragma omp+字句 所组成 ...

  4. mybatis复习(一)

    原始连接数据库步骤: 1.导入JDBC驱动包 Class.forName("com.mysql.jdbc.Driver"); 2.获取连接对象(连接目标数据库) Connectio ...

  5. MogDB 安装解压错误:cannot run bzip2: No such file or directory

    MogDB 安装解压错误:cannot run bzip2: No such file or directory 本文出处:https://www.modb.pro/db/403662 问题症状 Mo ...

  6. 抓包整理————tcp 协议[八]

    前言 简单介绍一下tcp 协议. 正文 tcp历史: advanced research projects agency network: 1973年: tcp/ip 协议 tcpv4 协议分层后的网 ...

  7. nginx 学习的前提

    前言 在nginx 中,需要学会的是如何安装.基础的命令.看懂配置那么这时候才是一切的刚刚开始. 正文 安装可以去看菜鸟驿站的: https://www.runoob.com/linux/nginx- ...

  8. 通过UI自动化方式获取文章、视频信息

    出于学习研究,对某账号的文章.视频分析一翻,尝试使用自动化方式看能否获取相应信息. 获取某号的文章有多重方法: 第一种是通过搜狗浏览器搜索账号(这种方式每天只能获取一篇文章,基本上没啥用.): 第二种 ...

  9. 初探Mysql架构和InnoDB存储引擎

    前言 mysql相信大家都不陌生了,分享之前我们先思考几个面试题: 1.undo log和redo log了解过吗?它们的作⽤分别是什么? 2.redo log是如何保证事务不丢失的? 3.mysql ...

  10. NL2SQL实践系列(1):深入解析Prompt工程在text2sql中的应用技巧

    NL2SQL实践系列(1):深入解析Prompt工程在text2sql中的应用技巧 NL2SQL基础系列(1):业界顶尖排行榜.权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣 ...