您的位置:首页 > 移动开发 > Android开发

Android性能优化

2016-05-25 16:46 260 查看
一、内存优化

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: