伪代码:
class Activity{
Handler manHandler = new Handler(){
handlerMessage(){ // 匿名内部类的一个方法
// 在内部类中可访问外部类的方法,是因为内部类默认持有外部类的实例
helloH();
// 同下
Activity.this.helloH();
}
}
// 外部类的一个方法
void helloH(){
}
}
1.我们的在匿名内部类Handler中handlerMessage方法内可以访问外部类的方法:helloH()。是因为内部类默认持有外部类的实例。
2.因为Handler在sendMessage时可以delay延迟发送消息,这是通过message类中的target变量持有Handler的实例,在时间到达时取出消息再交给Handler处理。
3.当调用外部类的destroy方法时,因为MessageQueue持有message,message持有Handler,而Handler又持有外部类的实例。JVM就无法真正的回收掉外部类。导致内存泄漏。