CN113254067B - 一种基于Rx框架防止功能抖动的方法 - Google Patents
一种基于Rx框架防止功能抖动的方法 Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3089—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-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框架防止功能抖动的方法。
背景技术
目前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的代码示例如下:
其中{}内为自定义注解的目标函数,即自定义数据所要执行的方法。
步骤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属性值采用默认值或者定义值,方便应用编译时根据注解标识自动生成防抖动代码;
步骤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属性值采用默认值或者定义值。
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)
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)
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 | 深圳前海环融联易信息科技服务有限公司 | 解决多次触发网络请求的防抖动函数方法、装置、计算机设备及存储介质 |
-
2021
- 2021-05-25 CN CN202110571215.9A patent/CN113254067B/zh active Active
Patent Citations (2)
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 |