内存泄漏

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

更多相关文章

  1. 程序员挑战高薪,你必须会的十大面试题《一》
  2. 用volley从网页获取json数据
  3. Android(安卓)TwoLineListItem
  4. 从源码看ANDROID中SQLITE是怎么通过CURSORWINDOW读DB的
  5. 跟着官方学习Android(安卓)— Services
  6. android:largeHeap
  7. Android中系统自带数据库文件中的多表联合查询疑问
  8. Android(安卓)官方架构 --- Lifecycle分析
  9. Android系统设计中存在设计模式分析

随机推荐

  1. Android实现多线程下载文件的方法
  2. android之XMPP过程分析(连接、文件监听、
  3. Android(安卓)自定义View 使用Matrix(矩
  4. android ViewGroup中的LayoutParams的理
  5. ButterKnife源码解析
  6. Android(安卓)IPC之ContentProvider和Soc
  7. Android(安卓)Launcher 设置壁纸
  8. GitHub 上排名前 100 的 Android(安卓)开
  9. Android的IPC机制之Binder详细介绍
  10. Android(安卓)getWidth和getMeasuredWidt