CN109753321A - 基于协议注册的应用启动方法、装置、终端和存储介质 - Google Patents
基于协议注册的应用启动方法、装置、终端和存储介质 Download PDFInfo
- Publication number
- CN109753321A CN109753321A CN201910027103.XA CN201910027103A CN109753321A CN 109753321 A CN109753321 A CN 109753321A CN 201910027103 A CN201910027103 A CN 201910027103A CN 109753321 A CN109753321 A CN 109753321A
- Authority
- CN
- China
- Prior art keywords
- starting
- class
- delay time
- function
- delay
- 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.)
- Granted
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种基于协议注册的应用启动方法、装置、终端和存储介质,该方法包括:获取应用程序的多个启动类以及每个启动类对应的延迟时间,其中,每个启动类预先继承启动接口协议;通过调用各启动类中的延迟注册函数,将各启动类的启动对象与启动类对应的延迟时间注册至第一集合对象中,其中,启动对象为启动接口协议类型的对象;根据第一集合对象中的各延迟时间,对第一集合对象中的各启动对象进行调度和加载。通过本发明实施例的技术方案,可以提高应用程序的启动速度,从而提升用户体验。
Description
技术领域
本发明实施例涉及计算机技术,尤其涉及一种基于协议注册的应用启动方法、装置、终端和存储介质。
背景技术
随着手机、平板电脑等终端的不断发展,终端上安装的应用程序(Application,APP)越来越多,用户对应用程序的需求也越来越多。为了满足用户的需求,应用程序的版本逐步升级,相应的启动项也逐渐增多,在同时启动这些启动项时,会大大降低应用程序的启动速度,影响用户体验。
目前,基于Android***的应用程序在启动时,往往可以通过减少启动项的方式来提高应用程序的启动速度。然而,在实际应用中大部分的启动项是必须启动的,无法被去掉。可见,现有应用启动的方式无法有效地解决应用程序启动慢的问题。
发明内容
本发明实施例提供了一种基于协议注册的应用启动方法、装置、终端和存储介质,以提高应用程序的启动速度,从而提升用户体验。
第一方面,本发明实施例提供了一种基于协议注册的应用启动方法,包括:
获取应用程序的多个启动类以及每个所述启动类对应的延迟时间,其中,每个所述启动类预先继承启动接口协议;
通过调用各所述启动类中的延迟注册函数,将各所述启动类的启动对象与所述启动类对应的延迟时间注册至第一集合对象中,其中,所述启动对象为所述启动接口协议类型的对象;
根据所述第一集合对象中的各所述延迟时间,对所述第一集合对象中的各所述启动对象进行调度和加载。
第二方面,本发明实施例还提供了一种基于协议注册的应用启动装置,包括:
启动类获取模块,用于获取应用程序的多个启动类以及每个所述启动类对应的延迟时间,其中,每个所述启动类预先继承启动接口协议;
延迟注册模块,用于通过调用各所述启动类中的延迟注册函数,将各所述启动类的启动对象与所述启动类对应的延迟时间注册至第一集合对象中,其中,所述启动对象为所述启动接口协议类型的对象,所述第一集合对象为键值对结构类型的对象;
启动对象调度加载模块,用于根据所述第一集合对象中的各所述延迟时间,对所述第一集合对象中的各所述启动对象进行调度和加载。
第三方面,本发明实施例还提供了一种终端,所述终端包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任意实施例提供的基于协议注册的应用启动方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例提供的基于协议注册的应用启动方法。
本发明实施例通过获取启动应用程序时需要加载的多个启动类,并且每个启动类预先继承统一的启动接口协议,以使每个启动类中的启动函数可以实现相应的启动对象初始化的功能,并且每个启动类可以具有相同的启动函数名称,提高启动过程的便捷性和统一性。并且利用每个启动类中的延迟注册函数,将每个启动类中的启动对象和启动类对应的延迟时间统一地注册至第一集合对象中,从而可以根据第一集合对象中延迟时间的先后顺序,对每个启动对象进行自动调度和动态加载,以避免在启动应用程序时同时加载所有启动对象的情况,从而提高了应用程序的启动速度,以及提升了用户体验。
附图说明
图1是本发明实施例一提供的一种基于协议注册的应用启动方法的流程图;
图2是本发明实施例二提供的一种基于协议注册的应用启动方法的流程图;
图3是本发明实施例三提供的一种基于协议注册的应用启动装置的结构示意图;
图4是本发明实施例四提供的一种终端的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种基于协议注册的应用启动方法的流程图,本实施例可适用于启动基于Android***的应用程序的情况。该方法可以由基于协议注册的应用启动装置来执行,该装置可以由软件和/或硬件的方式来实现,集成于安装有应用程序的智能终端中,比如智能手机、平板电脑或掌上游戏机等。如图1所示,该方法具体包括以下步骤:
S110、获取应用程序的多个启动类以及每个启动类对应的延迟时间,其中,每个启动类预先继承启动接口协议。
其中,启动类可以是指启动对象所属的类,启动对象可以是在启动应用程序时所需要启动的任务或功能模块等,其中启动对象是启动类实例化后获得的。启动类对应的延迟时间可以是指在应用程序开始启动后,延迟加载该启动类的启动对象的时间。本实施例中的每个启动类对应一个延迟时间,其中延迟时间可以根据用户需求和实际情况人为进行设置。示例性地,本实施例中的延迟时间可以是长整型Long类型的信息,延迟时间的单位可以为毫秒ms。启动接口协议可以是指预先定义的,用于进行启动初始化的接口,并且启动接口协议中包含预先定义的启动函数。每个启动类预先继承统一的启动接口协议,以使每个启动类中的启动函数可以实现相应的启动对象初始化的功能,并且每个启动类可以具有相同的启动函数名称,从而可以提高启动过程的便捷性和统一性。
示例性地,本实施例在每个启动类预先继承启动接口协议之前,还可以定义一个统一的启动接口协议,且该启动接口协议中包含预先定义的,但未进行函数实现的启动函数。例如,启动接口协议可以定义为:
Public interface IStartInit{
Public void init();
}
启动接口协议IStartInit具有公有权限修饰符Public的接口类型,以使所有启动类均可以继承该启动接口协议。启动接口协议的内部包含一个启动函数init,以通过启动函数init来实现启动对象的初始化逻辑。启动函数init也具有公有权限修饰符Public,以便可以直接通过类调用启动函数init,提高了应用程序启动的便捷性。
示例性地,每个启动类预先继承启动接口协议,包括:
每个启动类预先调用接口继承关键字,继承启动接口协议,并复写启动接口协议中的启动函数,以使启动类中的启动函数实现相应的启动对象初始化的功能。
其中,接口继承关键字可以是指Java语言中规定的进行接口协议继承的关键字。
具体地,对于每个启动类而言,启动类通过调用接口继承关键字implement的方式,继承启动接口协议IStartInit,并且在启动类中通过复写@Override的方式,复写启动接口协议IStartInit中的启动函数init,以将启动类对应的初始化逻辑在启动类的复写函数init中进行实现,即实例化,使得启动类中的启动函数init可以执行相应的初始化逻辑。示例性地,启动类A可以通过class A implements IStartInit的方式继承启动接口协议IStartInit,比如启动类A可以定义为:
本实施例通过将每个启动类预先继承启动接口协议,使得每个启动类具有相同的启动函数名称init,从而解决了现有技术中每个启动对象对应的启动函数名称不一致的问题,以便于可以更加便捷地调用启动类中的启动函数,提高启动过程的统一性。
S120、通过调用各启动类中的延迟注册函数,将各启动类的启动对象与启动类对应的延迟时间注册至第一集合对象中,其中,启动对象为启动接口协议类型的对象。
其中,延迟注册函数是预先定义的,用于对启动类的启动对象与启动类对应的延迟时间进行延迟注册的函数,以便在启动应用程序时可以延迟加载启动对象。延迟注册函数具有公有权限修饰符,以使每个启动类可以直接调用该延迟注册函数。而且延迟注册函数具有第一输入参数和第二输入参数,其中,第一输入参数为启动接口协议类型的启动对象,第二输入参数为长整型类型的延迟时间。本实施例中启动类对应的延迟时间为在应用程序开始启动后,延迟加载该启动类的启动对象的时间,也就是启动类对应的延迟时间即为启动对象对应的延迟时间。第一集合对象可以是指预先定义的,用于存储各个启动类的启动对象和对应的延迟时间的对象。
示例性地,延迟注册函数可以定义为:
Public void registerStart(IStartInit mIStartInit,long delay)
其中,延迟注册函数registerStart的第一输入参数为启动接口协议IStartInit类型的启动对象mIStartInit,第二输入参数为长整型long类型的延迟时间delay。
具体地,本实施例中的启动类预先继承了启动接口协议,从而启动类实例化后的启动对象为启动接口协议类型的对象。本实施例可以在启动类的构造函数中通过以启动对象和启动对象对应的延迟时间为函数输入参数,调用延迟注册函数,将启动对象和启动对象对应的延迟时间注册至第一集合对象中。
S130、根据第一集合对象中的各延迟时间,对第一集合对象中的各启动对象进行调度和加载。
具体地,可以根据第一集合对象存储的各个延迟时间的先后顺序,对第一集合对象存储的各个启动对象进行自动调度,并根据启动对象中的启动函数对启动对象进行动态加载,即执行启动对象的初始化逻辑。通过对每个启动对象设置一定的延迟时间,并按照设置的延迟时间对启动对象进行动态加载,从而可以避免在启动应用程序时同时加载所有启动对象的情况。本实施例通过逐次分批的加载启动对象,可以提高终端的运行效率,从而可以缩短应用程度的启动时间,提高启动速度,进而可以提升用户的观看体验。
示例性地,S130可以包括:根据预设排列方式,对第一集合对象中的各延迟时间进行升序排列,以及相应地调整第一集合对象中各启动对象的排列顺序,并将排列后的第一集合对象确定为第二集合对象;对第二集合对象中的延迟时间和启动对象进行依次遍历,并根据遍历到的当前延迟时间进行定时操作,加载当前延迟时间对应的当前启动对象。
其中,预设排列方式可以是但不限于二分法排列方式。
具体地,本实施例中获得的第一集合对象中的各延迟时间可能不是按照延迟时间的先后顺序进行排列的,从而需要基于预设排列方式,将第一集合对象中的各延迟时间进行升序排列。通过调节第一集合对象中延迟时间的排列顺序,可以实现对启动对象的自动调度。基于启动对象与延迟时间之间的一一对应关系,在调整延迟时间的排列顺序时,可以相应地调整第一集合对象中启动对象的排列顺序,以保证调整后的每个启动对象与延迟时间的对应关系保持不变。将调整后的第一集合对象确定为第二集合对象,此时第二集合对象中的各延迟时间以从小到大的顺序进行排列。通过对第二集合对象中的延迟时间和启动对象进行依次遍历,逐次获得一个启动对象以及该启动对象对应的延迟时间。本实施例可以通过直接调用定时器Timer类的方式,根据遍历到的当前延迟时间来进行定时操作,并加载当前延迟时间对应的启动对象,从而实现启动对象的动态加载和初始化。
本实施例的技术方案,通过获取应用程序启动时需要加载的多个启动类,并且每个启动类预先继承统一的启动接口协议,以使每个启动类中的启动函数可以实现相应的启动对象初始化的功能,并且每个启动类可以具有相同的启动函数名称,提高启动过程的便捷性和统一性。并且利用每个启动类中的延迟注册函数,将每个启动类中的启动对象和启动类对应的延迟时间统一地注册至第一集合对象中,从而可以根据第一集合对象中延迟时间的先后顺序,对每个启动对象进行自动调度和动态加载,以避免在启动应用程序时同时加载所有启动对象的情况,从而提高了应用程序的启动速度,以及提升了用户体验。
在上述技术方案的基础上,S120可以包括:以指向启动类的启动对象的指针和启动类对应的延迟时间为函数输入参数,调用启动类中的延迟注册函数,将启动类的启动对象与启动类对应的延迟时间注册至第一集合对象中。
具体地,对于每个启动类而言,启动类预先继承了启动接口协议,使得启动类具备启动接口协议自身的特性,从而可以直接利用指向启动类的启动对象的this指针的方式,将启动类的启动对象进行注册,以便于后续任务的自动调度。示例性地,若启动类A对应的延迟时间为100,则可以在启动类A的构造函数中通过直接调用延迟注册函数registerStart(this,100)的方式,将启动类A的启动对象和对应的延迟时间注册至第一集合对象中,从而使得注册更加便捷。
在上述技术方案的基础上,在第一集合对象为键值对结构类型的对象时,延迟注册函数可以通过如下步骤实现将各启动类的启动对象与启动类对应的延迟时间注册至第一集合对象中的功能:
以启动类的启动对象、启动类对应的延迟时间为函数输入参数,调用第一集合对象中的存储函数,将启动类的启动对象作为键值对中的键信息,启动类对应的延迟时间作为键值对中的值信息,存储至第一集合对象中。
其中,第一集合对象的存储结构类型可以为键值对Map结构类型,且将每个启动类的启动对象和对应的延迟时间作为一个键值对信息,此时每个键值对信息可以视为第一集合对象中的一个元素信息。示例性地,第一集合对象mapData可以定义为:Map<IStartInit,Long>mapData,并且对第一集合对象进行初始化操作,具体的初始化方法是:mapData=newHashMap<Long,IStartInit>()。其中,第一集合对象mapData的每个键值对中的键信息key为启动接口协议IStartInit类型的启动对象,值信息value为Long类型的延迟时间。存储函数是预先定义的,用于将启动对象和对应的延迟时间存储至第一集合对象中的函数。
具体地,在延迟注册函数的内部,可以通过以启动类的启动对象mIStartInit、启动类对应的延迟时间delay为函数输入参数,调用第一集合对象mapData中的存储函数mapData.put(mIStartInit,delay),将启动类的启动对象mIStartInit作为一个键值对中的键信息,以及将启动类对应的延迟时间delay作为该键值对中的值信息,存储至第一集合对象mapData中,同理,可以将所有启动类的启动对象和对应的延迟时间以键值对的方式存储至第一集合对象中,以便于后续对各启动对象进行动态调度和加载。
实施例二
图2为本发明实施例二提供的一种基于协议注册的应用启动方法的流程图,本实施例在上述实施例的基础上,对“对第二集合对象中的延迟时间和启动对象进行依次遍历,并根据遍历到的当前延迟时间进行定时操作,加载当前延迟时间对应的当前启动对象”进行了优化。其中与上述实施例相同或相应的术语的解释在此不再赘述。
参见图2,本实施例提供的基于协议注册的应用启动方法具体包括以下步骤:
S210、获取应用程序的多个启动类以及每个启动类对应的延迟时间,其中,每个启动类预先继承启动接口协议。
S220、通过调用各启动类中的延迟注册函数,将各启动类的启动对象与启动类对应的延迟时间注册至第一集合对象中,其中,启动对象为启动接口协议类型的对象。
S230、根据预设排列方式,对第一集合对象中的各延迟时间进行升序排列,以及相应地调整第一集合对象中各启动对象的排列顺序,并将排列后的第一集合对象确定为第二集合对象。
S240、将第二集合对象中的第一个延迟时间均作为当前目标时间和当前延迟时间,并获得当前延迟时间的后一延迟时间。
其中,当前目标时间可以是指定时器的定时时间。当加载第二集合对象中的第一个延迟时间对应的启动对象时,可以直接将第一个延迟时间作为当前目标时间,以便在到达当前目标时间时,可以加载该启动对象。当前延迟时间可以是指当前时刻遍历到的第二集合对象中的延迟时间。在第一个循环周期内,将第二集合对象中的第一个延迟时间作为当前延迟时间。后一延迟时间可以是指基于第二集合对象中延迟时间的排列顺序,与当前延迟时间相邻的后一个延迟时间。若当前延迟时间为第二集合对象中第一个延迟时间,则后一延迟时间为第二集合对象中第二个延迟时间。
示例性地,可以定义三个整型int类型的元素变量:int delay1=0,int delay2=0,int delay3=0,利用元素变量delay1、delay2和delay3分别存储当前延迟时间、后一延迟时间和当前目标时间。还可以定义一个整型int类型的索引号变量:int index=0,利用索引号变量index来存储当前延迟时间对应的当前索引号。在第一个循环周期内,对delay1、delay2、delay3和index进行赋值,即将第二集合对象中的第一个延迟时间均赋值给delay1和delay3,将第二个延迟时间赋值给delay2,索引号变量index赋值为0。
S250、以当前延迟时间对应的当前索引号和当前目标时间为函数输入参数,调用消息处理对象中的消息发送函数,于延迟当前目标时间后,获取包含当前索引号的延迟消息。
其中,消息处理对象可以是预先创建的一个全局的Handler对象。本实施例中的消息处理对象可以通过private Handler mHandler来创建,并通过调用mHandler=newHandler()来实例化消息处理对象mHandler。消息发送函数是预先定义,可以用于发送延迟消息的函数。消息发送函数具有两个输入参数,第一个输入参数为int类型的参数,用于唯一标识一条延迟消息,以便区分不同的延迟消息。本实施例可以将当前延迟时间对应的当前索引号index直接作为第一个输入参数,即作为在mHandler的定时器消息中的唯一标识符,从而可以更加便捷地区分不同的延迟消息。第二个输入参数为当前目标时间delay3,用于表征延迟消息的发送时间,即定时器的定时时间。
本实施例需要开启多个定时器,以便逐次分批地加载启动对象。若直接通过调用Timer类来开启定时器,其性能损耗较高。针对于此,本实施例通过Android中的用于线程通行的Handler类来进行定时器的开启,从而可以大大降低性能损耗。具体地,可以以当前延迟时间对应的当前索引号index和当前目标时间delay3作为输入参数,调用消息处理对象mHandler中的消息发送函数mHandler.sendMessageDelay(index,delay3),在延迟当前目标时间delay3后,可以获得一个消息内容为index的延迟消息。
S260、在获得延迟消息时,调用当前延迟时间对应的当前启动对象中的启动函数,以加载当前启动对象。
具体地,当获得延迟消息时,表明已经到达了定时器的定时时间,此时可以根据第二集合对象中延迟时间与启动对象的对应关系,获得当前延迟时间对应的当前启动对象,并通过调用当前启动对象中的启动函数,来加载当前启动对象,实现相应的初始化逻辑。
示例性地,在获得包含当前索引号的延迟消息时,可以通过调用当前启动对象mIStartInit中的启动函数mIStartInit.init(),从而基于协议的方式进行调用实现启动类中具体的初始化逻辑。本实施例可以通过统一地调用启动对象中的启动函数mIStartInit.init()的方式,来加载每个启动对象,从而使得启动对象的初始化过程更加便捷统一。
S270、检测当前延迟时间是否为第二集合对象中的最后一个延迟时间;若是,则进入步骤S280;若否,则进入步骤S290。
具体地,本实施例可以在获得延迟消息时,根据延迟消息中的当前索引号来检测当前延迟时间是否为第二集合对象中的最后一个延迟时间,以便确定所有的启动对象是否全部被加载完毕。若当前延迟时间是最后一个延迟时间,则表明遍历结束,即启动应用程序时所需要延迟加载的启动对象均加载完毕,此时可以执行步骤S280的操作。若当前延迟时间不是最后一个延迟时间,则表明遍历还未结束,即还需开启下一个定时器,以加载下一个启动对象,此时可以执行步骤S290的操作,以便及时开启下一个定时器。
S280、应用程序启动结束。
具体地,在当前延迟时间为第二集合对象中的最后一个延迟时间时,表明启动应用程序时所需要延迟加载的启动对象均按照相应的定时周期加载完毕,此时可以直接确定应用程序启动结束。
S290、将后一延迟时间与当前延迟时间之间的时间差更新为当前目标时间,以及将后一延迟时间更新为当前延迟时间,并返回执行步骤S250。
具体地,在当前延迟时间不是第二集合对象中的最后一个延迟时间时,需要确定下一个定时器的定时时间,以便加载下一个启动对象。本实施例中每个启动对象对应的延迟时间均是从应用程序的开始启动时刻算起的,从而下一个定时器的定时时间应为后一延迟时间与当前延迟时间之间的时间差。本实施例通过更新当前目标时间delay3为后一延迟时间delay2与当前延迟时间delay1之间的时间差,来设置下一个定时器的定时时间,即delay3=delay2-delay1。在当前目标时间更新后,将当前延迟时间的后一延迟时间更新为当前延迟时间,并将当前索引号index进行自加操作index++,以及更新delay1和delay2中的数据,以便可以将第二集合对象中的延迟时间依次确定为当前延迟时间,从而可以依次加载相应的启动对象。在将当前目标时间和当前延迟时间更新后,通过重复执行步骤S250-S270进入下一个循环周期。
需要注意的是,若第二集合对象中相邻的两个延迟时间相同,即定时器的定时时间为零,此时可以同时加载这两个延迟时间对应的启动对象。本实施例还可以将步骤S260-S290所提供的功能进行封装为消息处理对象mHandler中的消息接收函数handleMessage(),从而可以以延迟消息为输入参数,直接调用消息处理对象mHandler中的消息接收函数mHandler.handleMessage(),对延迟消息进行处理,实现上述步骤S260-S290所提供的功能,从而使得操作更加便捷。
本实施例的技术方案,通过利用线程通行的Handler类来进行定时器的开启操作,以及利用对第二间集合对象中的每个延迟时间进行循环遍历的方式,从而可以按照延迟时间的先后顺序,依次加载相应的启动对象,降低了性能损耗,提高了运行效率,从而进一步提高了应用程序的启动速度。
在上述技术方案的基础上,在S260之前,还可以包括:开启一个新线程,以在新线程中,执行调用当前延迟时间对应的当前启动对象中的启动函数,以加载当前启动对象的操作。
具体地,本实施例可以通过调用Thread mThread=new Thread(),开启一个新线程,以便在开启的新线程中加载当前启动对象,从而可以避免自动在主线程中进行加载操作,进而可以避免导致主线程卡顿或者引用异常的情况,提高了运行性能。
以下是本发明实施例提供的基于协议注册的应用启动装置的实施例,该装置与上述各实施例的基于协议注册的应用启动方法属于同一个发明构思,在基于协议注册的应用启动装置的实施例中未详尽描述的细节内容,可以参考上述基于协议注册的应用启动方法的实施例。
实施例三
图3为本发明实施例三提供的一种基于协议注册的应用启动装置的结构示意图,本实施例可适用于启动基于Android***的应用程序的情况,该装置具体包括:启动类获取模块310、延迟注册模块320和启动对象调度加载模块330。
其中,启动类获取模块310,用于获取应用程序的多个启动类以及每个启动类对应的延迟时间,其中,每个启动类预先继承启动接口协议;延迟注册模块320,用于通过调用各启动类中的延迟注册函数,将各启动类的启动对象与启动类对应的延迟时间注册至第一集合对象中,其中,启动对象为启动接口协议类型的对象,第一集合对象为键值对结构类型的对象;启动对象调度加载模块330,用于根据第一集合对象中的各延迟时间,对第一集合对象中的各启动对象进行调度和加载。
可选地,启动对象调度加载模块330,包括:
第二集合对象确定单元,用于根据预设排列方式,对第一集合对象中的各延迟时间进行升序排列,以及相应地调整第一集合对象中各启动对象的排列顺序,并将排列后的第一集合对象确定为第二集合对象;
启动对象加载单元,用于对第二集合对象中的延迟时间和启动对象进行依次遍历,并根据遍历到的当前延迟时间进行定时操作,加载当前延迟时间对应的当前启动对象。
可选地,启动对象加载单元,具体用于:
将第二集合对象中的第一个延迟时间均作为当前目标时间和当前延迟时间,并获得当前延迟时间的后一延迟时间;
以当前延迟时间对应的当前索引号和当前目标时间为函数输入参数,调用消息处理对象中的消息发送函数,于延迟当前目标时间后,获取包含当前索引号的延迟消息;
在获得延迟消息时,调用当前延迟时间对应的当前启动对象中的启动函数,以加载当前启动对象;
检测当前延迟时间是否为第二集合对象中的最后一个延迟时间;
若是,则应用程序启动结束;
若否,则将后一延迟时间与当前延迟时间之间的时间差更新为当前目标时间,以及将后一延迟时间更新为当前延迟时间,并返回执行以当前延迟时间对应的当前索引号和当前目标时间为函数输入参数,调用消息处理对象中的消息发送函数的操作。
可选地,延迟注册函数具有公有权限修饰符,且延迟注册函数具有第一输入参数和第二输入参数,其中,第一输入参数为启动接口协议类型的启动对象,第二输入参数为长整型类型的延迟时间。
可选地,延迟注册模块320,具体用于:
以指向启动类的启动对象的指针和启动类对应的延迟时间为函数输入参数,调用启动类中的延迟注册函数,将启动类的启动对象与启动类对应的延迟时间注册至第一集合对象中。
可选地,第一集合对象为键值对结构类型的对象;相应地,延迟注册模块320还包括延迟注册函数执行单元,具体用于:
通过如下步骤实现将各启动类的启动对象与启动类对应的延迟时间注册至第一集合对象中的功能:
以启动类的启动对象、启动类对应的延迟时间为函数输入参数,调用第一集合对象中的存储函数,将启动类的启动对象作为键值对中的键信息,启动类对应的延迟时间作为键值对中的值信息,存储至第一集合对象中。
可选地,该装置还包括:启动接口协议继承模块,用于每个启动类预先调用接口继承关键字,继承启动接口协议,并复写启动接口协议中的启动函数,以使启动类中的启动函数实现相应的启动对象初始化的功能。
本发明实施例所提供的基于协议注册的应用启动装置可执行本发明任意实施例所提供的基于协议注册的应用启动方法,具备执行基于协议注册的应用启动方法相应的功能模块和有益效果。
实施例四
图4是本发明实施例四提供的一种终端的结构示意图。参见图4,该终端包括:
一个或多个处理器410;
存储器420,用于存储一个或多个程序;
当一个或多个程序被一个或多个处理器410执行,使得一个或多个处理器410实现如上述实施例中任意实施例所提供的基于协议注册的应用启动方法,该方法包括:
获取应用程序的多个启动类以及每个启动类对应的延迟时间,其中,每个启动类预先继承启动接口协议;
通过调用各启动类中的延迟注册函数,将各启动类的启动对象与启动类对应的延迟时间注册至第一集合对象中,其中,启动对象为启动接口协议类型的对象;
根据第一集合对象中的各延迟时间,对第一集合对象中的各启动对象进行调度和加载。
图4中以一个处理器410为例;终端中的处理器410和存储器420可以通过总线或其他方式连接,图4中以通过总线连接为例。
存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的基于协议注册的应用启动方法对应的程序指令/模块(例如,基于协议注册的应用启动装置中的启动类获取模块310、延迟注册模块320和启动对象调度加载模块330)。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行终端的各种功能应用以及数据处理,即实现上述的基于协议注册的应用启动方法。
存储器420主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本实施例提出的终端与上述实施例提出的基于协议注册的应用启动方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述实施例,并且本实施例具备执行基于协议注册的应用启动方法相同的有益效果。
实施例五
本实施例五提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例的基于协议注册的应用启动方法,该方法包括:
获取应用程序的多个启动类以及每个启动类对应的延迟时间,其中,每个启动类预先继承启动接口协议;
通过调用各启动类中的延迟注册函数,将各启动类的启动对象与启动类对应的延迟时间注册至第一集合对象中,其中,启动对象为启动接口协议类型的对象;
根据第一集合对象中的各延迟时间,对第一集合对象中的各启动对象进行调度和加载。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种基于协议注册的应用启动方法,其特征在于,包括:
获取应用程序的多个启动类以及每个所述启动类对应的延迟时间,其中,每个所述启动类预先继承启动接口协议;
通过调用各所述启动类中的延迟注册函数,将各所述启动类的启动对象与所述启动类对应的延迟时间注册至第一集合对象中,其中,所述启动对象为所述启动接口协议类型的对象;
根据所述第一集合对象中的各所述延迟时间,对所述第一集合对象中的各所述启动对象进行调度和加载。
2.根据权利要求1所述的方法,其特征在于,根据所述第一集合对象中的各所述延迟时间,对所述第一集合对象中的各所述启动对象进行调度和加载,包括:
根据预设排列方式,对所述第一集合对象中的各所述延迟时间进行升序排列,以及相应地调整所述第一集合对象中各所述启动对象的排列顺序,并将排列后的第一集合对象确定为第二集合对象;
对所述第二集合对象中的延迟时间和启动对象进行依次遍历,并根据遍历到的当前延迟时间进行定时操作,加载所述当前延迟时间对应的当前启动对象。
3.根据权利要求2所述的方法,其特征在于,对所述第二集合对象中的延迟时间和启动对象进行依次遍历,并根据遍历到的当前延迟时间进行定时操作,加载所述当前延迟时间对应的当前启动对象,包括:
将所述第二集合对象中的第一个延迟时间均作为当前目标时间和当前延迟时间,并获得当前延迟时间的后一延迟时间;
以当前延迟时间对应的当前索引号和当前目标时间为函数输入参数,调用消息处理对象中的消息发送函数,于延迟当前目标时间后,获取包含当前索引号的延迟消息;
在获得所述延迟消息时,调用当前延迟时间对应的当前启动对象中的启动函数,以加载当前启动对象;
检测所述当前延迟时间是否为所述第二集合对象中的最后一个延迟时间;
若是,则所述应用程序启动结束;
若否,则将后一延迟时间与当前延迟时间之间的时间差更新为当前目标时间,以及将后一延迟时间更新为当前延迟时间,并返回执行所述以当前延迟时间对应的当前索引号和当前目标时间为函数输入参数,调用消息处理对象中的消息发送函数的操作。
4.根据权利要求1所述的方法,其特征在于,所述延迟注册函数具有公有权限修饰符,且所述延迟注册函数具有第一输入参数和第二输入参数,其中,所述第一输入参数为所述启动接口协议类型的启动对象,所述第二输入参数为长整型类型的延迟时间。
5.根据权利要求1所述的方法,其特征在于,通过调用各所述启动类中的延迟注册函数,将各所述启动类的启动对象与所述启动类对应的延迟时间注册至第一集合对象中,包括:
以指向所述启动类的启动对象的指针和所述启动类对应的延迟时间为函数输入参数,调用所述启动类中的延迟注册函数,将所述启动类的启动对象与所述启动类对应的延迟时间注册至第一集合对象中。
6.根据权利要求1或5所述的方法,其特征在于,所述第一集合对象为键值对结构类型的对象;
相应地,所述延迟注册函数通过如下步骤实现将各所述启动类的启动对象与所述启动类对应的延迟时间注册至第一集合对象中的功能:
以所述启动类的启动对象、所述启动类对应的延迟时间为函数输入参数,调用第一集合对象中的存储函数,将所述启动类的启动对象作为键值对中的键信息,所述启动类对应的延迟时间作为所述键值对中的值信息,存储至第一集合对象中。
7.根据权利要求1所述的方法,其特征在于,每个所述启动类预先继承启动接口协议,包括:
每个所述启动类预先调用接口继承关键字,继承所述启动接口协议,并复写所述启动接口协议中的启动函数,以使所述启动类中的启动函数实现相应的启动对象初始化的功能。
8.一种基于协议注册的应用启动装置,其特征在于,包括:
启动类获取模块,用于获取应用程序的多个启动类以及每个所述启动类对应的延迟时间,其中,每个所述启动类预先继承启动接口协议;
延迟注册模块,用于通过调用各所述启动类中的延迟注册函数,将各所述启动类的启动对象与所述启动类对应的延迟时间注册至第一集合对象中,其中,所述启动对象为所述启动接口协议类型的对象,所述第一集合对象为键值对结构类型的对象;
启动对象调度加载模块,用于根据所述第一集合对象中的各所述延迟时间,对所述第一集合对象中的各所述启动对象进行调度和加载。
9.一种终端,其特征在于,所述终端包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的基于协议注册的应用启动方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的基于协议注册的应用启动方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910027103.XA CN109753321B (zh) | 2019-01-11 | 2019-01-11 | 基于协议注册的应用启动方法、装置、终端和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910027103.XA CN109753321B (zh) | 2019-01-11 | 2019-01-11 | 基于协议注册的应用启动方法、装置、终端和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109753321A true CN109753321A (zh) | 2019-05-14 |
CN109753321B CN109753321B (zh) | 2022-02-08 |
Family
ID=66405611
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910027103.XA Active CN109753321B (zh) | 2019-01-11 | 2019-01-11 | 基于协议注册的应用启动方法、装置、终端和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109753321B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111427630A (zh) * | 2020-03-31 | 2020-07-17 | 北京金堤科技有限公司 | 冷启动优化方法和装置、电子设备和存储介质 |
CN113595814A (zh) * | 2021-07-06 | 2021-11-02 | 深圳Tcl新技术有限公司 | 消息延迟检测方法、装置、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080154461A1 (en) * | 2006-12-19 | 2008-06-26 | Siemens Vdo Automotive Ag | Apparatus, system and method for allowing prescribed components in the system to be started with minimal delay |
CN102298532A (zh) * | 2011-09-15 | 2011-12-28 | 奇智软件(北京)有限公司 | 一种基于启动项的管理方法及装置 |
CN102707973A (zh) * | 2012-05-04 | 2012-10-03 | 惠州Tcl移动通信有限公司 | 基于Android***的应用程序启动的方法和*** |
US20140095921A1 (en) * | 2012-09-28 | 2014-04-03 | Fujitsu Limited | Information processing apparatus, startup program, and startup method |
US20140122858A1 (en) * | 2012-10-29 | 2014-05-01 | Acer Incorporated | Method for accelerating boot-up and computer system device |
CN107133065A (zh) * | 2017-03-31 | 2017-09-05 | 北京奇艺世纪科技有限公司 | 一种开启软件功能的方法及装置 |
CN107943576A (zh) * | 2017-12-14 | 2018-04-20 | 中国平安人寿保险股份有限公司 | 应用程序的启动优化方法、装置、设备、***及介质 |
CN108958808A (zh) * | 2017-05-22 | 2018-12-07 | 中兴通讯股份有限公司 | 终端启动方法及装置、终端及存储介质 |
-
2019
- 2019-01-11 CN CN201910027103.XA patent/CN109753321B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080154461A1 (en) * | 2006-12-19 | 2008-06-26 | Siemens Vdo Automotive Ag | Apparatus, system and method for allowing prescribed components in the system to be started with minimal delay |
CN102298532A (zh) * | 2011-09-15 | 2011-12-28 | 奇智软件(北京)有限公司 | 一种基于启动项的管理方法及装置 |
CN102707973A (zh) * | 2012-05-04 | 2012-10-03 | 惠州Tcl移动通信有限公司 | 基于Android***的应用程序启动的方法和*** |
US20140095921A1 (en) * | 2012-09-28 | 2014-04-03 | Fujitsu Limited | Information processing apparatus, startup program, and startup method |
US20140122858A1 (en) * | 2012-10-29 | 2014-05-01 | Acer Incorporated | Method for accelerating boot-up and computer system device |
CN107133065A (zh) * | 2017-03-31 | 2017-09-05 | 北京奇艺世纪科技有限公司 | 一种开启软件功能的方法及装置 |
CN108958808A (zh) * | 2017-05-22 | 2018-12-07 | 中兴通讯股份有限公司 | 终端启动方法及装置、终端及存储介质 |
CN107943576A (zh) * | 2017-12-14 | 2018-04-20 | 中国平安人寿保险股份有限公司 | 应用程序的启动优化方法、装置、设备、***及介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111427630A (zh) * | 2020-03-31 | 2020-07-17 | 北京金堤科技有限公司 | 冷启动优化方法和装置、电子设备和存储介质 |
CN111427630B (zh) * | 2020-03-31 | 2024-03-22 | 北京金堤科技有限公司 | 冷启动优化方法和装置、电子设备和存储介质 |
CN113595814A (zh) * | 2021-07-06 | 2021-11-02 | 深圳Tcl新技术有限公司 | 消息延迟检测方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109753321B (zh) | 2022-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2012152049A2 (zh) | 应用关闭方法及装置 | |
CN109067890A (zh) | 一种基于docker容器的CDN节点边缘计算*** | |
US20240111549A1 (en) | Method and apparatus for constructing android running environment | |
CN109753321A (zh) | 基于协议注册的应用启动方法、装置、终端和存储介质 | |
CN109471711A (zh) | 一种任务处理的方法及装置 | |
CN108399331A (zh) | 应用进程试用方法和*** | |
CN113645262A (zh) | 云计算服务***和方法 | |
CN110347952A (zh) | 一种打开直播间页面的方法、装置及计算机设备 | |
CN103595769B (zh) | Sdk实现文件上传的方法与装置 | |
CN110781180A (zh) | 一种数据筛选方法和数据筛选装置 | |
CN107491331B (zh) | 一种应用升级方法及终端设备 | |
CN109783159B (zh) | 基于配置信息的应用启动方法和装置 | |
CN110730220B (zh) | 基于***当前业务能力整合的智能调度方法和装置 | |
CN109739579A (zh) | 基于反馈协议的应用启动方法、装置和存储介质 | |
CN110457132A (zh) | 一种功能对象的创建方法、装置和终端设备 | |
CN109669735A (zh) | 基于延时注册的应用启动方法、装置和存储介质 | |
CN111953503A (zh) | Nfv资源部署编排方法和网络功能虚拟化编排器 | |
CN106650323B (zh) | 一种应用程序管理方法及装置 | |
CN109582394A (zh) | 一种应用程序启动方法、装置和存储介质 | |
WO2021097683A1 (zh) | 安卓***启动的方法、装置、设备及存储介质 | |
CN108958808A (zh) | 终端启动方法及装置、终端及存储介质 | |
CN113867831B (zh) | 智能设备控制方法、智能设备、存储介质及电子设备 | |
US12026501B2 (en) | Automated process and system update scheduling in a computer network | |
CN105260233A (zh) | 一种应用容器的创建方法和装置 | |
CN109995711A (zh) | 智能机器人的应用开发方法、装置、终端设备及介质 |
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 |