对于Handler内存泄露产生的原因这里就不说了,我就直接贴代码弱引用的解决办法。
1.提取了一个公共的内 BaseHandleReference
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import java.lang.ref.WeakReference;
public abstract class BaseHandleReference<T> extends Handler {
private WeakReference<T> mReference = null;
public BaseHandleReference(T reference) {
this.mReference = new WeakReference<T>(reference);
}
public BaseHandleReference(Callback callback, T reference) {
super(callback);
this.mReference = new WeakReference<T>(reference);
}
public BaseHandleReference(Looper looper, T reference) {
super(looper);
this.mReference = new WeakReference<T>(reference);
}
public BaseHandleReference(Looper looper, Callback callback, T reference) {
super(looper, callback);
this.mReference = new WeakReference<T>(reference);
}
@Override
public void handleMessage(Message msg) {
final T reference = mReference.get();
if (reference != null) {
referenceHandleMessage(reference, msg);
}
}
public abstract void referenceHandleMessage(T reference, Message msg);
}
2.使用方法 dealWithMessage里面做我们的逻辑处理就好了。
public class TestActivity extends Activity {
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler = new TestHandle(this);
}
private void dealWithMessage(Message msg) {
}
static class TestHandle extends BaseHandleReference<TestActivity> {
public TestHandle(TestActivity reference) {
super(reference);
}
@Override
public void referenceHandleMessage(TestActivity reference, Message msg) {
reference.dealWithMessage(msg);
}
}
}