如果扩容次数多了,GC的次数也会频繁的增多。
如果我们预先能够知道需要,存储多少个元素,或者大概多少个元素,我们可以使用带参数的构造方法来创建出这个大小的数组,来减少数组扩容的次数。
(4):for循环中不要使用“+”号拼接字符串
“+”底层还是通过StringBuilder实现的,每一次for循环都会创建一个StringBuilder对象。
当我们使用for循环外部创建StringBuilder,内部使用它拼接字符串,内存图形很平稳。
for循环内部使用+号拼接字符串,图形抖动(内存抖动),一直在GC。
(5):尽可能少的使用枚举
使用 ENUM 将会增大 DEX 大小,并会增大运行时的内存分配大小。为了弥补 Android 平台不建议使用枚举的缺陷,官方推出了两个注解,IntDef和StringDef,用来提供编译期的类型检查。
枚举本质上是通过普通的类来实现的,只是编译器为我们进行了处理。每个枚举类型都继承自java.lang.Enum,并自动添加了values和valueOf方法。而每个枚举常量是一个静态常量字段,使用内部类实现,该内部类继承了枚举类。所有枚举常量都通过静态代码块来进行初始化,即在类加载期间就初始化。
(6):ListView复用,对象复用
这个就不多少了,我相信每个Android开发者都知道。
(7):减少布局的层级
减少View的个数,减少测量的时间(View显示在前台,经过三个阶段测量,布局和绘制)。能够减轻内存,CPU的负担。
(8):序列化可以使用Protobuf
Protobuf是谷歌推出的一款平台无关,语言无关,可扩展的序列化和反序列化技术。有兴趣的朋友可以自行了解一个,这里就不多说了。
(9):数据库减少使用AUTOINCREMENT关键字
AUTOI