Android开发基础知识Android优化之代码优化

  本章节是对《Android优化技术详解》一书中代码优化的读后总结,选取了其中常用的一些需要注意的优化细节。

    1.在字符串频繁操作时,尤其是字符串拼接时多使用StringBuffer或者StringBuilder,第一个是线程安全的,第二个线程不安全,但是速度快一些。

    2.循环优化,一般的写法是这样

[java] view plain copy
print ?
  1. List list = getList();  
  2. for (int i = 0; i < list.size(); i++) {  
  3.       
  4. }  
		List list = getList();
		for (int i = 0; i < list.size(); i++) {
			
		}
    最好是将循环中的变量提取到左边,比如这样

[java] view plain copy
print ?
  1. List list = getList();  
  2. for (int i = 0,p =list.size(); i < p; i++) {  
  3.       
  4. }  
		List list = getList();
		for (int i = 0,p =list.size(); i < p; i++) {
			
		}
这样list.size方法只用调用1次

   3.在try...catch中使用的变量如果不再使用,就在catch中置空,使其更快的回收

[java] view plain copy
print ?
  1. Object object =null;  
  2. try {  
  3.     object = new Object();  
  4. catch (Exception e) {  
  5.     object =null;  
  6. }  
		Object object =null;
		try {
			object = new Object();
		} catch (Exception e) {
			object =null;
		}
   4.少用new创建对象,会调用所有的构造函数,如果一个对象实现了Cloneable接口,可以使用clone方法。

   5.乘法或者除法运算尽量使用位运算,能大幅提升运算速度。

   6.不修改的static变量,请用static final常量替代。

   7.如果返回了String类型,而且返回后的使用就是要加入到StringBuffer中,可以直接传入StringBuffer。

   8.编译器会将构造函数之外的初始化操作移动到构造函数中,所以尽量直接在构造函数中初始化。

   9.如果知道具体的大小,可以在创建StringBuffer,Vector等对象时设置一个大小,可以不用考虑因自增长所带来的分配新的内存问题。

   10.避免使用枚举,在编译时会独立生成一个很大的.class文件,会牺牲执行的速度以及增大文件体积。

   11.cursor查询优化,一般的查询语句是这样写的

[java] view plain copy
print ?
  1. while(cursor.moveToNext()){  
  2.     String name = cursor.getString(cursor.getColumnIndex(People.NAME));  
  3.     String number= cursor.getString(cursor.getColumnIndex(People.NUMBER));  
  4. }  
		while(cursor.moveToNext()){
			String name = cursor.getString(cursor.getColumnIndex(People.NAME));
			String number= cursor.getString(cursor.getColumnIndex(People.NUMBER));
		}
 这样的方式没有错误,但是在数据量大的情况下会很慢,只需要一点点优化就可以提升很多

[java] view plain copy
print ?
  1. int mName = cursor.getColumnIndex(People.NAME);  
  2. int mNumber = cursor.getColumnIndex(People.NUMBER);  
  3. while(cursor.moveToNext()){  
  4.     String name = cursor.getString(mName);  
  5.     String number= cursor.getString(mNumber);  
  6. }  
		int mName = cursor.getColumnIndex(People.NAME);
		int mNumber = cursor.getColumnIndex(People.NUMBER);
		while(cursor.moveToNext()){
			String name = cursor.getString(mName);
			String number= cursor.getString(mNumber);
		}
   12.Listview采用ViewHolder进行优化,新出的recycleview已经强制使用viewHolder了。

   13.在用户的触屏操作时,当用户按下手指时,一般不仅会调用ACTION_DOWN,还会有ACTION_MOVE进行频繁的调用,所以需要考虑action_move中的事件处理。

   14.surfaceview在绘制上可以采用脏矩形进行刷新,使帧数更高一些。

   15.恰当地使用缓存可以使用户体验更好,比如网络请求数据可以在请求到数据后进行缓存,在下次加载时直接读取缓存数据即可,分为磁盘缓存,内存缓存,数据库缓存。

   16.选用适合的数据结构也很重要,ArrayList和LinkedList,如果是查询多选前面的,如果是插入删除频繁可以考虑后者。


你可能感兴趣的:(优化,代码优化,安卓基础,安卓开发基础知识)