Android代码优化(一)

来源:互联网 发布:电子cad软件 编辑:程序博客网 时间:2024/06/05 08:58

最近在优化代码,把一些优化的东西整理一下记录,个人感觉代码优化技术含量很高,暂且把此次的问题归为初级优化一,后续技术学深了,再去写一篇优化之二

避免创建不必要的对象

对象的创建都是要占用资源的,如果你在循环程序中创建对象,由于过多的占用内存,你将定时的启动内容回收机制,从而降低了运行速度。所以,当你不需要时,你应该避免创建类实例。

必须使用字符串时,考虑 当字符串不可变化时,使用String类型;当可变时使用StringBuffer类型。

当需要字符串+时,使用StringBufferString s = “aaa” + bbb”;

上面的语句实际上创建了三个String对象,性能受损。

StringBuffer s= new StringBuffer();

s.append(“aaa”);

s.append(“bbb”);

上面仅仅创建一个对象。

避免创建重复对象

String s= new String("abc");//永远不要这么干!

Strong s = "abc";//改成这样

多使用原始封装的方法

当处理字符串时,应该多的使用像String.indexOf(),String.lastIndex(),以及与它们同等的方法。

避免在类内部进行Getters/Setters

     据说C++语言中,经常使用getterseg. i=getCount())而不用局部变量的形式(i=mCount),因为编译器可以通过内联进入getters

但是在Android中,此习惯是不好的,因为调用虚拟机的代价很高,比直接使用局部变量费时的多.所以,在公共的接口中定义getterssetters是可取的,当时,在类中,你应该直接通过局部变量来访问。

如:

for (int i = 0; i < this.getCount(); i++)

应该写为:

  int mCount = this.getCount();
  for (int i = 0; i < mCount; i++)

多使用接口的具体实现类(Prefer virtual over interface)

当你要声明一个HashMap对象时,你可以声明它为一个HashMap类,或一个Map 类:

Map myMap = new HashMap();   HashMap myMap = new HashMap();

哪一个更好的呢?

  PC机编程中,你应该更倾向与声明为Map,因为你可以调用Map中提供的接口来实现更多的功能。但是在手机开发中,通过此种方法的调用,比直接调用方法多花费一倍多的时间。所以,当你用HashMap类,而且它满足自己的需要,就不需要用声明为Map的方法。这个我单独写了个demo测试了一下,确实如此,至于根本原因还没搞清楚,暂且先记住用法。

了解和使用库

Java提供了强大而复杂的类库,在完成某个常用功能之前,看看Java类库中是否已经存在类似功能的类库。一方面减少工作量,一方面使得自己的程序更加简洁高效。例如:向量(Collection,Set,List…)中字符串的排序:Collections.sort(v)

忽略大小写的排序:Collections.sort(v,String.CASE_INSENSITIVE_ORDER)

还有许多实用类库,还需要平时多学习。

使用SparseArray代替HashMap<Integer,Object> 

SparseArray是android里为<Interger,Object>这样的HashMap而专门写的类,目的是提高效率,其核心是折半查找函数(binarySearch)。在Android中,当我们需要定义HashMap<Integer, E> hashMap = new HashMap<Integer, E>();时,我们可以使用后面的方式来取得更好的性能。SparseArray<E> sparseArray = new SparseArray<E>();

相应的也有SparseBooleanArray,用来取代HashMap<Integer, Boolean>,SparseIntArray用来取代HashMap<Integer, Integer>。

     这里就先说这些大路边上的,代码优化水很深啊,还需要多潜进去研究学习才能写出高效的代码!


0 0