1、创建抽象的BaseHandler类继承Handler
/**
* Created by zhaoliang on 2018/9/20
*/
public abstract class BaseHandler extends Handler {
protected WeakReference<Activity> activityWeakReference;
protected WeakReference<Fragment> fragmentWeakReference;
private BaseHandler() {
}//构造私有化,让调用者必须传递一个Activity 或者 Fragment的实例
public BaseHandler(Activity activity) {
this.activityWeakReference = new WeakReference<>(activity);
}
public BaseHandler(Fragment fragment) {
this.fragmentWeakReference = new WeakReference<>(fragment);
}
@Override
public void handleMessage(Message msg) {
if (activityWeakReference == null || activityWeakReference.get() == null || activityWeakReference.get().isFinishing()) {
// 确认Activity是否不可用
LogUtil.i("Activity is gone");
handleMessage(msg, Constant.ACTIVITY_GONE);
} else if (fragmentWeakReference == null || fragmentWeakReference.get() == null || fragmentWeakReference.get().isRemoving()) {
//确认判断Fragment不可用
LogUtil.i("Fragment is gone");
handleMessage(msg, Constant.ACTIVITY_GONE);
} else {
handleMessage(msg, msg.what);
}
}
/**
* 抽象方法用户实现,用来处理具体的业务逻辑
*
* @param msg
* @param what {@link What}
*/
public abstract void handleMessage(Message msg, int what);
}
//复制时报错的是自己定义的静态常量
2、在fragment中的使用
//1、继承BaseHandler
private class NoLeakHandler extends BaseHandler {//继承抽象类复写方法
public NoLeakHandler(Fragment fragment) {
super(fragment);
}
@Override
public void handleMessage(Message msg, int what) {
if (msg.what == 1) {
setData();
num++;
if (flag) {
//开启动画
start();
flag = false;
} else {
//终止动画
end();
flag = true;
}
}
}
}
//2、初始化
NoLeakHandler handler = new NoLeakHandler(this);
//3、使用
handler.sendMessage(msg);
//4、在onDestroy()方法中进行移除handler
handler.removeCallbacksAndMessages(null);