Android内存泄漏问题

Android内存泄漏问题主要有以下几个方面:

1:资源对象没有关闭

资源对象比如(Cursor、File文件等)打开之后,在我们不使用的时候应该及时关闭,以便回收内存。如果仅仅把它们设为null,而不关闭,就会造成内存泄漏。有些资源对象如SqliteCursor,如果我们没有关闭它,系统在回收它时也会关闭它,但是这样效率太低。因此,对于资源型对象,我门在不使用它是要执行close()将它关闭,再设为null,在程序退出时一定要确保我们的资源型对象已经关闭。

2、构造Adapter时,没有使用缓存的convertView

以构造ListView的BaseAdapter为例,在BaseAdapter中提供了方法:public View getView(int position, View convertView, ViewGroup parent),来向ListView提供每一个item所需要的view对象。初始时ListView会从BaseAdapter中根据当前的屏幕布局实例化一定数量的View对象。当往上滑动ListView时,位于最上面的list item的view对象就会被回收,然后被用来构造最下面新出现的list item。这个构造过程就是由getView()完成的,getView()的第二个形参convertView就是被缓存的item的view对象(如果没有被缓存,convertView为null)。因此,如果我们不适用convertView,而是在getView()中每次都重新实例化一个view对象的话,既浪费资源又浪费时间,也会使内存占用越来越大。

3、Bitmap对象不使用时,没有recycle()

非必须,视情况而定。

4、注册没有取消造成的内存泄漏

调用registerReceiver后未调用unregisterReceive;

5、集合中的对象没清理

通常把对象的引用放入集合中,当我们不在使用对象的时候,没有把它从集合中清除,集合就会越来越大。

6、context引起的内存泄漏

如果你想保持一个长期生存的对象,并且这个对象需要一个context,记得使用application context。通过调用Context.getApplicationContext() or Acitvity.getApplication()来获得。

Context里如果有线程,一定要在onDestroy()里及时停掉。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值