这里草草讲一下
是生命周期的问题
比较容易出现在
listener中
runnable中
原因:
生命周期的问题
listener的代码,和runnable的代码,就算你放在方法的局部,他脱离了方法,依然可以执行。
但是另外的代码不行,他们的生命周期就停留在这个方法作为栈帧在方法栈的时候,方法执行完了就要挂掉了
所以解决方法采用final。栈帧内有一个局部变量表,在栈帧出栈时就不复存在。如果不采用final,引用和对象之间的联系将会被清理,但是如果加了final,就不会被清理了
但是这样不会内存泄漏吗?
考虑一个可达性算法。目前可达性是通过listener或者是runnable通向这里的,一般listener或者runnable失效了,那么他们这个整体gc roots就不可达了,自然会被回收