为了账号安全,请及时绑定邮箱和手机立即绑定

一个内存优化报告

标签:
Android

1.采用内存分析工具 MAT 来分析页面消耗内存的,看哪个部分消耗内存最多,得出结论是image占用的内存最多

2.DynamicDetailActivity,DynamicHomeActivity,PersonalActivity中都是加载图片都是用的是图片的原始尺寸,而不是控件的图片的尺寸,这样会消耗大量的内存,所以用新的图片加载方法可以节省很多内存

3.内存泄漏排除:开启LeakCanary排查了多处内存泄漏(尤其是activity如果持有静态的listener在ondestroy中一定要置为null)

4.布局优化:用viewhierarchy来分析布局,减少不必要的布局嵌套、抽取各个布局中共同的部分,使用起来更方便

5.使用MVP模式来优化重复代码,增加代码复用

6.我发现用很多页面用ViewUtilController来add listView的Footer的时候很少去执行clearListViewFooter()方法,会造成内存泄露

下面我拿两个类PersonalActivity(个人主页)和DynamicHomeActivity(密友圈动态页)做一个例子(从执行速度和内存消耗两个方面)(手机是锤子T2,账号是18559298167/a198671生产环境)(对比是5.9.2版本跟6.1版本)

对于PersonalActivity:

内存优化后页面加载快了一共(3110-930)=2180ms

优化前的oncreate时间是3110ms,

https://img1.sycdn.imooc.com//5c10c6f2000110b324161080.jpg

优化后的oncreate时间930ms

https://img1.sycdn.imooc.com//5c10ca620001ba4f21160582.jpg

traceview中incl cpu time%列出了每个方法占用oncreate调用时间的比例,incl cpu time列出了oncreate中每个方法的调用时间,那930就是oncreate一共占用的时间

  • Inl Cpu Time%:方法在运行期间被调用的时间占总时间的百分比。

  • Incl Cpu Time:方法执行的总时间(包括调用子函数所消耗的时间):调用该方法每次所需要消耗的时间*执行次数。

  • Excl Cpu Time%:方法自身所消耗的时间(不包括调用其他方法所消耗的时间)占总时间的百分比。

  • Excl Cpu Time:方法自身所消耗的时间。


对于内存消耗方面:(手机是锤子T2,账号是18559298167/a198671生产环境)

PersonalActivity:  内存一共节省了(155-108) = 47M

优化前:消耗内存是155M

https://img1.sycdn.imooc.com//5c10caf90001132917960526.jpg

优化后内存消耗108M:

https://img1.sycdn.imooc.com//5c10cb0d0001663616560752.jpg

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消