深度分析内存泄漏原因,使用MAT工具检测内存泄露和性能

造成内存泄漏原因:

场景一:静态变量导致的内存泄漏

例如:mainactivity中

  private static context scontext;

   @override

    protected void oncreat(bundle savedinstancestate){

    .............................................

    scontext=this;

   }

泄漏点:静态变量scontext引用,activity无法正常销毁

场景二:单例模式导致的内存泄漏

    存在一个testmanager类,可以接收外部的注册并将外部的监听器存储起来;接着让activity实现一个ondatalistener接口并向testmanager注册监听,由于过程中缺少解注册的操作引起内存泄漏,原因activity的对象被单例模式的testmanager持有,单例模式特点是其生命周期和application保持一致,因此activity对象无法被及时释放

场景三:属性动画导致的内存泄漏

如果在activity中播放动画没有在ondestroy中去停止动画,那么动画会一直播放,尽管界面没有动画效果,并且这个时候的activity的view会被动画持有,导致activity无法释放,解决方案:在activity的ondestroy中调用animator.cancel()停止动画


Android Studio的界面 原生内存监测



一般情况下,高密度的手机,一个页面大概就会消耗20M内存,如果发现退出界面,程序内存迟迟不降低的话,可能就发生了严重的内存泄露。 

我们可以反复进入该界面,然后点击dump java heap 这个按钮,然后Android Studio就开始干活了,下面的图就是正在dump 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值