一、内存优化
1、public static final 代替enum
使用枚举通常会比使用静态常量要消耗两倍以上的内存,在Android开发当中我们应当尽可能地不使用枚举。(参http://developer.android.com/training/articles/memory.html#Overhead)任何一个Java类,包括内部类、匿名类,都要占用大概500字节的内存空间。
(char 1 short 2 int、float、long 4 double 8)任何一个类的实例要消耗12-16字节的内存开支,因此频繁创建实例也是会一定程序上影响内存的。
2、SparseArray替代HashMap
主要是因为SparseArray不需要对key和value进行auto- boxing(将原始类型封装为对象类型,比如把int类型封装成Integer类型),结构比HashMap简单(SparseArray内部主要使用 两个一维数组来保存数据,一个用来存key,一个用来存value)不需要额外的额外的数据结构(主要是针对HashMap中的HashMapEntry 而言的)使用 SparseArray 的确比 HashMap 节省内存,大概节省 35%左右的内存。总体而言,在Android这种内存比CPU更金贵的系统中,能经济地使用内存还是上策,何况SparseArray在其他方面的表现也不算差(另外,SparseArray删除数据的时候也做了优化——使用了延迟整理数组的方法,可参考官方文档SparseArray,读者可以自行把代码9中的hash.get和sparse.get改成hash.remove和sparse.delete试试,你会发现二者的性能相差无几)
http://www.open-open.com/lib/view/open1402906434918.html
3、使用StringBuffer或者StringBuilder来拼接,而不是加号连接符
使用加号连接符会创建多余的对象,拼接的字符串越长,加号连接符的性能越低。
用String+=拼接字符串的时间27468
用String=String+拼接字符串的时间25813
用String.concat拼接字符串的时间12265
用StringBuffer.append拼接字符串的时间14
用StringBuilder.append拼接字符串的时间8
String类本身是final类型,字符串拼接时,会使用StringBuffer,并调用append,之后再调用toString方法。
而StringBuffer转换成String时,开销相当大。中间不仅创立了临时对象StringBuffer,还每次完后再要转成String。
5、使用LeakCanary优化内存泄漏
eclipse见博客http://blog.csdn.net/liudehuaii18/article/details/46287695
https://github.com/teffy/LeakcanarySample-Eclipse