android 对象 内存释放,Android之Activity结束(finish())之后没有释放内存问题的解决方法...

本文探讨了Android应用中Activity结束但内存未释放的问题,通过分析GC机制,提出了解决方案,包括在onDestroy()中将对象置为null、设置setContentView为null以释放视图资源,以及如何回收控件背景和资源的方法,以减少内存消耗。
摘要由CSDN通过智能技术生成

先来看一个奇怪的问题:

玩android细心一点的就会发现,当打开一个app,点击菜单上的任意一个页面,退回主菜单,看一下ddms,这时的heap used大约在3.5m左右。这时候如果再点击一个页面,退回来,再点击同一个,再退回来,然后无数次(理论上的,呵呵,10次即OK)。

理论上,这个页面所处的activity被销毁,与之相关所有的内存被GC,内存还会在3.5m。

结果是,仅仅10次重复打开关闭同一个activity,内存使用变成5.2m了!而且这多出来的1.7m怎么也去不掉!狂点cause gc? 不理你!我被抛弃了!

痛苦的思索之后,冷静下来,从java的GC机制开始分析。。。。。

我们说GC(Garbage Collection)的真正目的是什么?显而易见。回收没有被其他对象引用到的对象,或者说是引用数为0的对象。

1、释放new出来的对象或者比如findViewById()、 getResourceById()的对象变量

activity在创建界面的时候,由setContentView创建一个主view(即绘制整个界面的父view),由于在finish的时候,这个view还持有activity的引用,因此activity无法被回收,造成内存泄漏。 解决方案显而易见:

public void onDestory(){

textView1 = null;

dataList = null;

......

/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值