内存泄露

1.构造Adapter时,没有使用缓存的convertView
以构造ListView的BaseAdapter为例,在BaseAdapter中提供了方法
public View getView(int position,View convertView,ViewGroup parent)
来向ListView提供每一个item所需要的View对象。初始化时ListView会从BaseAdapter中根据当前屏幕布局实例
化一定数量的View对象,同时ListView会将这些View对象缓存起来。当向上滚动ListView时,原先位于最上面的
list item的view对象会被回收,然后被用来构造新出现的最下面的list item。这个构造过程就是由getView()
方法完成的,getView()的第二个形参View convertView就是被缓存起来的list item的View对象
由此可以看出,如果我们不去使用convertView,而是每次都在getView()中重新实例化一个View对象的话,即浪
费时间,也造成内存垃圾,给垃圾回收增加压力,如果垃圾回收来不及的话,虚拟机将不得不给应用进程分配更
多的内存,造成内存泄露。
2.Bitmap对象不再使用时调用recycle()释放内存
3. 线程为终止容易造成内存泄露,譬如在Activity中关联了一个Activity的Thread,在退出Activity地切记结束
线程。一个典型的例子就是HandlerThread的run方法是一个死循环,他不会自己结束,线程的生命周期超过了
Activity的生命周期,我们必须手动在Activity的销毁方法中调用thread.getLooper().quit(),才不会泄露。
4. 对象的注册与反注册没有成没有成对出现造成的内存泄露,譬如注册广播接收器、注册观察者(典型的数据库的监听)等
5 .创建与关闭没有成对出现造成的内存泄露,譬如Cursor资源必须手动关闭,WebView必须手动销毁,流等对象必须手动关闭等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值