定时器设置方法、存储介质、电子设备及系统与流程

文档序号:18188283发布日期:2019-07-17 05:27阅读:216来源:国知局
定时器设置方法、存储介质、电子设备及系统与流程

本发明涉及应用开发领域,具体涉及一种定时器设置方法、存储介质、电子设备及系统。



背景技术:

在android系统的应用开发过程中我们会使用到定时器功能,且定时器是需要被应用经常所使用到的组件,例如在直播客户端中通过定时器,当点击投屏界面中的任意按钮后开始计时,超过10秒没有操作过任意按钮就自动隐藏投屏设置界面,如果在10秒内又触发了任意其他的按钮则需要重置计时并从当前这次的按钮点击开始计时进行10秒倒计时,每次重新开始倒计时10s其实都是对定时器的重置操作。

因此定时器在使用的过程中需要频繁的进行开启和关闭等操作,并且在开启定时器的时候需要申请定时器资源,在关闭定时器的时候需要释放定时器资源,若对资源管理不当或者遗漏就极易引起内存泄漏的风险。



技术实现要素:

针对现有技术中存在的缺陷,本发明的目的在于提供一种定时器设置方法,能够有效避免因定时器资源管理不当或者遗漏就引起的内存泄漏问题。

为达到以上目的,本发明采取的技术方案是,包括:

定义一public类型的静态函数,当所述静态函数被执行时返回定时器;

在定时器内创建消息队列和执行线程,所述消息队列用于存储触发消息,且每个触发消息均包括定时时间,所述执行线程用于执行到达定时时间后的任务线程;

当到达触发消息的超时时间时,执行线程执行任务线程。

在上述技术方案的基础上,

所述消息队列内存储的触发消息为多个;

每个开启定时器的触发消息均对应有待处理任务;

当消息队列内触发消息的定时时间到达时,执行线程执行该触发消息对应待处理任务的任务线程,进行待处理任务的执行。

在上述技术方案的基础上,

所述消息队列为blockingqueue数据结构;

所述消息队列中的触发消息按照定时时间的长短进行排列,且定时时间短的触发消息排于定时时间长的触发消息之前以被先执行。

在上述技术方案的基础上,当需同时执行多个任务线程时,使用预设了线程数的线程池进行多个任务线程的同时执行。

在上述技术方案的基础上,

每个触发消息均包括id号;

当需要取消消息队列内的触发消息时,依据该条触发消息的id号在消息队列内找出并移除。

本发明还提供一种存储介质,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述所述的方法。

本发明还提供一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述所述的方法。

本发明还提供一种定时器设置系统,包括:

设置模块,其用于定义一public类型的静态函数,且当所述静态函数被执行时返回定时器;

创建模块,其用于在定时器内创建消息队列和执行线程,所述消息队列用于存储触发消息,且每个触发消息均包括定时时间,所述执行线程用于执行到达定时时间后的任务线程;

执行模块,其用于当到达触发消息的超时时间时,使执行线程执行任务线程。

在上述技术方案的基础上,所述消息队列内存储的触发消息为多个;每个开启定时器的触发消息均对应有待处理任务;当消息队列内触发消息的定时时间到达时,执行线程执行该触发消息对应待处理任务的任务线程,进行待处理任务的执行。

在上述技术方案的基础上,所述消息队列为blockingqueue数据结构;所述消息队列中的触发消息按照定时时间的长短进行排列。

与现有技术相比,本发明的优点在于:通过创建public类型的静态函数实现对定期器的调用,方便调用者对定时器的调用,且定时器内创建有消息队列,方便对定时任务的触发消息进行存储,保证定时任务触发的有序进行,同时也保证了定时任务的重置和取消效率,有效避免因定时器资源管理不当或者遗漏就引起的内存泄漏问题。

附图说明

图1为本发明实施例中一种定时器设置方法的流程图;

图2为本发明实施例中一种电子设备的结构示意图。

具体实施方式

以下结合附图及实施例对本发明作进一步详细说明。

参见图1所示,本发明实施例提供一种定时器设置方法,用于android系统应用的开发,包括:

s1:定义一public类型的静态函数,当静态函数被执行时返回定时器。即将定时器设计成一个静态(static)类的对象,静态对象具有被全部其它对象获取的特点,方便调用者调用定时器,因此定义一个全局可以获取的静态函数,当静态函数被执行时返回定时器,方便调用者对定时的获取。本发明实施例的静态函数为:

publicstaticdytimergetdytimer()

其中,public为该静态函数的类型,public类型的函数表示是可以被其他类进行调用的;static为修饰符,用于表示此为静态函数,既无需通过实例对象,而是直接通过类名来直接调用的属性;dytimer是函数的返回值,表示该函数执行后会返回一个dytimer对象,即返回定时器对象。

本发明实施例的静态函数在被执行时首先判断dytimer对象是否为空,若为空则直接调用dytimer的构造函数来得到dytimer对象,即得到定时器,若不为空则直接将dytimer对象返回,以此来保证每次执行静态函数时均能得到定时器,方便进行后续的操作。

s2:在定时器内创建消息队列和执行线程,消息队列用于存储触发消息,且每个触发消息均包括定时时间,执行线程用于执行到达定时时间后的任务线程,即到时触发消息的定时时间后,执行线程执行任务线程。

消息队列内存储的触发消息为多个,每个开启定时器的触发消息均对应有待处理任务,待处理任务为当到达触发消息的定时时间后,需进行的操作,如开始视频播放等等。当消息队列内触发消息的定时时间到达时,执行线程执行该触发消息对应待处理任务的任务线程,从而任务线程开始进行待处理任务的执行。

消息队列为blockingqueue(阻塞队列)数据结构,采用blockingqueue数据结构能够保证消息的同步性,保证各触发消息在消息队列中的先进后出。且blockingqueue数据结构是线程安全的,当在多线程执行的情况下同一时刻有且仅有一个线程是能够执行的,这样便能保证消息队列中触发消息对应任务线程触发执行的有序性。

消息队列中的触发消息按照定时时间的长短进行排列,且定时时间短的触发消息排于定时时间长的触发消息之前以被先执行。消息队列中的触发消息为多个,每当有一定时设置到消息队列中时,即每当有一个触发消息加入消息队列时,则均需要对消息队列中的触发消息进行重新排序,排序规则即为按照每个触发消息的定时时间长短进行排列,定时时间短的触发消息排于定时时间长的触发消息之前,保证定时时间短的任务先被触发执行,定时时间长的任务后被触发执行。

对于触发消息在消息队列中具体的排序操作,当有一个新触发消息时,首先在消息队列中间的触发消息来与该触发消息的定时时间进行比较,若消息队列中间的触发消息定时时间大于该触发消息的定时时间,则继续选择前方定时时间小的触发消息进行比较,依照此方法直至找出该触发消息的位置,并将该触发消息插入消息队列中,且该触发消息的定时时间大于相邻前方的触发消息,小于相邻后方的触发消息。

通过消息队列实现对调用了定时器的触发消息进行缓存,方便管理。

当需同时执行多个任务线程时,使用预设了线程数的线程池进行多个任务线程的同时执行。应用中的定时器一般为多个,因此可能存在多个定时器同时使用的情况,且每个定期器的执行线程执行任务线程,由于待处理任务的执行存在时间,因此会存在多个任务线程同时执行的情况,多个执行线程同时使用的情况,使用线程池的方案来创建线程,线程池的大小设置为30,即同时最大能够执行30个任务,如果其中某个任务执行完成则这30个线程可以被复用,如果这30个线程都在执行,此时新的定时器超时了还需要进行执行,此时由于线程池资源不足而无法执行,就会将线程池资源不足的异常返回给定时器的调用者,调用者根据返回的异常来进行异常逻辑的处理。

s3:当到达触发消息的超时时间时,执行线程执行任务线程。

每个触发消息均包括id号;当需要取消消息队列内的触发消息时,依据该条触发消息的id号在消息队列内找出并移除。消息在消息队列中是有序排列的。每条触发消息都有一个唯一的id号信息,用于标记该触发消息,如果在触发消息的定时时间还未超时的时候需要取消掉该触发消息,则依据该条触发消息的id号在消息队列内找出,然后直接从消息队列中进行移除该触发消息即可。

如果需要开启定时器,以便于执行一个相关任务,此时仅仅需要向消息队列中投递一个有唯一id号的触发消息,如果需要取消一个触发消息时,首先会遍历消息队列中的所有触发消息的id号,判断该触发消息是否存在于消息队列中,如果存在消息队列中表明该触发消息的定时时间还没有超时,此时直接将触发该消息移除即可,便完成了相关待处理任务的移除,如果该id号已不在消息队列中,则说明该触发消息已经被消费掉了,此时则不做任何处理。

本发明实施例的定时器设置方法,通过创建public类型的静态函数实现对定期器的调用,方便调用者对定时器的调用,且定时器内创建有消息队列,方便对定时任务的触发消息进行存储,保证定时任务触发的有序进行,同时也保证了定时任务的重置和取消效率,以及降低了定时器设置和重置难度,有效避免因定时器资源管理不当或者遗漏就引起的内存泄漏问题。

另外,对应上述定时器设置方法,本发明还提供一种存储介质,存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述各实施例所述的定时器设置方法的步骤。需要说明的是,所述存储介质包括u盘、移动硬盘、rom(read-onlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。

参见图2所示,对应上述定时器设置方法,本发明还提供一种事电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程序时实现上述各实施例的定时器设置方法。

本发明实施例还提供一种基于上述定时器设置方法的定时器设置系统,包括设置模块、创建模块和执行模块。

设置模块用于定义一public类型的静态函数,且当所述静态函数被执行时返回定时器;创建模块用于在定时器内创建消息队列和执行线程,所述消息队列用于存储触发消息,且每个触发消息均包括定时时间,所述执行线程用于执行到达定时时间后的任务线程;执行模块用于当到达触发消息的超时时间时,使执行线程执行任务线程。

消息队列内存储的触发消息为多个;每个开启定时器的触发消息均对应有待处理任务;当消息队列内触发消息的定时时间到达时,执行线程执行该触发消息对应待处理任务的任务线程,进行待处理任务的执行。消息队列为blockingqueue数据结构;所述消息队列中的触发消息按照定时时间的长短进行排列。

本发明实施例的定时器设置系统,设置模块创建public类型的静态函数实现对定期器的调用,方便调用者对定时器的调用,且创建模块在定时器内创建有消息队列,方便对定时任务的触发消息进行存储,保证定时任务触发的有序进行,同时也保证了定时任务的重置和取消效率,以及降低了定时器设置和重置难度,有效避免因定时器资源管理不当或者遗漏就引起的内存泄漏问题。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1