关于an-d-ro-id:安卓点击防抖优化手册非代码层指导

31次阅读

共计 2665 个字符,预计需要花费 7 分钟才能阅读完成。

1.1.1. 什么是点击防抖?

  在利用日常应用过程中,短时间内超过一次点击某个按钮会触发屡次这个按钮的后续逻辑代码运行,这时退出某些伎俩屏蔽掉除第一次以外的点击事件去反复触发逻辑的管制称为点击防抖。

1.1.2. 为什么须要增加点击防抖?

  正如下面介绍的,在没有增加点击防抖的状况下短时间内屡次点击某按钮会屡次触发相干逻辑,比方屡次关上某个页面,屡次提交某些网络申请等等,这些通常不是咱们所冀望的,而且有些逻辑屡次触发也有可能引起程序卡顿、数据异样、利用解体等问题。

  综上所述,咱们在某些场景下是须要增加点击防抖的,以此来进行限度用户无意或无心的短时间内频繁点击按钮的操作,来躲避由此产生的冀望外的运行后果。

1.1.3. 点击防抖的距离

  点击防抖的距离是否越长越好呢?当然不是,过长的点击防抖距离会给用户造成按钮点击有效的感觉,通常点击防抖的距离不宜大于 500ms。

  点击防抖的距离是否越短越好呢?当然也不是,距离过短,点击防抖也就失去了意义,点击防抖自身的意义就是通过屏蔽短时间的间断点击来躲避异样逻辑,如果点击防抖距离过短,那这个设置自身就失去了他本身的意义。通常点击防抖的距离应大于 100ms。

  综上所述,通常状况下点击防抖距离应取 100ms 到 500ms 之间,然而这个值并非固定值,须要依据理论的业务场景进行调整,个别准则是和你的点击事件处理逻辑工夫成正比,逻辑解决工夫越长,则点击距离应该越长,逻辑解决工夫越短,则点击距离应该尽量短。比方点击逻辑是关上页面,这个逻辑只有 100ms,则点击距离应该尽量短,比方点击逻辑是关上蓝牙,这个逻辑有 800ms,则点击距离就须要适量减少。

1.1.4. 是否所有点击都须要点击防抖?

  并不是,通常咱们须要增加点击防抖都是依据理论业务去填加,并不倡议所有按钮都对立增加,这是因为有很多按钮都是实时操作的,如果增加了点击防抖,会让用户产生点击有效的体验。

  那么哪些场景是倡议增加点击防抖的呢?

  首先,反复点击事件对业务逻辑有异样影响的,这种状况除了要增加点击防抖,也要管制短时间内两次事件如何躲避影响。

  其次,点击业务逻辑是非即时操作,但具体耗时通常也不会很长(1 秒左右),比方关上敞开蓝牙、关上敞开 wifi 这种点击事件,这种是须要增加点击防抖的,真正的耗时操作反而不倡议增加点击防抖,比方网络申请、数据 IO,这种耗时操作能够间接点击后禁用按钮点击,并且展现加载弹窗,在业务逻辑实现后敞开弹窗,从新启用点击按钮。

1.1.4. 点击防抖优化进阶

  点击防抖的办法除了最根本的增加点击距离外还须要思考异常情况,比方某个点击事件逻辑,通常实现工夫为 100ms-200ms,这时如果增加了 250ms 的点击距离,那么就能够躲避屡次点击造成的反复逻辑,然而在某些异常情况下如果点击事件逻辑为 500ms,则仍然可能呈现屡次点击无效,这时候就可能须要思考进行优化。

  还是以经典的关上敞开蓝牙为例,通常关上敞开蓝牙是比拟快的,然而有时候零碎反馈会呈现提早,这时候如果处理不当就可能呈现蓝牙状态按钮跳动、状态显示错乱等问题,这种状况下,简略粗犷的应用点击距离并不适合,倡议采纳以下逻辑进行解决:

  关键点有几个:

l 监听蓝牙状态按钮的父布局点击事件而不是间接监听蓝牙按钮的 onCheck 事件,因为关上敞开蓝牙须要依据播送状态去显示实在状态,check 事件容易凌乱,尽管也有躲避办法,然而最简略的就是间接禁用 switch 或 checkbox 的点击,而去监听父布局。

l 能够在监听到点击后立刻去扭转按钮选中状态而不是去期待播送回调,这样用户可见的就是立刻失效,就防止了用户看到状态没有变动而被动重复去点击按钮。

l 点击事件触发后间接禁用点击,期待最终状态播送回来后再复原父布局的点击。

l 最终状态播送回来后须要再去依据理论状态回来后须要再去设置一遍蓝牙状态按钮的选中状态,这个次要是为了避免关上或敞开失败时状态显示谬误的问题,然而通常是不会出错的,这时候如果按钮状态呈现闪动阐明蓝牙底层就有问题,是须要底层去排查。

  如果为了进一步晋升用户体验,也能够在点击事件触发后蓝牙状态显示闪动动画,示意用户正在进行操作,在最终蓝牙状态播送回来后敞开这个动画,这也是大部分手机厂商的做法。

1.1.5. 总结

  点击防抖的终极优化其实就是程序对用户的点击给出即时反馈,用户间断点击某个按钮绝大部分状况肯定不是源于手抖,而是因为点击了某个按钮,然而没有收到反馈,那么用户下意识就会再次点击或者频繁点击,最终造成程序数据异样或解体。

  比方点击一个按钮跳转页面,如果用户点击后 1 秒没有跳转,那么用户就有可能再次点击,这是大概率事件,所以这种状况,实际上咱们应该想的是怎么去优化页面关上速度,而不是间接把关上页面的事件防抖距离设置为 1 秒,再比方关上蓝牙这个操作,如果用户点击后你在收到最终播送之后才去扭转按钮状态,且两头没有任何交互揭示,那么当这个播送回来的工夫稍久,用户就会认为点击有效,而再次点击,这些才是用户频繁点击的本源,没有几个用户会无聊到频繁去点击一个按钮。

  那么从交互角度来说,给这些逻辑工夫可能会有提早到事件对立应用弹出 loading 的形式行吗?答案是不行,因为这种逻辑的工夫只是偶然提早,或者略微提早,在这样的场景下如果弹窗,有可能只是弹窗闪现一下就隐没了,因为逻辑执行完了,这种在用户看起来是十分好受的。为什么 ios 零碎直到现在仍然被认为晦涩度超过安卓,哪怕很多时候利用关上速度等并不如安卓呢,因为 ios 给用户的交互体验是远超安卓的,安卓在很多交互的优化上官网没有进行解决,齐全须要开发者本人去解决,而很多人其实是不会花工夫去解决的。所以为了产品更好的体验,多去溯源一些体验不好问题的本源尤为重要。

相干教程

Android 根底系列教程:

Android 根底课程 U - 小结_哔哩哔哩_bilibili

Android 根底课程 UI- 布局_哔哩哔哩_bilibili

Android 根底课程 UI- 控件_哔哩哔哩_bilibili

Android 根底课程 UI- 动画_哔哩哔哩_bilibili

Android 根底课程 -activity 的应用_哔哩哔哩_bilibili

Android 根底课程 -Fragment 应用办法_哔哩哔哩_bilibili

Android 根底课程 - 热修复 / 热更新技术原理_哔哩哔哩_bilibili

本文转自 https://juejin.cn/post/7050037712451010567,如有侵权,请分割删除。

正文完
 0