Android内存泄漏案例分析一

本文档记录了一次在Android Gallery模块中处理内存泄漏问题的过程。通过对Log的分析,发现在使用refocus功能时,内存持续上升,导致OOM。通过MAT工具,发现RefocusActivity、RefocusView和ValueAnimator之间的引用链导致内存无法释放。问题根源在于静态的ValueAnimator持有ApertureSlider的引用,阻止了RefocusActivity的回收。修复这个问题只需移除静态修饰符,确保内存正常释放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景介绍

最近负责的Gallery模块测试时频繁报出使用一段时间后就发生Crash,通过Log查看发现是OOM引发,本篇文档记录解决该问题的分析过程。

Log分析

该OOM问题测试没有找到复现步骤,只是报出使用一段时间就会发生OOM这个非常宽泛的现象,没有复现步骤,没有确定时间节点。查看Log每次发生OOM的代码调用栈也不尽相同。贴出出现OOM的几段Log。
这里写图片描述

这里写图片描述

这里写图片描述

通过上面的几段Log,看出都是在申请一个较大的内存空间时,系统memory空间不够了,导致发生了OOM,这里都是在对图片进行操作,因此申请了较大的内存空间。
至此有一个大概的查找方向:问题出现的时机是在Gallery创建大的Bitmap对象,了解过Gallery业务流程很容易就会怀疑这个过程多半发生在PhotoPage界面,也就是浏览大图界面,但深入了解发现Gallery已经对这块进行了处理,并不是大图有多大,就一次性创建多大的Bitmap对象,而是将一个大图分成多个区域加载进来,具体可以查看Gallery代码中LocalImage类中的requestLargeImage方法,它利用的是BitmapRegionDecoder技巧,分块多次加载大图,这里不赘述。在排查Log发现问题发生在refocus操作几率大,测试也印证了该点。这里refocus是MTK平台针对Gallery做的一个新功能,它能对景深图片进行重聚焦/调整图片光圈值。排查重点放在refocus操作上。

复现问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值