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,
优化后的oncreate时间930ms
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
优化后内存消耗108M: