//Handler避免内存泄漏的正确写法,采用弱引用用Handler.Callback来实现,可有效避免内存泄漏
private Handler launchHandler = new Handler(new WeakReference<Handler.Callback>(
new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
//code...
return true;
}
}).get());
通常直接new Handler 重写handleMessage编译器会提醒有内存泄漏隐患,采用弱引用的写法可有效避免内存泄漏,关于Handler.Callback的返回值看源码
/**
* Handle system messages here.
*/
public void dispatchMessage(Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
得知如果该方法mCallback.handleMessage返回true不会执行Handler的handlerMessage方法