首先我知道题目的答案肯定是否定的,因为假如finish()能一键清理所有引用的话,就不会有那么多memory leak之类的bug了。
我查到memory leak一般是由非静态内部类(non-static inner class)或非静态匿名类导致的,因为它们总是持有外部类的引用;如果外部类就是Activity,就会导致GC无法回收。
那问题来了,finish()既然能清除掉其他所有的引用,为什么就不能也清除掉非静态内部类持有的引用呢?
例如现在有10个View,它们本身就带有getContext()方法,说明它们都持有对其所在的Context的引用;然后这个context其实是一个Activity,里面还定义了个非静态内部类,那么这个内部类也持有该Activity的引用。那么现在执行finish(),Activity本该销毁,凭什么其他10个View的引用都清除了,就只剩下这个非静态内部类持有的引用不清除呢?