部分内容来源:http://www.eoeandroid.com/thread-334686-1-1.html
常见内存泄露原因
Context对象泄漏
1、如果一个类持有Context对象的强引用,就需要检查其生存周期是否比Context对象更长。否则就可能发生Context泄漏。
2、View持有其创建所在Context对象的引用,如果将View对象传递给其它生存周期比View所在Context更长的强引用,就可能会引起内存泄漏。
例如View#setTag(int, Object)的内存泄漏https://code.google.com/p/android/issues/detail?id=18273
3、把Context对象赋给static变量。
避免Context对象泄漏Checklist
1、检查所有持有对Context对象强引用的对象的生命周期是否超出其所持有的Context对象的生命周期。
2、检查有没有把View传出到View所在Context之外的地方,如果有的话就需要检查生命周期。
3、工具类中最好不要有Context成员变量,尽量在调用函数时直接通过调用参数传入。如果必须有Context成员变量时,可以考虑使用WeakReference来引用Context对象。
4、View持有其创建所在Context对象的引用,如果将View对象传递给其它生存周期比View所在Context更长的强引用,就可能会引起内存泄漏。
5、 检查把Context或者View对象赋给static变量的地方,看是否有Context泄漏。
6、检查所有把View放入容器类的地方(特别是static容器类),看是否有内存泄漏。7、使用WeakHashMap也需要注意有没有value-key的引用。
7、尽量使用ApplicationContext。