Android点击事件节流工具

发布时间:2024年01月03日
@FunctionalInterface
public interface Throttle {

    /**
     * @param callback 回调函数
     * @param delay    流速控制时间,单位毫秒
     * @return 使用lambda和闭包构造的匿名节流阀对象
     */
    static Throttle build(Throttle callback, long delay) {
        AtomicLong startTime = new AtomicLong(System.currentTimeMillis());
        AtomicReference<Thread> thread = new AtomicReference<>();
        return () -> {
            final long currentTime = System.currentTimeMillis();
            synchronized (callback) {
                if (thread.get() != null) thread.get().interrupt();
                if (currentTime - startTime.get() >= delay) {
                    callback.callback();
                    startTime.set(currentTime);
                } else {
                    thread.set(new Thread(() -> {
                        try {
                            Thread.sleep(delay);
                        } catch (InterruptedException ignored) {
                            return;
                        }
                        callback.callback();
                    }));
                    thread.get().start();
                }
            }
        };
    }

    /**
     * 执行节流阀
     */
    void callback();
}
Throttle  throttle = Throttle.build(new Throttle() {
    @Override
    public void callback() {
        Log.e(TAG, "真正执行方法");
        executeMethod("1");
    }
}, 2000);
tvLeft1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        throttle.callback();
    }
});
文章来源:https://blog.csdn.net/kqz2014/article/details/135371642
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。