一种防止AndroidApp连续触发点击事件的方法与流程

    专利查询2022-07-07  126


    一种防止android app连续触发点击事件的方法
    技术领域
    1.本发明涉及移动开发领域,特别涉及一种防止android app连续触发点击事件的方法。


    背景技术:

    2.随着移动互联网的发展,人们享受着这些发展所带来的便利也更依赖于通过一些移动软件app来完成生活中各种各样的事情,在这个操作的过程中软件与用户的做的最多的交互就是点击与回馈,这些给予用户反馈的数据或者根据用户操作所执行的指令都依赖于后端庞大的服务器,在这种情况之下如果用户因不当的操作快速重复点击程序就会重复请求后端接口,服务器接到指令也会重复只想操作,可想在大批用户同时重复执行同样的操作会给服务器造成多少不必要的压力,服务器重复执行切可能会造成应用程序的卡顿甚至崩溃,这样不但给服务器不必要的压力也大大降低了用户的体验。


    技术实现要素:

    3.本发明要解决的技术问题是克服现有技术的缺陷,提供一种防止android app连续触发点击事件的方法。
    4.本发明提供了如下的技术方案:
    5.本发明提供一种防止android app连续触发点击事件的方法,包括以下步骤:
    6.(1)构思对点击事件管控的策略代码,首先通过android提供的api获取到首次点击的系统当前时间进行内存缓存,当点击事件后续触发再次进行时间的获取,与缓存时间进行时间差计算(这里需要根据不同场景需要定义阈值,用来定义事件连续触发的最大时间差,经阈值判定为连续点击直接return否则继续向下执行);
    7.(2)自定义注解,该注解用于对点击事件执行方法进行标记作用域为类方法(在实际项目中会有需要连续点击这样的业务需要,这里的注解就起到了过对点击事件管控的过滤作用);
    8.(3)通过asm在编译期间通过字节码hook所有的onclick(view view)方法,在该方法内逻辑源代码执行前通过字节码的方式插入事先定义好管控点击事件的代码,拦截异常点击事件的触发;
    9.具体步骤如下:
    10.①
    通过classreader来解析每一个.class文件中的事件元素;
    11.②
    自定义classvisitor基于方法/变量/声明/类注解的元素适配器来过滤class事件元素序列中相应的事件对象,通过字节码的形式进行无痕注入新的代码;
    12.③
    通过classwriter来重新将更新后的class事件序列转化成新的.class文件提供虚拟机解析运行。
    13.与现有技术相比,本发明的有益效果如下:
    14.通过编译阶段修改字节码指令的方式获取方法调用插入逻辑管控,达到的效果与
    重复改动程序源码一致,避免了应用程序因运行环境不同带来的兼容性和稳定性问题,在编译期间一次性对完成对所有点击事件的管控,无需考虑对线上版本进行源码修改的问题,也避免了在程序源码编写过程中的重复操作以及在某些细节的遗漏。
    附图说明
    15.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
    16.图1是本发明的实施例示意图之一;
    17.图2是本发明的实施例示意图之二。
    具体实施方式
    18.以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。其中附图中相同的标号全部指的是相同的部件。
    19.实施例1
    20.如图1-2,本发明提供一种防止android app连续触发点击事件的方法,包括以下步骤:
    21.(1)构思对点击事件管控的策略代码,首先通过android提供的api获取到首次点击的系统当前时间进行内存缓存,当点击事件后续触发再次进行时间的获取,与缓存时间进行时间差计算(这里需要根据不同场景需要定义阈值,用来定义事件连续触发的最大时间差,经阈值判定为连续点击直接return否则继续向下执行);
    22.(2)自定义注解,该注解用于对点击事件执行方法进行标记作用域为类方法(在实际项目中会有需要连续点击这样的业务需要,这里的注解就起到了过对点击事件管控的过滤作用);
    23.(3)通过asm在编译期间通过字节码hook所有的onclick(view view)方法,在该方法内逻辑源代码执行前通过字节码的方式插入事先定义好管控点击事件的代码,拦截异常点击事件的触发;
    24.具体步骤如下:
    25.①
    通过classreader来解析每一个.class文件中的事件元素;
    26.②
    自定义classvisitor基于方法/变量/声明/类注解的元素适配器来过滤class事件元素序列中相应的事件对象,通过字节码的形式进行无痕注入新的代码;
    27.③
    通过classwriter来重新将更新后的class事件序列转化成新的.class文件提供虚拟机解析运行。
    28.最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。


    技术特征:
    1.一种防止android app连续触发点击事件的方法,其特征在于,包括以下步骤:(1)构思对点击事件管控的策略代码,首先通过android提供的api获取到首次点击的系统当前时间进行内存缓存,当点击事件后续触发再次进行时间的获取,与缓存时间进行时间差计算(这里需要根据不同场景需要定义阈值,用来定义事件连续触发的最大时间差,经阈值判定为连续点击直接return否则继续向下执行);(2)自定义注解,该注解用于对点击事件执行方法进行标记作用域为类方法(在实际项目中会有需要连续点击这样的业务需要,这里的注解就起到了过对点击事件管控的过滤作用);(3)通过asm在编译期间通过字节码hook所有的onclick(view view)方法,在该方法内逻辑源代码执行前通过字节码的方式插入事先定义好管控点击事件的代码,拦截异常点击事件的触发;具体步骤如下:

    通过classreader来解析每一个.class文件中的事件元素;

    自定义classvisitor基于方法/变量/声明/类注解的元素适配器来过滤class事件元素序列中相应的事件对象,通过字节码的形式进行无痕注入新的代码;

    通过classwriter来重新将更新后的class事件序列转化成新的.class文件提供虚拟机解析运行。

    技术总结
    本发明公开了一种防止AndroidApp连续触发点击事件的方法。本发明中项目编译期间通过执通过字节码Hook所有点击事件执行方法(如有需要被多次点击的需求,通过注解方式对类方法添加标记可自动被过滤),再将对应的拦截点击事件的逻辑代码通过ASM插入方法执行前,可过滤多余响应事件,从而实现防止连续触发点击事件的目的,减少了服务端的负担,提高用户体验以及AndroidAPP的性能。以及AndroidAPP的性能。以及AndroidAPP的性能。


    技术研发人员:胡显晴 王振 张氣箔 张坤洋
    受保护的技术使用者:天翼电子商务有限公司
    技术研发日:2021.12.30
    技术公布日:2022/5/25
    转载请注明原文地址:https://tc.8miu.com/read-1874.html

    最新回复(0)