当前位置: 首页 > wzjs >正文

建站精灵网站模板十八未成年禁用免费app

建站精灵网站模板,十八未成年禁用免费app,网站做视频流量赚钱吗,知名的中文域名网站文章目录 Android 防抖和节流概述工具类使用源码下载 Android 防抖和节流 概述 防抖(Debounce): 防抖是指在事件被触发后,等待一段时间,如果在这段时间内没有再触发事件,才执行处理函数。如果在这段时间内…

文章目录

  • Android 防抖和节流
    • 概述
    • 工具类
    • 使用
    • 源码下载

Android 防抖和节流

概述

  • 防抖(Debounce):
    • 防抖是指在事件被触发后,等待一段时间,如果在这段时间内没有再触发事件,才执行处理函数。如果在这段时间内又触发了事件,就重新开始计时。
    • 场景:适用于频繁触发的事件,如:输入框搜索。
  • 节流(Throttle):
    • 节流是指在一定时间间隔内,无论事件触发多少次,只执行一次处理函数。
    • 场景:适用于限制频率的操作,如:提交按钮。

工具类

object DebounceThrottleUtils {private val handler = Handler(Looper.getMainLooper())private val debounceMap = ConcurrentHashMap<String, Runnable>()private val throttleMap = ConcurrentHashMap<String, Long>()/*** 防抖*  @param key 唯一标识符(建议使用View ID)*  @param delayMillis 防抖时间间隔(毫秒)*  @param block 要执行的操作*/fun debounce(key: String, delayMillis: Long, block: () -> Unit) {// 移除之前的任务debounceMap[key]?.let {handler.removeCallbacks(it)debounceMap.remove(key)}// 创建新任务val runnable = Runnable {block()}debounceMap.put(key, runnable)// 延迟执行任务handler.postDelayed(runnable, delayMillis)}/*** 节流处理* @param key 唯一标识符(建议使用View ID)* @param intervalMillis 节流时间间隔(毫秒)* @param block 要执行的操作*/fun throttle(key: String, intervalMillis: Long, block: () -> Unit) {val now = System.currentTimeMillis()val lastTime = throttleMap[key] ?: 0if (now - lastTime >= intervalMillis) {throttleMap[key] = nowblock()}}/*** 清理指定(在onDestroy中调用)*/fun clear(key: String) {debounceMap[key]?.let {handler.removeCallbacks(it)debounceMap.remove(key)}throttleMap.remove(key)}/*** 清理全部(在onDestroy中调用)*/fun clearAll() {handler.removeCallbacksAndMessages(null)debounceMap.clear()throttleMap.clear()}
}/*** 获取View的key*/
fun View.getKey(): String {return "click_${this.id}"
}/*** 获取EditText的key*/
fun EditText.getKey(): String {return "text_change_${this.id}"
}/*** 防抖扩展方法*/
fun View.clickDebounce(debounceTime: Long = 500L, action: () -> Unit) {val key = getKey()setOnClickListener {DebounceThrottleUtils.debounce(key, debounceTime, action)}
}/*** 节流扩展方法*/
fun View.clickThrottle(throttleTime: Long = 300L, action: () -> Unit) {val key = getKey()setOnClickListener {DebounceThrottleUtils.throttle(key, throttleTime, action)}
}/*** 防抖扩展方法*/
fun EditText.textChangeDebounce(debounceTime: Long = 300L, action: (Editable?) -> Unit) {doAfterTextChanged { editable ->val key = getKey()DebounceThrottleUtils.debounce(key, debounceTime, {action(editable)})}
}

使用

etSearch.textChangeDebounce(debounceTime = 1000L) {Log.e("TAG", "textChange:${it.toString()}")
}
btnSubmit.clickDebounce(debounceTime = 1000L) {Log.e("TAG", "click-debounce-${System.currentTimeMillis()}")
}
btnSubmit2.clickThrottle(throttleTime = 1000L) {Log.e("TAG", "click-throttle-${System.currentTimeMillis()}")
}

源码下载

http://www.dtcms.com/wzjs/125743.html

相关文章:

  • 做鸡人网站广告推广赚钱在哪接
  • 儿童网站欣赏国际最新消息
  • 做网站用apache还是nginxseo招聘网
  • 提交图片的网站要怎么做国际新闻热点事件
  • 重庆江北网站建设百度收录规则2022
  • 如何查看网站服务器系统营业推广的目标通常是
  • 云南商城网站建设北京网站优化哪家好
  • 做美股的数据网站视频号视频下载助手app
  • 保山市城市建设网站腾讯广告投放平台官网
  • 上海web前端开发培训seo站内优化最主要的是什么
  • c#可以做网站吗网络推广方案七步法
  • 天津河西做网站贵吗网络推广是什么
  • wordpress.模板seo网站关键词排名软件
  • 现在手机网站用什么做的好广告传媒公司主要做什么
  • 最便宜的网站建设公司semir是什么牌子
  • 怎么做网站搜索引擎网络营销技术
  • 南京做网站哪家最好互联网营销案例分析
  • i营销宁波seo网络推广主要作用
  • 网站建设微信小程序开发推广网站排名优化seo教程
  • 深圳制作网站开发费用四川省人民政府
  • 牛视频网站建设全自动引流推广软件下载
  • 桐乡做网站的公司网站友情链接有什么用
  • 简述网站开发的流程百度搜索关键词统计
  • jsp怎么做网站昆山网站建设公司
  • 免费搭建开鲁网站seo不用下载
  • 河南郑州汽车网网站建设南昌seo网站推广
  • 图书馆网站建设百度咨询电话 人工
  • 做系统前怎么保存网站上的收藏网址浏览大全
  • 网站很久没被收录的新闻怎么处理太原网站推广公司
  • 时尚大气的网站设计长沙关键词优化平台