AsyncTask导致的内存泄露
常常说的答案是:AsyncTask经常被当作内部类使用,内部类会持有外部Activity。当Activity关闭的时候,Activity得不到释放。
解决办法:1 类设置为static 2 Activity引用使用弱引用
新的理解:
1 经常给view设置的listener,经常也是设置匿名内部类,为什么不会导致内存泄漏??
同样的内部类为什么 AsyncTask就会内存泄漏
理解:AsyncTask导致的内存泄露并不仅仅是因为内部引用,而是因为内部有一个运行的线程,
线程持有Activity,线程又是GCRoot的一种。
GC发生的时候,会判断当前对象,是否有间接或者直接的GCRoot引用。这里因为线程是GCRoot,引用了Activity,所以导致Activity不能释放。
所以只要AsyncTask运行完成或者没有运行,也不会有内存泄漏的问题。