欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android性能优化-代码优化

程序员文章站 2024-03-17 17:49:28
...

引言

 APP的性能一直都是我们重点关注的对象,偶尔跟好几个同样做Android的朋友聊起来这件事,发现自己公司里面好多Android开发者根本都没有关注过这一点儿(这几年走培训出来的确实不少),尤其是公司新人。他们觉得只要能实现业务逻辑并且不出问题就行了,至于手机端安全软件报的高耗电、偶尔内存溢出、代码冗余、体量庞大的问题压根没有过多关注。可以理解,毕竟现在程序员也不好做了,拿着卖白菜的钱,天天干着卖白粉的活。而且加班加到怀疑人生,压根儿也没有时间去做这些。
 不过,性能优化对于我们想做出一款优秀的APP来说还是挺重要的。如果把这些优化知识能深置自己写代码的潜意识中去,那就太好不过了。不仅能使自己开发的程序更牛逼提升自己的编码能力,甚至对你以后的职业生涯产生深远的影响。

编码准则

  • 避免过多的内存分配
  • 减少冗余的工作
  • 了解语言特性和API

数据结构优化

 在Java开发当中我们常用的数据结构有ArrayList,LinkedList,HashMap,HashSet等,这几个的区别及适用环境一定要搞清楚。回头有时间我针对这个再写一篇文章。今天要说的是HashMap,因为在Android当中有个SparseArray,它在Android中就相当于HashMap在Java中一样。SparseArray是Android平台中特有的稀疏数组的实现。在一些特定场合可以代替HashMap,这样可以提高性能。但是需要特别注意的是SparseArray并不是线程安全的,并且SparseArray中的数据是按照key值大小排列的,最后一定要知道,SparseArray的删除并不是立即删除的。
 在SparseArray中有四种分类:

 - SparseBooleanArray 相当于 HashMap<Integer,Boolean>
 - SparseIntArray 相当于 HashMap<Integer,Integer>
 - SparseLongArray 相当于 HashMap<Integer,Long>
 - SparseArray<String> 相当于 HashMap<Integer,String>

那为什么SparseArray的数据是按照key值得大小排列呢?因为SparseArray的核心查询方法是用的二分查找,如果你没有顺序,也就没有办法使用二分查找了。下面我们看下SparseArray的核心查找算法:

static int binarySearch(int[] array,int size,int value){
    int lo = 0;
    int hi = size - 1;
    while(lo <= hi){
        final int mid = (lo + hi) >>> 1;
        final int midVal = array[mid];
        if(midVal < value){
            lo = mid + 1;
        }else if(midVal > value){
            hi = mid -1;
        }else{
            return mid;//查询到结果
        }
    }
    return ~lo;//查询不到
}

那么我们现在知道了怎么优化,但是还不知道到底要优化何处呢。毕竟一个项目有很多文件,如果当初开发者并不是自己,要是一个一个文件去找岂不是要找到地老天荒么?别着急,Google爸爸早就把这个问题考虑进去了。Android studio自带了一个代码审查工具Lint。有时间我会把这个Lint的使用详细出一片文章,敬请期待。这里我先告诉你怎么寻找要优化的HashMap位置。
首先,找到Analyze->Inspect Code…然后点进去。
Android性能优化-代码优化
然后,选择我们要审查的文件夹,在这里我只选择了APP目录下的所有文件。
Android性能优化-代码优化
其它设置我们暂且默认,最后点击OK
如果你项目比较大的话,应该会跑1分钟左右,项目小的话也就几秒。最后运行结束会在底部展示出来审查结果:
Android性能优化-代码优化

我们要改的HashMap提示是这样的:

HashMap Can be replaced with SparseArray

直接双击点进去,然后自己看着修改就OK了。
当然了,这仅仅是代码优化的冰山一小角。后面我们继续更新。更多内容请关注公众号“计算机自学平台”