1.避免创建不必要的对象,比如尽量使用substring函数取得原始数据的一个子串,而不是为子串另外建立一份拷贝;
2.使用静态方法代替虚拟方法,比如不需要访问对象的字段时,将此方法设置为静态,这样调用这个方法时就不需要更新这个对象的状态;
3.将成员变量缓存到本地,因为访问对象的成员变量比访问本地变量慢得多;比如for(int i=0;i<list.size();i++) ,改写成int length=list.size; for(int i=0;i<lengthi++);
4.避免使用浮点型,浮点型比整形慢大概2倍;尽量使用乘法而不是除法,比如a*0.5而不是a/2;因为有的芯片有硬件乘法,而缺少硬件除法;
5.复杂的算法用c,c++完成,然后用JNI调用;
6.减少不必要的全局变量,尽量避免static成员变量引用资源耗费多的实例,比如context;
8.不要过多指望gc,比如对图片,if(bitmap.isrecycled==false) { bitmap.recycle() bitmap=null}; .对大图片进行低质量压缩,二次采样
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize=10;
Bitmap bm=BitmapFactory.decodeFile(,options);
imageview.setImageBitmap(bm);
bm.recycle();
bm=null;
- ImageView i = new ImageView(mContext);
- BitmapFactory.Options options=new BitmapFactory.Options();
- options.inSampleSize = 10;
- //貌似这个options的功能是返回缩略图,10即表示长和宽为原来的1/10,即面积为原来的1/100
- //缩略图可以减少内存占用
- Bitmap bm = BitmapFactory.decodeFile(lis.
- get(position).toString(),options);
- i.setImageBitmap(bm);
- bm.recycle();
9.了解java的4中引用方式,强引用,软引用,弱引用,虚引用;
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止, 也不,会靠随意回收具有强引用的对象来解决内存不足的问题。
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以 被程序使用。软引用可用来实现内存敏感的高速缓存。
在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个 优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
顾名思义,就是形同虚设。与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能 被垃圾回收器回收。了解并熟练掌握这4中引用方式,选择合适的对象应用方式,对内存的回收是很有帮助的。
10.使用实体类比接口好,比如能确定使用ArrayList的地方不要用List,因为接口的引用会比实体的引用多花1倍的时间;
11.适量使用缓存,不要过多使用,不用时清空缓存
12.关闭资源对象,对sqlite,cusor,文件,I/O操作要记得显示关闭。
13.使用relativeLayout减少视图嵌套
14.多线程解决复杂计算,使用线程池,避免频繁的网络请求
15.对于listview使用viewholder保存数据结构,复用convertview;
16.在程序中注册的对象,不需要的时候在程序中明确的取消注册
17.android 性能优化工具 Traceview,Systrace 参考http://www.open-open.com/lib/view/open1370251009945.html#_label3
参考资料 :http://www.cnblogs.com/dyllove98/archive/2013/08/01/3231097.html