1.资源对象没关闭
如Cursor,file等资源。他们会在finalize(垃圾回收时调用的方法)中关闭,但这样效率太低。容易造成内存泄露。SqliteCursur,当数据量太大时容易造成泄露。
2.使用adapter时,没有使用系统缓存的converView(一般情况下,adapterView都需要优化,不然很容易oom)。
3.即使调用recycle()释放不在使用的Bitmap。
适当降低Bitmap的采样率,如:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;//图片宽高都为原来的一半。
Bitmap bitmap = BitmapFactory.decodeStream(coon.getInputStream(),null,options);
4.使用application的context来代替activity相关的context。(前几天做了个笔试题,问到如果一个activity的context被引用,呢么这个activity能被释放吗)。
5.注册没取消造成内存泄露。
6.集合中对象没清理造成的内存泄露。
7.Handler应该生命为静态对象,并在其内部类中保存一个对外部类的若引用。(开始学的时候也没注意,后来发现不生命静态会有警告,警告信息是将其声明为静态,这也好理解,如果handler在消息没处理完时activity被销毁了怎么办)。