继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

一个内存优化报告

nickcau
关注TA
已关注
手记 114
粉丝 6509
获赞 303

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.mukewang.com/5c10c6f2000110b324161080.jpg

优化后的oncreate时间930ms

https://img1.mukewang.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.mukewang.com/5c10caf90001132917960526.jpg

优化后内存消耗108M:

https://img.mukewang.com/5c10cb0d0001663616560752.jpg

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP