@linux1s1s
2019-02-15T14:35:56.000000Z
字数 679
阅读 2003
AndroidMechanism
2015-07
下面两个生成Handler实例的方法有什么不同?
private Handler handler1 = new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
return false;
}
});
private Handler handler2 = new Handler(){
@Override
public void handleMessage(Message msg) {
};
};
你可能会说没有多大区别,真的是这样吗?
到底有木有区别,先来看看源代码,再论区别
很明显的L35行,如果这个callback返回的是true 就不会继续往下执行了,所以这个callback有截获的作用。
另外还有一个小的区别
handler2 相当于:
private class Handler2 extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
}
private Handler handler2 = new Handler2();
handler1 作为普通成员变量。
handler2 作为匿名内部类的成员变量 所以这个匿名内部类持有外部类的引用, inner ---->> outer 所以如果inner没有释放(因为是个Handler跟线程关联)所以outer很容易引发内存泄露。
所以两种写法,表面上看没有多大区别,实际上可能引发的结果完全不同。