CN113254067B - 一种基于Rx框架防止功能抖动的方法 - Google Patents

一种基于Rx框架防止功能抖动的方法 Download PDF

Info

Publication number
CN113254067B
CN113254067B CN202110571215.9A CN202110571215A CN113254067B CN 113254067 B CN113254067 B CN 113254067B CN 202110571215 A CN202110571215 A CN 202110571215A CN 113254067 B CN113254067 B CN 113254067B
Authority
CN
China
Prior art keywords
annotation
class
view control
event
click
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110571215.9A
Other languages
English (en)
Other versions
CN113254067A (zh
Inventor
林夕凯
宋舰
李佳航
曾辉
邓文科
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Hongmagic Cube Network Technology Co ltd
Original Assignee
Sichuan Hongmagic Cube Network Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan Hongmagic Cube Network Technology Co ltd filed Critical Sichuan Hongmagic Cube Network Technology Co ltd
Priority to CN202110571215.9A priority Critical patent/CN113254067B/zh
Publication of CN113254067A publication Critical patent/CN113254067A/zh
Application granted granted Critical
Publication of CN113254067B publication Critical patent/CN113254067B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3089Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Mathematical Physics (AREA)
  • Library & Information Science (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于Rx框架防止功能抖动的方法,包括:在gradle配置中引入APT注解处理工具;定义注解类、注解的对象和注解的作用范围;自定义数据的生产者Observable,用于点击控件时发送事件去下游异步处理;Activity页面View控件OnClickListener方法体引入ChViewAnnotation注解;BaseActivity页面中引入注解工具管理类,便于自动解析注解并根据注解属性自动生成防抖动代码。本发明统一对View控件Onclick事件监控,不需要单独写点击事件;统一配置连续点击间隔时间,快速地实现功能防抖时间配置。

Description

一种基于Rx框架防止功能抖动的方法
技术领域
本发明涉及软件技术领域,具体的说,是一种基于Rx框架防止功能抖动的方法。
背景技术
目前Android端使用过程中,经常会遇到这样的情况,用户在短期时间内重复对某个View控件进行点击操作引起抖动即功能抖动,如果频繁的重复点击,则业务流程会持续的调用。但实际上,这种短期快速重复地点击多数是误操作,也没有必要重复进行,此外增加额外的服务器请求,造成资源开销浪费,用户体验较差。现有技术中主要采用以下两种解决方案:方案一、每个View控件独立在自身OnClickListener事件中设置重复间隔时间,防止多次提交;方案二、写一个基类BaseActivity,基类OnClickListener事件中统一设置重复间隔时间,每个子页面继承基类实现功能防抖效果。但是,方案一存在的缺陷:每个View控件都要独立写防止功能抖动事件代码,不方便后期统一维护;方案二存在的缺陷:基类虽统一设置防功能抖动事件代码,此时抖动间隔时间已在基类定好,子类View控件无法独立设置自己的抖动间隔时间。
发明内容
本发明的目的在于提供一种基于Rx框架防止功能抖动的方法,用于解决现有技术中解决功能抖动的方法中采用每个View控件独立在自身OnClickListener事件中设置重复间隔时间防止多次提交存在每个View控件都要独立写防止功能抖动事件代码,不方便后期统一维护的问题;以及采用在基类BaseActivity、基类OnClickListener事件中统一设置重复间隔时间,每个子页面继承基类实现功能防抖效果,存在子类View控件无法独立设置自己的抖动间隔时间的问题。
本发明通过下述技术方案解决上述问题:
一种基于Rx框架防止功能抖动的方法,包括:
步骤S100:在模块gradle配置中引入APT注解处理工具,用于对注解进行编译、解析和自动生成View控件点击OnClickListener事件代码;
步骤S200:定义注解类、注解的对象和注解的作用范围,用于识别Activity页面方法体中是否引入注解;
步骤S300:自定义一个数据的生产者Observable,用于实现用户每次点击View控件时发送View控件点击OnClickListener事件去下游异步处理;结合Android Rx框架提供的清晰、准确处理异步问题和事件的方法,提升了用户体验;
步骤S400:Activity页面View控件OnClickListener方法体引入ChViewAnnotation注解;
步骤S500:BaseActivity页面中引入注解工具管理类ChViewAnnotationManager,便于编译器自动解析Activity页面方法体配置的注解并根据注解属性自动生成防抖动代码。
通过上述配置和定义,本发明实现ChViewAnnotationManager注解管理类统一对View控件Onclick事件监控,不需要单独写点击事件;能够统一配置连续点击间隔时间,不需要单独配置和逐一替换,能够快速地实现功能防抖时间配置。
所述步骤S100具体为:在模块gradle配置中引入annotations注解的依赖包androidx.appcompat:appcompat:1.2.0,用于对注解进行编译、解析和自动生成View控件点击OnClickListener事件代码,gradle主要配置如下:
implementation'androidx.appcompat:appcompat:1.2.0。
所述步骤S200具体为:
步骤S210:声明ChViewAnnotation类文件为注解类,类名前加入@interface代表该类为注解类;类名前加入@Target设置注解作用范围为ElementType.METHOD,表示作用于方法;类名前加入@Retention设置注解的生命周期为运行时注解RetentionPolicy.RUNTIME,表示注解不仅能保留到class字节码文件中,还能在运行通过反射获取到;
步骤S220:在ChViewAnnotation注解类中自定义3个属性,分别为:用于记录View控件Id的idValues;View控件重复点击间隔时间intervalTime以及间隔时间单位intervalTimeUnit。intervalTime根据自生业务需求,可设置默认值,代表默认单位时间内重复点击无效。intervalTimeUnit时间单位默认TimeUnit.SECONDS秒,也可自行配置TimeUnit.MINUTES分钟或TimeUnit.MILLISECONDS毫秒。
所述步骤S300具体为:自定义ChViewObservable数据生产者类,通过观察者Observer调用onNext()方法下发View控件点击事件。
所述步骤S400具体为:Activity页面onClick方法头体上引入ChViewAnnotation注解,根据业务需求自定义idValues的属性值;intervalTime和intervalTimeUnit属性值采用默认值或者定义值。
所述步骤S500中的注解工具管理类ChViewAnnotationManager实现具体View控件点击逻辑,当intervalTime间隔时间配置为0时,直接取消功能防抖,调用默认onClick事件;否则,通过调用系统自带的Rx.throttleFirst方法实现功能防抖。
本发明与现有技术相比,具有以下优点及有益效果:
(1)本发明在保证业务的情况下,通过ChViewAnnotationManager注解管理类统一对View控件Onclick事件监控,不需要单独写点击事件,方便后期统一维护。
(2)本发明在保证业务的情况下,在基类BaseActivity、基类OnClickListener事件中统一配置连续点击间隔时间,不需要单独配置,不需要逐一替换,快速地实现功能防抖时间配置。每个子页面继承基类实现功能防抖效果,解决了现有技术中子类View控件无法独立设置自己的抖动间隔时间的问题。
附图说明
图1为本发明的流程图。
具体实施方式
下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
实施例:
结合附图1所示,一种基于Rx框架防止功能抖动的方法,包括:
步骤S100:引入annotations注解的依赖包,通过在模块gradle配置中引用实现APT注解技术,实现对注解进行编译、解析和自动生成View控件点击OnClickListener事件代码。依赖包为androidx.appcompat:appcompat:1.2.0,gradle主要配置如下:
implementation'androidx.appcompat:appcompat:1.2.0'
步骤S200:定义注解类、注解的对象和注解的作用范围,用于识别Activity页面方法体中是否引入注解;
步骤S210:声明ChViewAnnotation类文件为注解类,类名前加入@interface代表该类为注解类;类名前加入@Target设置注解作用范围为ElementType.METHOD,表示作用于方法;类名前加入@Retention设置注解的生命周期为运行时注解RetentionPolicy.RUNTIME,表示注解不仅能保留到class字节码文件中,还能在运行通过反射获取到;
例如,使用@interface自定义注解点击函数ChViewAnnotation的代码示例如下:
Figure BDA0003082655370000051
其中{}内为自定义注解的目标函数,即自定义数据所要执行的方法。
步骤S220:在ChViewAnnotation注解类中自定义3个属性,分别为:用于记录View控件Id的idValues;View控件重复点击间隔时间intervalTime以及间隔时间单位intervalTimeUnit。intervalTime根据自生业务需求,可设置默认值,代表默认单位时间内重复点击无效。intervalTimeUnit时间单位默认TimeUnit.SECONDS秒,也可自行配置TimeUnit.MINUTES分钟或TimeUnit.MILLISECONDS毫秒。
步骤S300:自定义ChViewObservable数据的生产者Observable,用于实现用户每次点击View控件时通过观察者Observer调用onNext()方法发送View控件点击OnClickListener事件去下游异步处理;结合Android Rx框架提供的清晰、准确处理异步问题和事件的方法,提升了用户体验;
步骤S400:Activity页面View控件OnClickListener方法体引入ChViewAnnotation注解,根据业务需求自定义idValues的属性值;intervalTime和intervalTimeUnit属性值采用默认值或者定义值,方便应用编译时根据注解标识自动生成防抖动代码;
Figure BDA0003082655370000061
步骤S500:BaseActivity页面中引入注解工具管理类ChViewAnnotationManager,解析Activity方法体配置的注解内容idValues,intervalTime,intervalTimeUnit自动生成防抖动代码:当intervalTime间隔时间配置为0时,直接取消功能防抖,调用默认onClick事件;否则,通过调用系统自带的Rx.throttleFirst方法实现功能防抖。
通过上述配置和定义,本发明实现ChViewAnnotationManager注解管理类统一对View控件Onclick事件监控,不需要单独写点击事件;能够统一配置连续点击间隔时间,不需要单独配置和逐一替换,能够快速地实现功能防抖时间配置。
尽管这里参照本发明的解释性实施例对本发明进行了描述,上述实施例仅为本发明较佳的实施方式,本发明的实施方式并不受上述实施例的限制,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。

Claims (4)

1.一种基于Rx框架防止功能抖动的方法,其特征在于,包括:
步骤S100:在模块gradle配置中引入APT注解处理工具,用于对注解进行编译、解析和自动生成View控件点击OnClickListener事件代码;
步骤S200:定义注解类、注解的对象和注解的作用范围,用于识别Activity页面方法体中是否引入注解,具体为:
步骤S210:声明ChViewAnnotation类文件为注解类,类名前加入@interface代表该类为注解类;类名前加入@Target设置注解作用范围为ElementType.METHOD,表示作用于方法;类名前加入@Retention设置注解的生命周期为运行时注解RetentionPolicy.RUNTIME,表示注解不仅能保留到class字节码文件中,还能在运行时通过反射获取到;
步骤S220:在ChViewAnnotation注解类中自定义3个属性,分别为:用于记录View控件Id的idValues;View控件重复点击间隔时间intervalTime以及间隔时间单位intervalTimeUnit;
步骤S300:自定义一个数据的生产者Observable,用于实现用户每次点击View控件时发送View控件点击OnClickListener事件去下游异步处理;
步骤S400:Activity页面View控件OnClickListener方法体引入ChViewAnnotation注解;
步骤S500:BaseActivity页面中引入注解工具管理类ChViewAnnotationManager,便于编译器自动解析Activity页面方法体配置的注解,并根据注解属性自动生成防抖动代码;注解工具管理类ChViewAnnotationManager实现具体View控件点击逻辑,当intervalTime间隔时间配置为0时,直接取消功能防抖,调用默认onClick事件;否则,通过调用系统自带的Rx.throttleFirst方法实现功能防抖。
2.根据权利要求1所述的一种基于Rx框架防止功能抖动的方法,其特征在于,所述步骤S100具体为:在模块gradle配置中引入annotations注解的依赖包androidx.appcompat:appcompat:1.2.0,用于对注解进行编译、解析和自动生成View控件点击OnClickListener事件代码,gradle主要配置如下:
implementation 'androidx.appcompat:appcompat:1.2.0。
3.根据权利要求2所述的一种基于Rx框架防止功能抖动的方法,其特征在于,所述步骤S300具体为:自定义ChViewObservable数据生产者类,通过观察者Observer调用onNext()方法下发View控件点击事件。
4.根据权利要求3所述的一种基于Rx框架防止功能抖动的方法,其特征在于,所述步骤S400具体为:Activity页面onClick方法体上引入ChViewAnnotation注解,根据业务需求自定义idValues的属性值;intervalTime和intervalTimeUnit属性值采用默认值或者定义值。
CN202110571215.9A 2021-05-25 2021-05-25 一种基于Rx框架防止功能抖动的方法 Active CN113254067B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110571215.9A CN113254067B (zh) 2021-05-25 2021-05-25 一种基于Rx框架防止功能抖动的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110571215.9A CN113254067B (zh) 2021-05-25 2021-05-25 一种基于Rx框架防止功能抖动的方法

Publications (2)

Publication Number Publication Date
CN113254067A CN113254067A (zh) 2021-08-13
CN113254067B true CN113254067B (zh) 2022-03-08

Family

ID=77184212

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110571215.9A Active CN113254067B (zh) 2021-05-25 2021-05-25 一种基于Rx框架防止功能抖动的方法

Country Status (1)

Country Link
CN (1) CN113254067B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103616950A (zh) * 2013-11-28 2014-03-05 Tcl集团股份有限公司 一种翻页的方法、装置及电子设备
CN109117223A (zh) * 2018-07-24 2019-01-01 北京酷我科技有限公司 一种提交请求状态提示的交互算法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107168757A (zh) * 2017-03-31 2017-09-15 武汉斗鱼网络科技有限公司 一种Android端防止View控件点击抖动的方法及装置
CN107908344B (zh) * 2017-11-08 2019-09-10 平安科技(深圳)有限公司 防止界面抖动的方法、装置、设备及计算机可读存储介质
CN111061938A (zh) * 2019-12-17 2020-04-24 深圳前海环融联易信息科技服务有限公司 解决多次触发网络请求的防抖动函数方法、装置、计算机设备及存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103616950A (zh) * 2013-11-28 2014-03-05 Tcl集团股份有限公司 一种翻页的方法、装置及电子设备
CN109117223A (zh) * 2018-07-24 2019-01-01 北京酷我科技有限公司 一种提交请求状态提示的交互算法

Also Published As

Publication number Publication date
CN113254067A (zh) 2021-08-13

Similar Documents

Publication Publication Date Title
US10481884B2 (en) Systems and methods for dynamically replacing code objects for code pushdown
US6829770B1 (en) Object connectivity through loosely coupled publish and subscribe events
Frantz et al. On the design of a maintainable software development kit to implement integration solutions
US7752598B2 (en) Generating executable objects implementing methods for an information model
US20240045850A1 (en) Systems and methods for database orientation transformation
US9594548B2 (en) Dynamically updating templated applications
WO2008085809A2 (en) Method, system and computer program product for enforcing privacy policies
US6139198A (en) System and method for enabling tracing of program execution in an object-oriented system
CN106844153B (zh) 应用程序运行监控方法、装置以及终端
CN110489310B (zh) 一种记录用户操作的方法、装置、存储介质及计算机设备
US20050091373A1 (en) Task tracing in a distributed computing environment
US20040003122A1 (en) Method and system for managing non-compliant objects
US20080005750A1 (en) Kernel Interface with Categorized Kernel Objects
CN112685020A (zh) 动态创建服务接口的方法、装置、电子设备及存储介质
US20100162207A1 (en) Behavior-first event programming model
CN110188308B (zh) 客户端自动打点上报方法、存储介质、设备及系统
CN113254067B (zh) 一种基于Rx框架防止功能抖动的方法
WO2004040510A2 (en) Identifying solutions to computer problems by expert system using contexts and distinguishing versions
CN114327383A (zh) 基于soa架构中间件的服务配置系统、方法及可读存储介质
Barghouti et al. Using event contexts and matching constraints to monitor software processes
US8635178B2 (en) Rule-based processing in different layers
US8539512B2 (en) Transactional environments for event and data binding handlers
EP1416382A1 (en) Identifying solutions to computer problems in main system by service system
JP2000187587A (ja) ジェネリックメインオブジェクトによって実現されるインタ―プリティブネットワ―クデ―モン
US7036045B2 (en) Method and system for isolating exception related errors in Java JVM

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant