1.在字符串频繁操作时,尤其是字符串拼接时多使用StringBuffer或者StringBuilder,第一个是线程安全的,第二个线程不安全,但是速度快一些。
2.循环优化,一般的写法是这样
List list = getList();
for (int i = 0; i < list.size(); i++) {
}
最好是将循环中的变量提取到左边,比如这样
List list = getList();
for (int i = 0,p =list.size(); i < p; i++) {
}
这样list.size方法只用调用1次
3.在try...catch中使用的变量如果不再使用,就在catch中置空,使其更快的回收
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查询优化,一般的查询语句是这样写的
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex(People.NAME));
String number= cursor.getString(cursor.getColumnIndex(People.NUMBER));
}
这样的方式没有错误,但是在数据量大的情况下会很慢,只需要一点点优化就可以提升很多
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,如果是查询多选前面的,如果是插入删除频繁可以考虑后者。