Android 功能防抖

功能防抖

       理解的意思是防止短时间内多次点击或者输入导致的重复请求。

常见情景

       1.Activity跳转,我们一般用Button写onClick监听然后跳转,如果你的目标Activity的启动模式为默认,会出现多次创建目标activity问题。

       2.单控件多次点击请求网络数据。

       3.多控件的组合防抖,只取最后一次请求。

       4.搜索功能,数据量大的时候会出现卡顿现象,例如在EditText中输入车牌号进行查询,我们会在onTextChanged中监听输入,如果不做防抖限制,会输入一个字符请求后台一次然后拿到数据刷新列表数据,一步一卡顿。

解决方法

      1.跳转问题,可以利用时间判断,记录第一次点击的时间,第二次点击的时间和第一次点击的时间间隔小于预设值,则不处理。这种方法有个小问题,多次点击的时候如果不添加加载对话框,会有卡顿时间,主要看目标Activity的初始化时间。

public abstract class StaticListener implements View.OnClickListener {
    private static long lastTimeMillis;
    private static final long MIN_CLICK_INTERVAL = 1000;

    protected boolean isTimeEnabled() {
        long currentTimeMillis = System.currentTimeMillis();
        if ((currentTimeMillis - lastTimeMillis) > MIN_CLICK_INTERVAL) {
            lastTimeMillis = currentTimeMillis;
            return true;
        }
        return false;
    }
}

    2.单控件重复点击,可以利用RxjavathrottleFirst操作符设置请求过滤,它只会放出每个时间段内的第一个对象。还有种做法是添加状态码或者对按钮enable功能设置,在请求之前写入不可点击状态,请求的返回(出错返回和成功返回)里恢复可点击状态。

    3.多控件组合防抖,看了一篇文章是对需要的组合控件全部缓存监听,取时间段内的最后一个监听事件即可。

    4.利用handler,handler可以设置消息tag,可以延时发送消息,就是在 延时的时间内,再次触发会移除之前要发送的消息,然后重新发送消息,直到用户不触发了,等 延时时间到了,消息就会发送出去了,在做处理即可。

参考文章:1.https://blog.csdn.net/qq_17766199/article/details/51441968

                   2.https://mp.weixin.qq.com/s/2KZbpGlVheeRriItrKGMng

 

你可能感兴趣的:(android)