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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 开发中,防抖和节流是常用的技术,用于控制用户交互产生的事件频率,以提升用户体验和减轻系统负担。 防抖(Debounce)是指在一段时间内只执行一次操作,而忽略其他连续的操作。例如,当用户连续点击按钮时,我们可以设置一个时间间隔,在这个时间间隔内只响应最后一次点击操作,忽略之前的所有点击操作。 节流(Throttle)是指在一段时间内只执行一次操作,但是会响应所有操作。例如,当用户连续滑动屏幕时,我们可以设置一个时间间隔,在这个时间间隔内只执行一次滑动操作,但是会响应所有滑动事件。 实现防抖和节流可以使用 Handler、RxJava、Coroutines 等方式。下面以使用 Handler 实现防抖为例: ```java private static final long DEBOUNCE_DELAY = 300; // 设置防抖延迟时间 private Handler mHandler = new Handler(); private Runnable mRunnable; public void onClick(View view) { if (mRunnable != null) { mHandler.removeCallbacks(mRunnable); // 移除之前的延迟操作 } mRunnable = new Runnable() { @Override public void run() { // 执行操作 } }; mHandler.postDelayed(mRunnable, DEBOUNCE_DELAY); // 添加延迟操作 } ``` 上述代码中,当按钮被点击时,先移除之前的延迟操作,然后创建一个新的延迟操作并添加到 Handler 中,延迟时间为 DEBOUNCE_DELAY。这样就能实现防抖效果,只执行最后一次点击操作。 需要注意的是,防抖和节流的具体实现方式可以根据需求和框架选择合适的方法,上述代码只是一种示例,具体应用场景和实现方式可能会有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值