Android性能优化总结(转)

时间:2014-07-07 09:52:03   收藏:0   阅读:298

前言

性能优化本身是一个很大的主题,涵盖程序的方方面面,任何不慎的操作,都有可能对性能造成比较大的影响,要知道程序的性能是可以累加的,多处的性能低下, 会影响整体的性能,其后果可能也是多方面的,本文总结了目前工作中,所需要知道的大部分性能优化点,一部分个人总结,一部分来自于互联网。但整体上,都是 提纲性的,并没有列出具体的实例,因为写这方面主题的达人实在太多了,所以,我得站在巨人的肩膀上,具体细节,请参考对应的链接。

性能低下的现象

性能低下的后果:降低用户体验

容易引发性能问题的点

从全局考虑

从微观考虑

小规模修改程序,提高性能:程序的性能是可以累加的

一些观点

方法论

在进行性能优化前,确保该功能是否已基本完整。

 

bubuko.com,布布扣

Key Points

性能瓶颈的发现

找出瓶颈,集中火力对付占用绝大部分资源的少量代码。

途径:

  1. Code Review
    通过最基本优化策略优化代码
  2. 代码性能测量
    1) 通过性能Log记录函数调用时间,找出瓶颈点
        LogUtil.d(TAGConstant.TAG_PERFORMANCE,"Load media info into group begin......");
        longstart = System.currentTimeMillis();
                     ……
        LogUtil.d(TAGConstant.TAG_PERFORMANCE,“Load media info into group end, Total Time: ” + (System.currentTimeMillis() -start) + “ ms”);
    2) 使用性能分析工具:
        Traceview(参考:Android性能调优工具TraceView介绍
        Monkey
        monkeyrunner
         注:后两个我个人没有使用过,不做介绍,优先推荐使用TraceView工具 

如何优化

优化本身是一个很大的主题,我这是主要是针对于Android平台来说的。个人认为,优化可以分成好几部分:

  1. 一是JAVA语法层次通用的优化,如尽量使用局部变量(栈变量),IO缓冲等。
  2. 二是通用的Android性能优化,如同步改异步,各种缓存的使用等
  3. 三是应用程序内部的性能优化,如内部逻辑、数据插入及查找、数据结构的安排与组织等

 

以下部分针对于上述3种类型,分别进行简要说明:

基本优化策略:JAVA语法层次的优化

(以下部分来自于:http://blog.csdn.net/aomandeshangxiao/article/details/8115612#t1,具体做法请参考该连接)

  1. 类和对象使用技巧
    1. 尽量少用new生成新对象
    2. 使用clone方法生成新对象
    3. 尽量使用局部变量栈变量
    4. 减少方法调用
    5. 使用final类和final/static/private方法
    6. 让访问实例内变量的 getter/setter 方法变成final  
    7. 避免不需要的 instanceof 操作  
    8. 避免不需要的造型操作  
    9. 尽量重用对象  
    10. 不要重复初始化变量  
    11. 不要过分创建对象
  1. Java IO技巧
    1. 使用缓冲提高IO性能
    2. lnputStream比Reader高效,OutputStream比Writer高效
    3. 在适当的时候用byte替代char
    4. 有缓冲的块操作IO要比缓冲的流字符IO
    5. 序列化时使用原子类型
    6. 在finally块中关闭stream 
    7. SQL语句
    8. 尽早释放资源
  1. 异常Exceptions使用技巧
    1. 避免使用异常来控制程序流程
    2. 尽可能重用异常
    3. 将trycatch 块移出循环  
  1. 线程使用技巧
    1. 在使用大量线程Threading的场合使用线程池管理
    2. 防止过多的同步
    3. 同步方法而不要同步整个代码段
    4. 在追求速度的场合用ArrayList和HashMap代替Vector和Hashtable
    5. 使用notify而不是notifyAll
    6. 不要在循环中调用 synchronized同步方法   
    7. 单线程应尽量使用 HashMap,ArrayList
  1. 其它常用技巧
    1. 使用移位操作替代乘除法操作可以极大地提高性能
    2. 对Vector中最后位置的添加删除操作要远远快于埘第一个元素的添加删除操作
    3. 当复制数组时使用System.arraycop方法
    4. 使用复合赋值运算符
    5. 用int而不用其它基本类型
    6. 在进行数据库连接和网络连接时使用连接池
    7. 用压缩加快网络传输速度一种常用方法是把相关文件打包到一个jar文件中
    8. 在数据库应用程序中使用批处理功能
    9. 消除循环体中不必要的代码
    10. 为vectors 和 hashtables定义初始大小  
    11. 如果只是查找单个字符的话用charat代替startswith
    12. 在字符串相加的时候使用 charat()代替startswith() 如果该字符串只有一个字符的话  
    13. 对于 boolean 值避免不必要的等式判断  
    14. 对于常量字符串用string 代替 stringbuffer   
    15. 用stringtokenizer 代替 indexof 和substring  
    16. 使用条件操作符替代if cond else  结构 
    17. 不要在循环体中实例化变量  
    18. 确定 stringbuffer的容量  
    19. 不要总是使用取反操作符  
    20. 与一个接口 进行instanceof 操作  
    21. 采用在需要的时候才开始创建的策略  
    22. 通过 StringBuffer 的构造函数来设定他的初始化容量可以明显提升性能  
    23. 合理使用 javautilVector
    24. 不要将数组声明为public static final
    25. HaspMap 的遍历
    26. array数组和 ArrayList 的使用  
    27. StringBufferStringBuilder 的区别
    28. 尽量使用基本数据类型代替对象   
    29. 用简单的数值计算代替复杂的函数计算比如查表方式解决三角函数问题  
    30. 使用具体类比使用接口效率高但结构弹性降低了但现代 IDE都可以解决这个问题 
    31. 考虑使用静态方法
    32. 应尽可能避免使用内在的GET/SET 方法 
    33. 避免枚举浮点数的使用   
    34. 二维数组比一维数组占用更多的内存空间大概是 10倍计算 
    35. SQLite
    1. 奇偶判断

 

实际上,Android本身的Training文档也提供给我们很多可参考的内容,以下仅枚举一些KeyPoint,当然,有的内容是与上面的策略是重复的。

原文参考:Performance Tips

译文参考:Android应用开发者指南:性能优化(1)

其它参考:Android开发性能优化简介

总体上来说,想要写出高效代码,我们要遵循两条基本的原则:

Key Point

 

通用Android性能优化

布局优化

(原文参考:ImprovingLayout Performance

 

其它优化点

参考:DisplayingBitmaps Efficiently

应用程序内部的性能优化

该部分的优化应该是依据程序的不同而不同,没有万般皆准的法则,目前从我做过的程序来看,实际上,上述的性能优化点基本上已经能够解决很多性能问题了。

在我所做的程序中,主要的优化手段是:

总结

性能优化本身是对代码的重构和反思过程,通过优化性能,能找出我们很多设计、逻辑上的不足。

优化的过程往往很痛苦,但在做过这个过程后,个人在编程水平、设计水平上都会有很大的提高。

很多优化的思想应该做为编码规范的一部分,需要我们反复实践,在写代码时,第一反应所得出的代码就是最优的。

 转载自:http://blog.csdn.net/woyaowenzi/article/details/9273839

Android性能优化总结(转),布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!