@SuppressLint(“HandlerLeak”)能防止内存泄漏吗?
使用@SuppressLint(“HandlerLeak”)究竟有什么作用?防止内存泄漏还是只是去掉警告???
@SuppressLint(“HandlerLeak”)
项目中经常会使用到Handler,用的时候随手就直接new一个出来便会有黄色警告,(Handler可能会内存泄漏,推荐你用静态内部类+实例化弱引用),使用快捷键提示时便会在Handler上面自动加上了@SuppressLint(“HandlerLeak”)这个注解,但我认为这个并没有起到防止内存泄漏的作用,还是推荐如提示说明:将Handler声明为静态类,在外部类中,实例化对外部类的弱引用,并在实例化处理程序时将此对象传递给处理程序。
静态Headler
//静态内部类 弱引用
private MyHandler mHandler = new MyHandler (getApplication());
static class MyHandler extends Handler{
private WeakReference weakReference;
public MyHandler (Context context){
weakReference = new WeakReference(context);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (weakReference == null) {
return;
}
switch(msg) {
case xxx:
break;
default:
break;
}
}
Handler.Callback
官方还提供了一个Handler.Callback接口。
private Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message message) {
return false;
}
});
这样似乎也只是避免了警告,但没有实际作用,所以为了防止内存泄漏还是推荐使用静态内部类加弱引用的方式来实现Handler。