handler内存泄漏解决方式

public abstract class MyHandler<T> extends Handler {

    private WeakReference<T> mTargets;

    public MyHandler(T target) {
        mTargets = new WeakReference<>(target);
    }

    public MyHandler(T target, Looper looper) {
        super(looper);
        mTargets = new WeakReference<>(target);
    }

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        T target = mTargets.get();
        if (target != null) {
            handle(target, msg);
        }
    }

    public abstract void handle(T target, Message msg);
}
private static class PickerViewHandler extends MyHandler<MyPickerView> {

        PickerViewHandler(MyPickerView target) {
            super(target);
        }

        @Override
        public void handle(MyPickerView target, android.os.Message msg) {
            if (Math.abs(target.mMoveLen) < SPEED) {
                target.mMoveLen = 0;
                if (target.mTask != null && !target.isDataListEmpty()) {
                    target.mTask.cancel();
                    target.mTask = null;
                    target.performSelect();
                }
            } else {
                target.mMoveLen = target.mMoveLen - target.mMoveLen / Math.abs(target.mMoveLen) * SPEED;
            }
            target.invalidate();
        }

    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。