Android性能优化

来源:互联网 发布:黄金交易软件手机版 编辑:程序博客网 时间:2024/05/22 17:51

一、内存优化

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

0 0
原创粉丝点击