package net.coding.program.common;
import android.os.Handler;
import android.os.Message;
import java.lang.ref.WeakReference;
/**
* Created by chenchao on 15/7/13.
* 使用弱引用的handler,防止出现内存泄露
*/
public class WeakRefHander extends Handler {
private final WeakReference<Callback> mRef;
private final int mLoopTime;
private int NO_LOOP = -1;
public WeakRefHander(Callback loopAction, int loopTime) {
super();
mRef = new WeakReference<>(loopAction);
mLoopTime = loopTime;
}
// 不循环
public WeakRefHander(Callback loopAction) {
super();
mRef = new WeakReference<>(loopAction);
mLoopTime = NO_LOOP;
}
@Override
public void handleMessage(Message msg) {
Callback action = mRef.get();
if (action != null) {
action.handleMessage(msg);
if (mLoopTime != NO_LOOP) {
sendEmptyMessageDelayed(0, mLoopTime);
}
}
}
public void start() {
removeMessages(0);
sendEmptyMessageDelayed(0, 0);
}
public void start(int what, long delay) {
removeMessages(0);
removeMessages(what);
sendEmptyMessageDelayed(what, delay);
}
public void stop() {
removeMessages(0);
}
public void clear() {
removeMessages(0);
mRef.clear();
}
}