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内存泄漏的八种可能(上)

你可能感兴趣的:(android,android,内存,内存泄露)