内存泄露:
外部类持有Activity引用;
异步执行耗时任务,持有Activity,但是Activity已经finish;
Handler,Runable会隐式持有Activity,耗时操作未完成,Activity回收。
这些都是由于一个对象已经完成任务要被回收,但是由于其他对象持有当前对象引用,造成java不能进行GC,导致内存泄漏。
解决:
1.对某些对象采用软引用,在GC是可以回收;
2.BraodcastReceiver、Cursor最好在Base中进行注册和解注;
3.handler在 activity finish进行remove;
内存
JAVA是在JVM所虚拟出的内存环境中运行的,内存分为三个区:堆、栈和方法区。
栈(stack):是简单的数据结构,程序运行时系统自动分配,使用完毕后自动释放。优点:速度快。
堆(heap):用于存放由new创建的对象和数组。在堆中分配的内存,一方面由java虚拟机自动垃圾回收器来管理,另一方面还需要程序员提供修养,防止内存泄露问题。
方法区(method):又叫静态区,跟堆一样,被所有的