Android高性能编程(1)--基础篇

本文探讨了Android高性能编程的基础,强调了访问成员变量与本地变量的性能差异,建议避免在for循环条件中调用方法,并推荐使用改进的for循环。此外,还提到了使用ordinal()方法优化枚举变量访问,以及重要的是,要记得及时关闭资源对象,这些都是Android应用开发中的基础性能优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  关于专题  
    本专题将深入研究Android的高性能编程方面,其中涉及到的内容会有Android内存优化,算法优化,Android的界面优化,Android指令级优化,以及Android应用内存占用分析,还有一些其他有关高性能编程的知识.
     随着技术的发展,智能手机硬件配置越来越高,可是它和现在的 PC 相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要 求远远高于 PC 的桌面应用程序。以上理由,足以需要开发人员更加专心去实现和优化你的代码了。选择合适的算法和数据结构永远是开发人员最先应该考虑的事 情。同时,我们应该时刻牢记,写出高效代码的两条基本的原则:(1)不要做不必要的事;(2)不要分配不必要的内存。
      高效的代码由两点的来决定:1.高效的数据结构 ;2高效的执行算法。所以我们在做应用性能优化的时候,要从各个方面考虑现有的数据结构是否适合当前的功能或者产品,还有就是现有的执行算法是否高效。
     
     今天第一篇文章,主要给大家分享一些高性能编程的基础知识,其中结合了一些网友和官网的总结分析。
     先推荐一本大神的书:Pro Android Apps Performance Optimization 
    
   内存优化
      
       Android系统对每个软件所能使用的RAM空间进行了限制如:Nexus one 对每个软件的内存限制是24M,同时 Java 语言本身比较消耗内存,dalvik 虚拟机也要占用一定的内存空间,所以合理使用内存,彰显出一个程序员的素质和技能。
      (1)了解 JIT
  即时编译(Just-in-time   Compilation,JIT),又称动态转译(Dynamic   Translation),是一种通过在运行时将字节码翻译为机器码,从而改善字节码编译语言性能的技术。即时编译前期的两个运行时理论是字节码编译和动 态编译。Android 原来 Dalvik 虚拟机是作为一种解释器实现,新版(Android 2.2+ )将换成 JIT 编译器实现。性能测试显示,在多项测试 中新版本比旧版本提升了大约 6 倍。
        (2) 避免创建不必要的对象
  就像世界上没有免费的午餐,世界上也没有免费的对象。虽然 gc 为每个线程都建立了临时对象池,可以使创建对象的代价变得小一些,但是分配内存永远 都比不分配内存的代价大。如果你在用户界面循环中分配对象内存,就会引发周期性的垃圾回收,用户就会觉得界面像打嗝一样一顿一顿的。所以,除非必要,应尽 量避免尽力对象的实例。下面的例子将帮助你理解这条原则: 当你从用户输入的数据中截取一段字符串时,尽量使用 substring 函数取得原始数据的一个子串,而不是为子串另外建立一份拷贝。这样你就有一 个新的 String 对象,它与原始数据共享一个 char 数组。   如果你有一个函数返回一个 String 对象,而你确切的知道这个字符串会被附加到一个 StringBuffer,那么,请改变这个函数的参数和实现方式,   直接把结果附加到 StringBuffer 中,而不要再建立一个短命的临时对象。
  一个更极端的例子是,把多维数组分成多个一维数组:
  int 数组比 Integer 数组好,这也概括了一个基本事实,两个平行的 int 数组比  ( int , int 对象数组性能要好很多。同理,这适用于所有基本类型的组合。如果你想用一种容器存储  ( Foo ,Bar)  元组,尝试使用两个单独的   Foo []  数组和 Bar []  数组,一定比  ( Foo ,Bar)  数组效率更高。(也有例外的情况,就是当你建立一个 API,让别人调用它的时候。这时候你要注 重对 API 接口的设计而牺牲一点儿速度。当然在 API 的内部,你仍要尽可能的提高代码的效率)
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值