Geekband作业12--寻找内存泄漏

bug项目地址:https://github.com/lzyzsd/MemoryBugs

所用到的工具:AS1.5+, Memory monitor, Allocation tracker, Heap viewer, Leak canary

1.Memory monitor 可以监测到应用的实时内存使用情况,可以方便观测到内存的变化

2.Allocation tracker 记录某个时段内应用所有的内存分配行为,可以方便看到应用产生了多少对象

3.Heap viewer 可以为某个时刻的应用内存堆栈生成一次快照,方便分析

4.Leap canary 集成到程序中,在程序运行过程中提示潜在的内存泄漏点


一、首先浏览一遍代码发现以下问题

1.TextView及Toast显示的文本没有写在String文件里。

2.startAllocationLargeNumbersOfObjects()这个方法中每次循环都会产生一个Rect实例是多余的,会吃内存。MyView的onDraw()方法也存在此问题。

3.Handler mHandler = new Handler(...的方式,mHandler会持有当前Activity的一个引用,在某些情况下会出现内存泄漏。

4.startB()方法中,先执行finish(),然后又用mHandler.postDelay的方式,执行一个延时操作,可能会有问题。

二、使用工具

1.边运行程序边观察Memory monitor。检测到在点击“STARTALLOCATION"后,内存使用出现锯齿状抖动。

2.在点击“STARTALLOCATION”前,打开Allocation tracker,抖动结束后停止tracker。查看生成的文件,发现产生了许多Rect及StringBuilder对象。

3.点击”STARTACTIVITYB“,过5秒后Leap canary提示有内存泄漏。查看信息,是MainActivity中的sTextView造成的,因为静态变量不会被GC回收,在MainActivity finish掉后,由于sTextView仍持有一个引用,故MainActivity的实例仍存在。

4.将sTextView在onDestory中释放掉,把mHandler.postDelay()中的延时改为10秒,然后点击”STARTACTIVITYB“,过一会Leap canary又提示有内存泄漏(果然有问题)。遂用之前教的初始化Handler的方法,在Handler中持有当前Activity的一个弱引用。问题解决。

购物商城项目采用PHP+mysql有以及html+css jq以及layer.js datatables bootstorap等插件等开发,采用了MVC模式,建立一个完善的电商系统,通过不同用户的不同需求,进行相应的调配和处理,提高对购买用户进行配置….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值