我们知道,直接创建Hanlder:
private Handler = new Handler(......)As会报一个可能存在内存泄漏的错误,这是
匿名内部类持有外部对象所致我知道;
但是private Handler = new Handler(new Callback(....))却不报错,难道传一个参就
不是匿名内部类了?这部分源码也看了,依然不是很明白。
请知道的大神知道下。
个人不同意楼上的说法,使用CallBack也是匿名内部类,也会导致内存泄露(已测试),因为Handler直接引用了他的成员mCallBack,这个CallBack也引用了外部类,即Activity
根据官方的说法应该是使用静态内部类
https://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html
如果想用CallBack的应该自己实现一个Handler使用WeakReference来封装CallBack
https://www.jianshu.com/p/88cf7a923b56
有错误还请指出
这两种方式是不一样的,第一种是匿名内部类,第二种不是的
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//do something
super.handleMessage(msg);
}
};
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
//do something
return true;
}
});
请注意两种用法的差别