内存泄漏的原因在这里就不解释了,直接实战
一、首先定义父类Handler,生成两个构造方法,一个无参数,一个可以传任意类型参数。任意参数使用弱饮用进行包裹,防止一直持有外包类的引用导致内存泄漏。
package so.lizhiqiang.widget;
import android.os.Handler;
import java.lang.ref.WeakReference;
/**
* Created by lizhiqiang on 2018/8/27.
*/
public class LzqHandler<T> extends Handler {
private WeakReference<T> weakReference = null;
public LzqHandler(T o) {
weakReference = new WeakReference<T>(o);
}
public LzqHandler() {
}
public T getObject() {
return weakReference != null ? weakReference.get() : null;
}
}
二、在需要使用Handler的地方自定义静态内部类,继承LzqHandler
private static class MyRunnable extends LzqRunnable<PurchasePassActivity> {
public MyRunnable(PurchaseActivity o) {
super(o);
}
@Override
public void run() {
PurchaseActivity ac = getObject();
if (ac != null) {
ac.handle();
}
}
}
三、在类中定义hanlde方法处理相应的逻辑
private void handle() {
purchaseModel.payResultCheck(orderNo, mType, new OnLoadListener() {
@Override
public void onComplete(BaseBean baseBean) {
purchaseImp.hideLoading(false);
Bean bean = (Bean) baseBean;
}
@Override
public void onFailure(Throwable e, int code) {
purchase.hideLoading(false);
}
});
}
这样就可以解决内存溢出的问题了