[关闭]
@linux1s1s 2019-02-15T14:35:56.000000Z 字数 679 阅读 2003

Handler 构造器小细节

AndroidMechanism 2015-07


下面两个生成Handler实例的方法有什么不同?

  1. private Handler handler1 = new Handler(new Callback() {
  2. @Override
  3. public boolean handleMessage(Message msg) {
  4. return false;
  5. }
  6. });
  1. private Handler handler2 = new Handler(){
  2. @Override
  3. public void handleMessage(Message msg) {
  4. };
  5. };

你可能会说没有多大区别,真的是这样吗?

到底有木有区别,先来看看源代码,再论区别

此处输入图片的描述

很明显的L35行,如果这个callback返回的是true 就不会继续往下执行了,所以这个callback有截获的作用。

另外还有一个小的区别

handler2 相当于:

  1. private class Handler2 extends Handler{
  2. @Override
  3. public void handleMessage(Message msg) {
  4. super.handleMessage(msg);
  5. }
  6. }
  7. private Handler handler2 = new Handler2();

handler1 作为普通成员变量。
handler2 作为匿名内部类的成员变量 所以这个匿名内部类持有外部类的引用, inner ---->> outer 所以如果inner没有释放(因为是个Handler跟线程关联)所以outer很容易引发内存泄露。

所以两种写法,表面上看没有多大区别,实际上可能引发的结果完全不同。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注