android其实很简单--内存相关
16lz
2021-01-24
内存泄漏
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不改变原有强引用对象的垃圾回收时机,一旦其指示对象没有任何强引用对象时,此对象即进入正常的垃圾回收流程。
- 虚引用
方法
LeakCanary
参考
简书:[译]Android内存泄漏的八种可能(上)
更多相关文章
- 程序员挑战高薪,你必须会的十大面试题《一》
- 用volley从网页获取json数据
- Android(安卓)TwoLineListItem
- 从源码看ANDROID中SQLITE是怎么通过CURSORWINDOW读DB的
- 跟着官方学习Android(安卓)— Services
- android:largeHeap
- Android中系统自带数据库文件中的多表联合查询疑问
- Android(安卓)官方架构 --- Lifecycle分析
- Android系统设计中存在设计模式分析