极客班作业——内存优化

作业代码MemoryBugs-master中主要的问题如下:

第一   static问题


图中 sTextView被声明为静态对象,静态对象除非其所在进程被杀死了,否则是不会被销毁的,这就影响了MainActivity的销毁,使垃圾回收器无法回收MainActivity,从而造成了内存泄露。

极客班作业——内存优化_第1张图片

在点击StartActivityB这个按钮执行上图代码,5秒钟后Android-Leak发出内存泄露的警告,并在通知栏指出是sTextView这个对象引起的。

修改方式:把static这个声明去掉。

第二  大量重复对象创建


在点击了StarAlloctaion这个按钮后,执行了如下代码

极客班作业——内存优化_第2张图片

可以看到代码中重复不断地创建了同一个rect对象,占用了大量内存,这对程序的性能影响很大,使用android-Allocator可以看到大量被创建的rect对象(同时还有大量的StringBuilder对象)。

极客班作业——内存优化_第3张图片


修改方式:为了避免每次都创建同一对象,所以将代码改为下图所示。

极客班作业——内存优化_第4张图片

第三  在自定义控件的onDraw方法中new对象

因为onDraw方法会经常被调用,所以要尽量避免在onDraw方法中new对象。

更改方式:把在onDraw方法中创建的对象全部提取为私有对象。


你可能感兴趣的:(极客班作业——内存优化)