android其实很简单--内存相关

内存泄漏

java是垃圾回收语言,无需开发者管理内存分配

逻辑上的失误导致内存泄漏:当应用不再需要这个对象的时候仍未释放该对象的所有应用

1.Context,由于Content包含了大量的内存引用。
全局的process的static引用activity

2.static view

2.静态inner classes
内部类持有外部类的强引用

3.匿名类
当acitivity被销毁的时候,匿名的AsyncTask会持有activity的强引用直到asynctask结束

避免在Activity中使用非静态内部类,如果该类的实例会存在在Activity的生命周期之外

4.Handler
与匿名类类似,当message没处理完时,handler不会被释放

5.Threads
thread没运行结束时,也会持有activity

6.TimerTask
只要是匿名类的实例,不管是不是在工作线程,都会持有Activity的引用,导致内存泄漏。
静态内部类代替匿名类,使用弱引用访问外部类

7.Sensor Manager listener
没有注销监听器,也会导致内存泄漏

GC

没有GCRoot的对象将被回收

1.强引用

  • 当其指示的对象没有任何强引用对象指向它;

2.软引用

  • 当其指示的对象没有任何强引用对象指向它;
  • 当虚拟机内存不足时。

3.弱引用

  • WeakReference不改变原有强引用对象的垃圾回收时机,一旦其指示对象没有任何强引用对象时,此对象即进入正常的垃圾回收流程。

    1. 虚引用

方法

LeakCanary

参考

简书:[译]Android内存泄漏的八种可能(上)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值