掌桥专利:专业的专利平台
掌桥专利
首页

定时器管理方法、装置及电子设备

文献发布时间:2023-06-19 10:46:31


定时器管理方法、装置及电子设备

技术领域

本发明定时器管理技术领域,尤其涉及一种定时器管理方法、装置及电子设备。

背景技术

在Android开发过程中,每次涉及到定时器,就会出现很多问题,需要手动创建定时器、手动销毁定时器。同时,如果定时器是异步回调,也很容易出现内存泄漏和潜在崩溃的问题。

而如果是在不同的Android列表组件ListView/RecycleView/ScrollView等涉及到View复用的地方使用定时器,需要考虑很多情况,极易出错,且存在内存泄漏和潜在崩溃的风险。

在不同的页面视图组件,如Android页面容器Activity/Android的页面视图组件Fragment/视图元素View/Android视图组件父容器ViewGroup等场景下使用定时器。每使用一个定时器,都需要去手动销毁该定时器,非常麻烦繁琐,且极易出错。

单个定时器存在任务阻塞问题,多个定时器存在并发任务管理问题。

当页面中或者ListView/RecycleView等列表中存在大量定时器时,会有性能和卡顿问题。

发明内容

本发明提供一种定时器管理方法、装置及电子设备,以便在一定程度上解决内存泄露、潜在崩溃、手动销毁定时器易出错、单个定时器任务阻塞、多个定时器并发任务管理等问题的问题。

在本发明实施的第一方面,提供了一种定时器管理方法,所述方法包括:

获取M个定时器中每一个定时器的显示位置;

根据每一个定时器的显示位置,对所述M个定时器进行分组,得到N个集群,每一个集群中包含至少一个定时器;

获取对于所述N个集群中的目标集群的目标操作;

根据操作与处理方式的对应关系,将所述目标集群中的定时器按照与所述目标操作对应的目标处理方式进行处理;

其中,所述M个定时器中,具有相同时间频率的定时器共用一个底层定时器,M、N均为正整数,且M≥N。

在本发明实施的第二方面,提供了一种定时器管理装置,所述装置包括:

第一获取模块,用于获取M个定时器中每一个定时器的显示位置;

第一处理模块,用于根据每一个定时器的显示位置,对所述M个定时器进行分组,得到N个集群,每一个集群中包含至少一个定时器;

第二获取模块,用于获取对于所述N个集群中的目标集群的目标操作;

第二处理模块,用于根据操作与处理方式的对应关系,将所述目标集群中的定时器按照与所述目标操作对应的目标处理方式进行处理;

其中,所述M个定时器中,具有相同时间频率的定时器共用一个底层定时器,M、N均为正整数,且M≥N。

在本发明实施的第三方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现如上所述的定时器管理方法中的步骤。

在本发明实施的第四方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的定时器管理方法。

在本发明实施例的第五方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如上所述的定时器管理方法。

针对在先技术,本发明具备如下优点:

本发明实施例中,通过根据每一个定时器的显示位置,对M个定时器进行分组得到N个集群,可以对定时器分组使用管理,更加方便快捷和高效;通过获取对于N个集群中的目标集群的目标操作,将所述目标集群中的定时器按照与所述目标操作对应的目标处理方式进行处理,可以对定时器的生命周期自动管理,极大程度避免内存泄露和潜在的崩溃问题;并且,M个定时器中,具有相同时间频率的定时器共用一个底层定时器,可以减少底层定时器的运行数量,减少运行消耗。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。

图1为本发明实施例提供的定时器管理系统的结构示意图;

图2为本发明实施例提供的定时器管理方法流程图;

图3为本发明实施例提供的定时器在RecycleView/ListView中的显示效果示意图之一;

图4为本发明实施例提供的定时器在RecycleView中的显示效果示意图之二;

图5为本发明实施例提供的定时器在RecycleView中的显示效果示意图之三;

图6为本发明实施例提供的在Fragment中展示定时器的示意图之一;

图7为本发明实施例提供的在Fragment中展示定时器的示意图之二;

图8为本发明实施例提供的定时器分页面分组管理的显示示意图;

图9为本发明实施例提供的定时器管理装置的结构框图;

图10为本发明实施例提供的电子设备的结构框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。

目前,Android领域中,如Android原生的倒计时组件CountDownTimer、定时器Timer以及定时器回调TimerTask均不能很好地解决易出现内存泄露、潜在崩溃、手动销毁定时器易出错、单个定时器任务阻塞、多个定时器并发任务管理等问题。

因此,本发明实施例提供了一种定时器管理方法、装置及电子设备,能够在底层实现定时器数量、性能、对ListView、RecycleView等的支持、生命周期的管理、线程选择和切换等方面的优势。

需要说明的是,如下所述的定时器、倒计时,底层实现原理相近,因此不再对定时器、倒计时等进行明确的区分和说明。

本发明实施例提供了一种定时器管理方法,应用于定时器管理系统,如图1所示为定时器管理系统的结构示意图,该定时器管理系统包括:列表代理类模块11、生命周期管理模块12、分组管理模块13、底层定时器实现模块14、线程选择模块15以及触发执行模块16。其中,所述列表代理类模块11与生命周期管理模块12连接,生命周期管理模块12与分组管理模块13连接,所述列表代理类模块11还可以与分组管理模块13连接(图1中未示出);所述底层定时器实现模块14分别与生命周期管理模块12、分组管理模块13、线程选择模块15连接,所述底层定时器实现模块14还可以与列表代理类模块11连接(图1中未示出);所述线程选择模块15与触发执行模块16连接。

其中,通过列表代理类模块11可以对可滑动列表组件滑动时不触发定时器回调,静止时触发可见定时器的定时器回调,以节省性能消耗,提升性能表现。例如:如图1所示,列表代理类模块11可以包括列表组件的列表项代理类(如:RecycleViewHolderHelper),其他类型列表组件的列表项代理类(如:ListViewHolderHelper等)。

通过生命周期管理模块12可以解决在Activity/ScrollView/Fragment/View/ViewGroup等场景下使用定时器,每使用一个定时器,都需要去手动销毁该定时器,非常麻烦繁琐,且极易出错的问题。例如:如图1所示,生命周期管理模块12可以包括:页面生命周期单元121以及定时任务管理单元122,即生命周期观察者,用于监听并管理页面生命周期单元121中页面创建、页面启动、页面可见、页面不可见、页面停止、页面销毁等。

通过分组管理模块13可以使应用程序全局范围内的定时器的管理更加灵活,能够按照不同页面、不同的View组,对定时器进行分页面和分组件的管理,可以更加灵活的控制某个页面、某个组件的定时器的行为,比如开启、暂停、停止等,更加方便快捷和高效。例如:如图1所示,分组管理模块13可以将应用程序全局范围内的定时器分为第一页面131中的定时器和第二页面132中的定时器,其中,第一页面131中的定时器分为第一组件1311中的定时器和第二组件1312中的定时器,第一组件1311中包含多个定时器的定时器回调,分为为第一定时器回调(时间频率为100ms)、第二定时器回调(时间频率为500ms)、第三定时器回调(时间频率为1000ms);第二组件1312中包含多个定时器的定时器回调,分为为第四定时器回调(时间频率为100ms)、第五定时器回调(时间频率为1000ms)。并且,第二页面132中的定时器分为第三组件1321中的定时器和第四组件1322中的定时器,第三组件1321中包含的定时器的定时器回调为第六定时器回调(时间频率为500ms)。第四组件1322中包含多个定时器的定时器回调,分为为第七定时器回调(时间频率为100ms)、第八定时器回调(时间频率为500ms)、第九定时器回调(时间频率为1000ms)。

需要说明的时,上述第一组件1311、第二组件1312、第三组件1321以及第四组件1322可以为列表组件,也可以为其他类型组件,在此不做具体限定。

通过底层定时器实现模块14可以解决定时器创建过多的问题,同时提高定时器运行效率,节省性能消耗和占用,提升App性能表现;主要是通过App全局范围内,相同时间频率共用一个底层定时器,减少底层定时器运行数量来实现。例如:通过底层定时器模块14可以仅使用三个不同时间频率的底层定时器,分为是时间频率为100ms的底层定时器、时间频率为500ms的底层定时器以及时间频率为1000ms的底层定时器。

通过线程选择模块15可以在使用定时器/倒计时时,自由地进行线程模式的选择和切换,以解决定时器运行线程阻塞和多并发任务管理的问题。例如:通过线程选择模块15可以在主线程运行模式、后台线程运行模式以及异步线程运行模式之中选择其中一个模式进行底层定时器的运行。

通过触发执行模块16执行上述模块中的方案,可以触发定时器回调、触发定时器结束等,在此不做具体限定,从而实现定时器管理系统对定时器的管理。

具体的,如图2所示,所述定时器管理方法具体包括以下步骤:

步骤201,获取M个定时器中每一个定时器的显示位置,M为正整数。

具体的,获取M个定时器中每一个定时器当前所显示的显示位置的信息,由此可以得知,每一个定时器所处具体页面的具体位置。

需要说明的是,上述内容可以通过定时器管理系统中的分组管理模块13实现。

步骤202,根据每一个定时器的显示位置,对所述M个定时器进行分组,得到N个集群,每一个集群中包含至少一个定时器;其中,N为正整数,且M≥N。

具体的,根据每一个定时器的显示位置的信息,可以对M个定时器进行分组,分组完成后得到N个集群,每一个集群中包含一个或多个定时器,由此可以对每一个定时器按照所属页面进行分页面管理,或者可以对每一个定时器按照在所属页面中的具体位置进行分页面分组管理,使得对定时器的管理更加方便快捷高效。

其中,由于对所述M个定时器进行分组得到N个集群,则集群的数量应该小于或等于定时器的数量,即M≥N。

需要说明的是,上述内容可以通过定时器管理系统中的分组管理模块13实现。

步骤203,获取对于所述N个集群中的目标集群的目标操作。

具体的,获取对于N个集群中的目标集群的目标操作,所述目标操作可以是用户对目标集群的滑动操作、按压操作、手势操作等;或者,所述目标操作也可以是开发者设定的生命周期自动管理的操作,即观测生命周期是否到达预设时间的操作,在此不做具体限定。

需要说明的是,上述内容可以通过定时器管理系统中的分组管理模块13或者生命周期管理模块12实现。

步骤204,根据操作与处理方式的对应关系,将所述目标集群中的定时器按照与所述目标操作对应的目标处理方式进行处理;

其中,所述M个定时器中,具有相同时间频率的定时器共用一个底层定时器。

具体的,根据操作与处理方式的对应关系,将所述目标集群中的定时器按照与所述目标操作对应的目标处理方式进行处理,换句话说,开发者可以设定一种预设的对应关系,每一种操作具有其对应的处理方式,例如:向左滑动操作对应的处理方式可以是删除处理。根据对应关系可以得到目标操作对应的目标处理方式,从而按照目标处理方式对目标集群中的定时器进行处理,达到对定时器进行分组管理的目的。

其中,在这M个定时器中,如果有具有相同时间频率的定时器,则相同时间频率的定时器可以共用一个底层定时器,即可以在App全局范围内,上层相同时间频率的定时器,共用底层的同一个底层定时器,上层定时器的使用者无感知,不仅可以方便快捷的进行调用,还可以减少底层定时器的运行数量,从而节省定时器运行的能量消耗,提升应用程序(Application,APP)的性能表现。其中,时间频率指的是更新一个计时信息的时间频率。

需要说明的是,上述内容可以通过定时器管理系统中的分组管理模块13或者生命周期管理模块12实现。

本发明上述实施例中,通过根据每一个定时器的显示位置,对M个定时器进行分组得到N个集群,可以对定时器分组使用管理,更加方便快捷和高效;通过获取对于N个集群中的目标集群的目标操作,将所述目标集群中的定时器按照与所述目标操作对应的目标处理方式进行处理,可以对定时器的生命周期自动管理,极大程度避免内存泄露和潜在的崩溃问题;并且,M个定时器中,具有相同时间频率的定时器共用一个底层定时器,可以减少底层定时器的运行数量,减少运行消耗。

可选的,所述集群包括但不限于以下其中一项:

第一种:不同页面中的定时器组合。

其中,在所述集群为不同页面中的定时器的组合时,由于每一个定时器都可以归属于其中一个页面(如:Activity或者Fragment等),可以对M个定时器按照所属页面进行分页面管理,进而对M个定时器的定时器回调进行分页面管理,从而使得对定时器的管理更加方便快捷高效。例如:第一页面中的定时器和第二页面中的定时器可以分为一组。

第二种:同一页面的至少一个组件中的定时器组合。

其中,在所述集群为同一页面的至少一个组件中的定时器组合时,由于每一个定时器都可以归属于其中一个页面的其中一个组件(如:列表组件View),可以对M个定时器按照所属页面的所属组件进行分页面分组件管理,进而对M个定时器的定时器回调进行分页面分组件管理,从而使得对定时器的管理更加方便快捷高效。例如:第一页面中的定时器可以分为第一组件中的定时器、第二组件中的定时器、第三组件中的定时器,可以将第一组件中的定时器和第二组件中的定时器分为一组,第三组件中的定时器分为另一组。其中,上述组件可以为列表组件,也可以为其他类型组件,在此不做具体限定。

第三种:不同页面的不同组件中的定时器组合。

其中,在所述集群为不同页面的不同列表组件中的定时器组合时,由于每一个定时器都可以归属于其中一个页面的其中一个组件,可以对M个定时器按照所属页面的所属组件进行分页面分组件管理,进而对M个定时器的定时器回调进行分页面分组件管理,从而使得对定时器的管理更加方便快捷高效。例如:第一页面中的定时器可以分为第一组件中的定时器和第二组件中的定时器,第二页面中的定时器可以分为第三组件中的定时器和第四组件中的定时器,可以将第一页面中的第一组件中的定时器和第二页面中的第三组件中的定时器分为一组。

需要说明的是,上述组件(第一组件、第二组件、第三组件、第四组件等)可以为列表组件,也可以为其他类型组件,在此不做具体限定。

可选的,在所述组件为可滑动列表组件、且所述目标集群为所述可滑动列表组件中的定时器组合的情况下,在所述步骤203获取对于所述N个集群中的目标集群的目标操作之前,所述方法还可以包括:

根据所述可滑动列表组件中的定时器,创建所述可滑动列表组件的定时器代理类;

其中,所述定时器代理类中包含定时器回调列表,所述定时器回调列表包含每一定时器的第一定时器回调。

具体的,如果目标集群为同一页面的至少一个组件中的定时器组合、且所述至少一个组件为可滑动列表组件,则可以根据所述可滑动列表组件中的定时器创建可滑动列表组件中的定时器代理类,即需要创建RecycleView、ListView以及列表组件的列表项视图容器ViewHolder的代理类(如:列表组件的列表项代理类RecycleViewHolderHelper或者ListViewHolderHelper等),即可方便快捷的在RecycleView、ListView等中使用定时器。

例如:如图3至图5为定时器在RecycleView/ListView中的显示效果示意图,能够如图3所示的竖向列表显示,即定时器从上到下按照列表的形式依次进行显示;也可以如图4所示的方框显示,即可以按照规则的方框形式对定时器依次进行显示;也可以也可以如图5所示的方框显示,即按照不规则或者错落的方框形式对定时器依次进行显示,显示的具体形式并不进行限定。

并且,每一个创建的定时器代理类中均持有定时器回调列表timerTaskList,在创建该定时器代理类时,根据每一个定时器生成一个第一定时器回调,该timerTaskList是由每一个定时器的第一定时器回调列表组成的。

同理,如果目标集群为不同页面的不同组件中的定时器组合、且所述至少一个组件为可滑动列表组件,则可以根据所述可滑动列表组件中的定时器创建可滑动列表组件中的定时器代理类,每一个创建的定时器代理类中均持有定时器回调列表timerTaskList,在创建该定时器代理类时,根据每一个定时器生成一个第一定时器回调,该timerTaskList是由每一个定时器的第一定时器回调列表组成的。

需要说明的是,上述内容可以通过定时器管理系统中的列表代理类模块11实现。

可选的,在所述可滑动列表组件的条目项复用的情况下,所述创建所述可滑动列表组件的定时器代理类之后,所述方法还可以包括:

清空所述定时器回调列表;

根据所述定时器代理类,生成第二定时器回调;

将所述第二定时器回调添加到清空的定时器回调列表中,得到更新后的定时器回调列表。

具体的,可以在创建可滑动列表组件的定时器代理类(如:ViewHolder代理类)之后,在每次复用所述可滑动列表组件的条目项复用的情况下,需要先将ViewHolder代理类持有的定时器回调列表timerTaskList中的条目项中的定时器回调清空,即在每次添加定时器回调前,需要将timerTaskList中的定时器回调移除,通过这种方式可以避免因可滑动列表组件的条目项复用导致定时器触发定时器回调出现混乱,也避免由此引发的内存泄漏和潜在崩溃等问题。

并且,根据定时器代理类可以得到复用的定时器的第二定时器回调,并将该第二定时器回调添加到清空的timerTaskList中,从而形成更新后的定时器回调列表timerTaskList。并且,每个ViewHolder可以支持设置多个定时器及其定时器回调,支持定时器倒计时定时及结束回调通知等。

需要说明的是,上述内容可以通过定时器管理系统中的列表代理类模块11实现。

可选的,在所述目标操作为滑动操作的情况下,在所述步骤203获取对于所述N个集群中的目标集群的目标操作之后,所述方法还可以包括:

获取所述可滑动列表组件的当前状态,所述当前状态包括:滑动状态或者静止状态;

在所述可滑动列表组件的当前状态为静止状态的情况下,获取静止状态下,所述可滑动列表组件中当前处于显示状态的第一定时器;

触发所述定时器回调列表中与所述第一定时器对应的定时器回调。

具体的,可以监听可滑动列表组件的状态,并实时获取可滑动列表组件的当前状态,如果可滑动列表组件当前处于静止状态,则可以触发静止状态下处于显示状态的第一定时器对应的定时器回调,可滑动列表组件中其他不可见的定时器则不触发定时器回调,即可滑动列表组件处于静止状态时,当前可见的定时器触发定时器回调,而当前不可见的定时器不需要触发定时器回调,可以节省能量消耗,提升性能表现。

其中,判定可滑动列表组件是处于滑动状态还是静止状态,可以通过获取可滑动列表组件当前显示的定时器不进行变化的时间进行判定,可以设定一个预设时长,该预设时长作为判定可滑动列表组件是否处于滑动状态的时间阈值。如果当前显示的定时器超过预设时长依旧不变化,则可以判定可滑动列表组件处于静止状态;如果当前所显示的定时器在预设时长内发生变化,则该可滑动列表组件处于滑动状态。上述判定方式仅为示例,并不进行限定。

需要说明的是,上述内容可以通过定时器管理系统中的列表代理类模块11实现。

可选的,所述方法还可以包括:

在所述可滑动列表组件的当前状态为滑动状态的情况下,控制所述定时器回调列表中所有的定时器回调均处于未触发状态。

具体的,获取可滑动列表组件的当前状态,如果可滑动列表组件当前处于滑动状态,则可滑动列表组件中的所有定时器均不触发定时器回调,可以节省能量消耗,提升性能表现。

需要说明的是,上述内容可以通过定时器管理系统中的列表代理类模块11实现。

可选的,所述方法还可以包括:

在检测到所述M个定时器之外的第二定时器的情况下,获取所述第二定时器的第一时间频率;

判断所述M个定时器所用的底层定时器中,是否存在具有所述第一时间频率的目标底层定时器;

若不存在,则创建具有所述第一时间频率的目标底层定时器;

若存在,则确定所述第二定时器与所述M个定时器中具有所述第一时间频率的定时器共用一个目标底层定时器。

具体的,在加入新的定时器(即第二定时器)的情况下,此时会有新的定时器回调(即第二定时器的定时器回调)加入,首先获取该第二定时器你的第一时间频率,如果M个定时器所用的底层定时器中不存在与该第二定时器的第一时间频率相同的时间频率,则会创建一个该第一时间频率的底层定时器,即目标底层定时器。如果第一时间频率的底层定时器已经存在,则不需要重新创建新的底层定时器,该第二定时器使用已存在的第一时间频率的目标底层定时器进行触发和回调,从而减少底层定时器运行数量,提高定时器运行效率,节省性能消耗和占用。

例如:在列表组件RecycleView/ListView,以及Activity/Fragment等页面中,使用到的大量定时器,由于相同时间频率的定时器共用一个底层定时器,页面中显示有多个定时器在运行,但是多个定时器只有100ms、500ms以及1000ms的3种时间频率,此时底层只有3个底层定时器在运行,可以减少底层定时器运行数量,提高定时器运行效率,节省性能消耗和占用。如图6和图7所示为在Activity/Fragment中使用定时器的显示示意图,通过点击不同按钮显示不同页面中的定时器的计时进程。显示第一子页面61是用来控制是否显示第一Fragment中定时器的按钮,显示第二子页面62是用来控制是否显示第二Fragment中定时器的按钮,打开一个新的活动页面63是用来控制是否打开一个新的Activity页面的按钮,图6是第一子页面中的定时器内容展示示意图,图7是第二子页面中的定时器内容展示示意图。

需要说明的是,上述内容可以通过定时器管理系统中的底层定时器实现模块14实现。

可选的,所述方法还可以包括:

获取用户对线程模式的选择输入;

根据所述选择输入,确定运行所述底层定时器的目标线程模式;

根据所述目标线程模式,将所述底层定时器运行于所述目标线程模式对应的线程中。

具体的,定时器管理系统可包括多个线程模式可供选择,用户可以根据需要选择其中一个模式。首先获取用户对多个线程模式的选择输入,该选择输入可以是选择操作,具体可以为点击操作、按压操作、滑动操作等,在此不做具体限定。根据用户的选择输入,确定用户所选择的线程模式为运行所述底层定时器的目标线程模式,并将所述底层定时器运行在目标线程模式对应的线程中,即可以将定时器回调发送给对应的目标线程模式的线程中进行执行,并在该线程中进行触发和回调,不仅可以解决单定时器任务阻塞的问题,还可以解决多定时器任务并发管理的问题,提供便捷和完善的线程选择;并且线程选择方式独立且解耦,不管底层定时器如何实现,该线程选择仍然适用,还可以解决事件总线EventBus线程缓冲池里的事件(或消息)无法取消Cancel的问题。

例如:线程模式包括:主线程运行Main_Thread模式:所有底层定时器都在主线程中运行;

后台线程运行Background模式:所有底层定时器均在同一个异步线程中运行,采用此模式运行底层定时器可以避免主线程拥堵;

异步线程运行Async模式:底层定时器在多个异步线程中运行,线程池策略可以根据需要进行设定,可以默认按照Android的一个异步任务组件AsyncTask的线程池管理策略运行底层定时器。

需要说明的是,上述内容可以通过定时器管理系统中的线程选择模块15实现。

可选的,所述定时器的倒计时方式可以设定为时间戳方式,由此可以解决项目Item不可见,且ViewHolder未创建时,计时未触发导致的计时时间错乱问题。

进一步的,步骤204中目标操作与目标处理方式的对应关系可以设定为如下内容:

使目标集群不可见的操作对应的目标处理方式为:目标集群的定时器回到不会自动触发,不更新用户界面视图(User Interface,UI)以节省性能消耗,提升性能表现。

使目标集群可见的操作对应的目标处理方式为:目标集群的定时器自动回复触发定时器回调,满足正常的功能需求。

使目标集群销毁的操作对应的目标处理方式为:目标集群的定时器及其定时器回调会自动销毁并移除管理队列。

由此可见,定时器的中断恢复、暂停、更新、销毁等处理方式均可以自动进行,并且可以自动管理生命周期,无需手动操作,方便快捷。

例如:每一个定时器归属于其中一个页面,定时器管理系统会对目标集群所在页面以及该页面的定时器回调进行管理;其中,在生成其中一个定时器时,需要传入该定时器对应页面的页面生命周期所属者LifeCycleOwner,以及对应的分组的所属者PhyOwner,即对应分组的View;定时器管理系统可以通过生命周期状态观察者LifeCycleObserver对该LifeCycleOwner的各个生命周期进行监听,并通过获取到的目标操作进行处理;比如当页面可见时(如LifeCycleOwner onResume),定时器可以自动触发Resume,而当页面不可见时(如LifeCycleOwner onPause),定时器可以自动暂停Pause,当页面销毁的时候(如LifeCycleOwner onDestroy),定时器可以自动销毁Destroy,其定时器回调可以被自动移除。

并且,对定时器按照所属页面的、所属的View进行分页面分组件管理,还可以根据不同的PhyOwner控制同一个页面里的不同View的定时器,进行不同的操作;例如:可以控制一个页面中,View1的定时器启动,View2的定时器暂停,View3的定时器销毁等,灵活的对页面或者页面的View的定时器进行管理。

具体的,如图8所示,通过多个选择按钮可以选择对不同的定时器分组进行控制,可以通过暂停页面内所有定时器81来控制页面分组中的定时器暂停;可以通过启动页面内所有定时器82来控制页面分组中的所有定时器重新启动;可以通过只暂停文字的定时器83来控制通过文字分为一组的定时器暂停;可以通过只启动文字的定时器84来控制通过文字分为一组的定时器重新启动;可以通过只暂停横向列表中的定时器85来控制通过列表显示方式分为一组的横向列表中的定时器暂停;可以通过只启动横向列表中的定时器86来控制通过列表显示方式分为一组的横向列表中的定时器重新启动。上述内容仅为示例,并不因此进行限定。

综上所述,本发明实施例支持分页面分组管理,可以更方便快捷高效的管理定时器;并且,无需关注对定时器的销毁、移除等时机,可以极大程度避免内存泄漏和潜在的崩溃问题;并且支持多线程模式选择,可以更加便捷的进行线程的选择和切换,以及定时器多并发任务的线程管理;并且,具有相同时间频率的定时器共用一个底层定时器,减少底层定时器运行数量,提高定时器运行效率,节省性能消耗和占用。

如图9所示,本发明实施例提供的一种定时器管理装置900,所述装置包括:

第一获取模块901,用于获取M个定时器中每一个定时器的显示位置;

第一处理模块902,用于根据每一个定时器的显示位置,对所述M个定时器进行分组,得到N个集群,每一个集群中包含至少一个定时器;

第二获取模块903,用于获取对于所述N个集群中的目标集群的目标操作;

第二处理模块904,用于根据操作与处理方式的对应关系,将所述目标集群中的定时器按照与所述目标操作对应的目标处理方式进行处理;

其中,所述M个定时器中,具有相同时间频率的定时器共用一个底层定时器,M、N均为正整数,且M≥N。

可选的,所述集群包括以下其中一项:

不同页面中的定时器组合;

同一页面的至少一个组件中的定时器组合;

不同页面的不同组件中的定时器组合。

可选的,在所述组件为可滑动列表组件、且所述目标集群为所述可滑动列表组件中的定时器组合的情况下,在所述获取对于所述N个集群中的目标集群的目标操作之前,所述装置还包括:

第一创建模块,用于根据所述可滑动列表组件中的定时器,创建所述可滑动列表组件的定时器代理类;

其中,所述定时器代理类中包含定时器回调列表,所述定时器回调列表包含每一定时器的第一定时器回调。

可选的,在所述可滑动列表组件的条目项复用的情况下,所述创建所述可滑动列表组件的定时器代理类之后,所述装置还包括:

清空模块,用于清空所述定时器回调列表;

生成模块,用于根据所述定时器代理类,生成第二定时器回调;

更新模块,用于将所述第二定时器回调添加到清空的定时器回调列表中,得到更新后的定时器回调列表。

可选的,在所述目标操作为滑动操作的情况下,在所述获取对于所述N个集群中的目标集群的目标操作之后,所述装置还包括:

第三获取模块,用于获取所述可滑动列表组件的当前状态,所述当前状态包括:滑动状态或者静止状态;

第四获取模块,用于在所述可滑动列表组件的当前状态为静止状态的情况下,获取静止状态下,所述可滑动列表组件中当前处于显示状态的第一定时器;

第三处理模块,用于触发所述定时器回调列表中与所述第一定时器对应的定时器回调。

可选的,所述装置还包括:

第四处理模块,用于在所述可滑动列表组件的当前状态为滑动状态的情况下,控制所述定时器回调列表中所有的定时器回调均处于未触发状态。

可选的,所述装置还包括:

第五获取模块,用于在检测到所述M个定时器之外的第二定时器的情况下,获取所述第二定时器的第一时间频率;

判断模块,用于判断所述M个定时器所用的底层定时器中,是否存在具有所述第一时间频率的目标底层定时器;

第二创建模块,用于若不存在,则创建具有所述第一时间频率的目标底层定时器;

确定模块,用于若存在,则确定所述第二定时器与所述M个定时器中具有所述第一时间频率的定时器共用一个目标底层定时器。

可选的,所述装置还包括:

第六获取模块,用于获取用户对线程模式的选择输入;

第二确定模块,用于根据所述选择输入,确定运行所述底层定时器的目标线程模式;

运行模块,用于根据所述目标线程模式,将所述底层定时器运行于所述目标线程模式对应的线程中。

可选的,所述定时器的倒计时方式为时间戳方式。

综上所述,本发明实施例支持分页面分组管理,可以更方便快捷高效的管理定时器;并且,无需关注对定时器的销毁、移除等时机,可以极大程度避免内存泄漏和潜在的崩溃问题;并且支持多线程模式选择,可以更加便捷的进行线程的选择和切换,以及定时器多并发任务的线程管理;并且,具有相同时间频率的定时器共用一个底层定时器,减少底层定时器运行数量,提高定时器运行效率,节省性能消耗和占用。

需要说明的是,该定时器管理装置实施例是与上述定时器管理方法相对应的装置,上述方法实施例的所有实现方式均适用于该装置实施例中,也能达到与其相同的技术效果,在此不再赘述。

本发明实施例还提供了一种电子设备。如图10所示,包括处理器1001、通信接口1002、存储器1003和通信总线1004,其中,处理器1001,通信接口1002,存储器1003通过通信总线1004完成相互间的通信。

存储器1003,用于存放计算机程序。

处理器1001用于执行存储器1003上所存放的程序时,实现本发明实施例提供的一种定时器管理方法中的部分或者全部步骤。

上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述终端与其他设备之间的通信。

存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中所述的定时器管理方法。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中所述的定时器管理方法。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,包含在本发明的保护范围内。

相关技术
  • 定时器管理方法、装置及电子设备
  • 测量事件定时器和低功率时段的优先级管理方法和装置
技术分类

06120112670018