基于反馈协议的应用启动方法、装置和存储介质与流程

文档序号:17639611发布日期:2019-05-11 00:35阅读:258来源:国知局
基于反馈协议的应用启动方法、装置和存储介质与流程

本发明实施例涉及计算机技术,尤其涉及一种基于反馈协议的应用启动方法、装置和存储介质。



背景技术:

随着手机、平板电脑等终端的不断发展,终端上安装的应用程序(application,app)越来越多,用户对应用程序的需求也越来越多。为了满足用户的需求,应用程序的版本逐步升级,相应的启动项也逐渐增多,在同时启动这些启动项时,会大大降低应用程序的启动速度,影响用户体验。

目前,基于android系统的应用程序在启动时,往往可以通过减少启动项的方式来提高应用程序的启动速度。然而,在实际应用中大部分的启动项是必须启动的,无法被去掉。可见,现有应用启动的方式无法有效地解决应用程序启动慢的问题。



技术实现要素:

本发明实施例提供了一种基于反馈协议的应用启动方法、装置和存储介质,以提高应用程序的启动速度,并保证应用程序的正常启动,从而提升了用户体验。

第一方面,本发明实施例提供了一种基于反馈协议的应用启动方法,包括:

应用程序的每个启动协议对象通过调用延迟注册函数,将所述启动协议对象与所述启动协议对象对应的延迟时间注册至所述应用程序的调度协议对象中的第一集合对象,其中,每个所述启动协议对象预先基于启动接口协议生成,所述调度协议对象预先基于反馈接口协议生成;

所述调度协议对象根据所述第一集合对象中的各所述延迟时间,对所述第一集合对象中的各所述启动协议对象进行调度并触发所述启动协议对象的加载操作;

所述启动协议对象若存在加载异常情况,则调用反馈协议全局对象中的信息反馈函数,将所述启动协议对象的异常信息发送至所述调度协议对象中,以使所述调度协议对象根据接收到的异常信息重新触发相应启动协议对象的加载操作,其中,所述反馈协议全局对象通过预先将所述调度协议对象注册至所述启动协议对象中获得。

第二方面,本发明实施例还提供了一种基于反馈协议的应用启动装置,包括:

延迟注册模块,用于应用程序的每个启动协议对象通过调用延迟注册函数,将所述启动协议对象与所述启动协议对象对应的延迟时间注册至所述应用程序的调度协议对象中的第一集合对象,其中,每个所述启动协议对象预先基于启动接口协议生成,所述调度协议对象预先基于反馈接口协议生成;

启动协议对象调度加载模块,用于所述调度协议对象根据所述第一集合对象中的各所述延迟时间,对所述第一集合对象中的各所述启动协议对象进行调度并触发所述启动协议对象的加载操作;

启动协议对象重新加载模块,用于所述启动协议对象若存在加载异常情况,则调用反馈协议全局对象中的信息反馈函数,将所述启动协议对象的异常信息发送至所述调度协议对象中,以使所述调度协议对象根据接收到的异常信息重新触发相应启动协议对象的加载操作,其中,所述反馈协议全局对象通过预先将所述调度协议对象注册至所述启动协议对象中获得。

第三方面,本发明实施例还提供了一种终端,所述终端包括:

一个或多个处理器;

存储器,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任意实施例提供的基于反馈协议的应用启动方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例提供的基于反馈协议的应用启动方法。

本发明实施例中启动应用程序时需要加载的每个启动协议对象预先基于统一的启动接口协议生成,以使每个启动协议对象中的启动函数可以实现相应初始化逻辑的功能,并且每个启动协议对象中可以具有相同的启动函数名称,提高启动过程的便捷性和统一性。每个启动协议对象利用延迟注册函数,将每个启动协议对象对应的延迟时间统一地注册至应用程序的调度协议对象中的第一集合对象中,从而调度协议对象可以根据第一集合对象中各延迟时间的先后顺序,对每个启动协议对象进行自动调度和动态加载,以避免在启动应用程序时同时加载所有启动协议对象的情况,从而提高了应用程序的启动速度,以及提升了用户体验。而且应用程序的调度协议对象预先基于反馈接口协议生成,并且预先将调度协议对象注册至每个启动协议对象中,获得一个反馈协议全局对象,使得启动协议对象在加载异常时,可以通过反馈协议全局对象中的信息反馈函数将异常信息发送至调度协议对象中,调度协议对象可以根据该异常信息重新触发相应启动协议对象的加载操作,以使应用程序具有重试初始化的功能,进一步保证了应用程序的正常启动。

附图说明

图1是本发明实施例一提供的一种基于反馈协议的应用启动方法的流程图;

图2是本发明实施例二提供的一种基于反馈协议的应用启动方法的流程图;

图3是本发明实施例三提供的一种基于反馈协议的应用启动装置的结构示意图;

图4是本发明实施例四提供的一种终端的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

图1为本发明实施例一提供的一种基于反馈协议的应用启动方法的流程图,本实施例可适用于启动基于android系统的应用程序的情况。该方法可以由基于反馈协议的应用启动装置来执行,该装置可以由软件和/或硬件的方式来实现,集成于具有播放功能的终端中,比如智能手机、平板电脑或掌上游戏机等。如图1所示,该方法具体包括以下步骤:

s110、应用程序的每个启动协议对象通过调用延迟注册函数,将启动协议对象与启动协议对象对应的延迟时间注册至应用程序的调度协议对象中的第一集合对象。

其中,启动协议对象可以是在启动应用程序时所需要启动的任务或功能模块等。每个启动协议对象预先基于启动接口协议生成,即启动协议对象为启动接口协议类型的对象。启动接口协议可以是指预先定义的,用于进行启动初始化的接口,并且启动接口协议中包含预先定义的启动函数。每个启动协议对象预先基于统一的启动接口协议生成,以使得每个启动协议对象中的启动函数可以实现相应的启动初始化的功能,并且每个启动协议对象可以具有相同的启动函数名称,从而可以提高启动过程的便捷性和统一性。启动协议对象对应的延迟时间可以是指在应用程序开始启动后,延迟加载该启动协议对象的时间。本实施例中的每个启动协议对象对应一个延迟时间,其中延迟时间可以根据用户需求和实际情况人为进行设置。示例性地,本实施例中的延迟时间可以是长整型long类型的信息,延迟时间的单位可以为毫秒ms。

本实施例中的调度协议对象可以是指对应用程序的各启动协议对象进行动态调度以实现启动协议对象的加载过程的功能模块。调度协议对象预先基于反馈接口协议生成,即调度协议对象为反馈接口协议类型的对象。反馈接口协议可以是指预先定义的,用于构建反馈通道的接口,以使启动协议对象可以将初始化加载信息反馈至调度协议对象中,并且反馈接口协议中包含预先定义的信息反馈函数。延迟注册函数是预先定义的,用于将启动协议对象与相应的延迟时间注册至调度协议对象的函数,以使调度协议对象可以获得每个启动协议对象对应的延迟加载时间。第一集合对象可以是指在调度协议对象中预先定义的,用于存储各个启动协议对象和对应的延迟时间的对象。

示例性地,本实施例可以预先定义一个统一的启动接口协议,且该启动接口协议中包含预先定义的,但未进行函数实现的启动函数。例如,启动接口协议可以定义为:

publicinterfaceistartinit{

publicvoidinit();

}

启动接口协议istartinit具有公有权限修饰符public的接口类型,以使所有启动类均可以继承该启动接口协议。启动接口协议的内部包含一个启动函数init,以通过启动函数init来实现启动协议对象的初始化逻辑。启动函数init也具有公有权限修饰符public,以便可以直接调用启动函数init,提高了应用程序启动的便捷性。

示例性地,反馈接口协议可以定义为:

publicinterfaceicallback{

publicvoidonerror(intwhichmodule,interrorcode,stringerrormessage);

}

反馈接口协议icallback具有公有权限修饰符public的接口类型。反馈接口协议icallback的内部包含一个信息反馈函数onerror,以便通过该信息反馈函数onerror反馈加载异常信息。信息反馈函数onerror具有三个输入参数,其中第一个输入参数whichmodule为整型int类型的,用于表示启动协议模块的标识,本实施例可以预先为每个启动协议对象分配一个唯一标识符,以便区分不同的启动协议对象;第二个输入参数errorcode为int类型的,用于表示加载异常的错误编码信息;第三个输入参数errormessage为字符串string类型的,用于表示加载异常的详细信息。

示例性地,延迟注册函数可以定义为:

publicvoidregisterstart(istartinitmistartinit,longdelay)

其中,延迟注册函数registerstart具有公有权限修饰符public,以使每个启动协议对象可以直接调用该延迟注册函数。延迟注册函数具有两个输入参数;其中,第一个输入参数mistartinit为启动接口协议类型istartinit的协议对象,第二输入参数delay为长整型类型的延迟时间。

具体地,对于应用程序的每个启动协议对象而言,可以通过以启动协议对象和启动协议对象对应的延迟时间为函数输入参数,调用延迟注册函数,将启动协议对象和启动协议对象对应的延迟时间注册至调度协议对象中的第一集合对象中。示例性地,本实施例也可以直接利用指向启动协议对象的this指针的方式,将启动协议对象进行注册,以便于后续任务的自动调度。示例性地,若启动协议对象a对应的延迟时间为100,则在启动协议对象a所属的启动类的构造函数中可以通过直接调用延迟注册函数registerstart(this,100)的方式,将启动协议对象a和对应的延迟时间注册至调度协议对象中的第一集合对象,从而使得注册更加便捷。

s120、调度协议对象根据第一集合对象中的各延迟时间,对第一集合对象中的各启动协议对象进行调度并触发启动协议对象的加载操作。

具体地,调度协议对象可以根据第一集合对象存储的各个延迟时间的先后顺序,对第一集合对象存储的各个启动协议对象进行自动调度,并可以通过调用启动协议对象中的启动函数触发启动协议对象的加载操作,以实现启动协议对象的动态加载,即执行启动协议对象的初始化逻辑。通过对每个启动协议对象设置一定的延迟时间,并按照设置的延迟时间对启动协议对象进行动态加载,从而可以避免在启动应用程序时同时加载所有启动协议对象的情况。本实施例可以通过逐次分批的加载启动协议对象,可以提高终端的运行效率,从而可以缩短应用程度的启动时间,提高启动速度,进而可以提升用户的观看体验。

示例性地,s120可以包括:根据预设排列方式,对第一集合对象中的各延迟时间进行升序排列,以及相应地调整第一集合对象中各启动协议对象的排列顺序,并将排列后的第一集合对象确定为第二集合对象;对第二集合对象中的延迟时间和启动协议对象进行依次遍历,并根据遍历到的当前延迟时间进行定时操作,触发当前延迟时间对应的当前启动协议对象的加载操作。

其中,预设排列方式可以是但不限于二分法排列方式。

具体地,本实施例的第一集合对象中存储的各延迟时间可能不是按照延迟时间的先后顺序进行排列的,从而需要基于预设排列方式,将第一集合对象中的各延迟时间进行升序排列。通过调节第一集合对象中延迟时间的排列顺序,可以实现对启动协议对象的自动调度。基于启动协议对象与延迟时间之间的一一对应关系,在调整延迟时间的排列顺序时,可以相应地调整第一集合对象中启动协议对象的排列顺序,以保证调整后的每个启动协议对象与延迟时间的对应关系保持不变。将调整后的第一集合对象确定为第二集合对象,此时第二集合对象中的各延迟时间以从小到大的顺序进行排列。通过对第二集合对象中的延迟时间和启动协议对象进行依次遍历,逐次获得一个启动协议对象以及该启动协议对象对应的延迟时间。本实施例可以通过直接调用定时器timer类的方式,根据遍历到的当前延迟时间来进行定时操作,并可以通过调用当前延迟时间对应的当前启动协议对象中的启动函数的方式,触发当前启动协议对象的加载操作,从而实现启动协议对象的动态加载和初始化。

s130、启动协议对象若存在加载异常情况,则调用反馈协议全局对象中的信息反馈函数,将启动协议对象的异常信息发送至调度协议对象中,以使调度协议对象根据接收到的异常信息重新触发相应启动协议对象的加载操作。

其中,反馈协议全局对象是指启动协议对象中反馈接口协议类型的全局对象。反馈协议全局对象可以通过预先将调度协议对象注册至启动协议对象中获得。信息反馈函数可以是预先定义的反馈接口协议内部中的函数onerror。启动协议对象的异常信息可以包括但不限于存在加载异常的启动协议模块的标识,加载异常的错误编码信息和加载异常的详细信息。

具体地,本实施例通过预先将反馈接口协议类型的调度协议对象注册至启动协议对象中,使得启动协议对象可以获得反馈接口协议类型的反馈协议全局对象,从而可以建立启动协议对象与调度协议对象之间的反馈通道,以使启动协议对象可以通过反馈协议全局对象将初始化加载信息反馈至调度协议对象中。若某个启动协议对象在加载过程中检测到加载异常信号时,则表明该启动协议对象存在加载异常的情况,此时可以获得该启动协议对象的异常信息,并以该异常信息为输入参数,调用反馈协议全局对象中的信息反馈函数,将该启动协议对象的异常信息发送至调度协议对象中。调度协议对象可以根据接收的异常信息确定存在加载异常的启动协议对象,并重新触发该启动协议对象的加载操作,从而使得启动协议对象具有重试初始化的功能,提高了应用启动系统的健壮性,进一步保证了应用程序的正常启动。

本实施例的技术方案,启动应用程序时需要加载的每个启动协议对象预先基于统一的启动接口协议生成,以使每个启动协议对象中的启动函数可以实现相应初始化逻辑的功能,并且每个启动协议对象中可以具有相同的启动函数名称,提高启动过程的便捷性和统一性。每个启动协议对象利用延迟注册函数,将每个启动协议对象对应的延迟时间统一地注册至应用程序的调度协议对象中的第一集合对象中,从而调度协议对象可以根据第一集合对象中各延迟时间的先后顺序,对每个启动协议对象进行自动调度和动态加载,以避免在启动应用程序时同时加载所有启动协议对象的情况,从而提高了应用程序的启动速度,以及提升了用户体验。而且应用程序的调度协议对象预先基于反馈接口协议生成,并且预先将调度协议对象注册至每个启动协议对象中,获得一个反馈协议全局对象,使得启动协议对象在加载异常时,可以通过反馈协议全局对象中的信息反馈函数将异常信息发送至调度协议对象中,调度协议对象可以根据该异常信息重新触发相应启动协议对象的加载操作,以使应用程序具有重试初始化的功能,进一步保证了应用程序的正常启动。

在上述技术方案的基础上,每个启动协议对象预先基于启动接口协议生成,包括:应用程序的每个启动类预先调用接口继承关键字,继承启动接口协议,并复写启动接口协议中的启动函数,并对继承启动接口协议的启动类进行实例化,获得每个启动类的启动协议对象。

其中,启动类可以是指启动应用程序时所需要启动的启动协议对象所属的类。接口继承关键字可以是指java语言中规定的进行接口协议继承的关键字。

具体地,对于应用程序的每个启动类而言,启动类可以通过调用接口继承关键字implement的方式,继承启动接口协议istartinit,并且在启动类中通过复写@override的方式,复写启动接口协议istartinit中的启动函数init,以使启动类对应的初始化逻辑在启动类的复写函数init中进行实现,并将继承启动接口协议的启动类进行实例化,获得相应的启动协议对象mistartinit,使得启动协议对象中的启动函数init可以执行相应的初始化逻辑。示例性地,启动类a可以通过classaimplementsistartinit的方式继承启动接口协议istartinit,比如启动类a可以定义为:

本实施例通过将每个启动类预先继承启动接口协议,使得实例化后的每个启动协议对象具有相同的启动函数名称init,从而解决了现有技术中每个启动协议对象对应的启动函数名称不一致的问题,从而可以更加便捷地调用启动协议对象中的启动函数,提高启动过程的统一性。

在上述技术方案的基础上,调度协议对象预先基于反馈接口协议生成,包括:应用程序的调度类预先调用接口继承关键字,继承反馈接口协议,并复写反馈接口协议中的信息反馈函数,并对继承反馈接口协议的调度类进行实例化,获得调度类的调度协议对象。

其中,应用程序的调度类可以是指调用协议对象所属的类。具体地,应用程序的调度类可以通过调用接口继承关键字implement的方式,继承反馈接口协议icallback,并且在调度类中通过复写@override的方式,复写反馈接口协议icallback中的信息反馈函数onerror,并将继承反馈接口协议的调度类进行实例化,获得反馈接口协议类型的调度协议对象callback,以便后续进行通道连接。

在上述技术方案的基础上,在第一集合对象为键值对结构类型的对象时,延迟注册函数通过如下步骤实现将启动协议对象与启动协议对象对应的延迟时间注册至应用程序的调度协议对象中的第一集合对象的功能:以启动协议对象、启动协议对象对应的延迟时间为函数输入参数,调用第一集合对象中的存储函数,将启动协议对象作为键值对中的键信息,启动协议对象对应的延迟时间作为键值对中的值信息,存储至第一集合对象中。

其中,第一集合对象的存储结构类型可以为键值对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中,同理,可以将所有启动协议对象和对应的延迟时间以键值对的方式存储至第一集合对象中,以便于后续对各启动协议对象进行动态调度和加载。

在上述技术方案的基础上,将调度协议对象注册至启动协议对象中获得反馈协议全局对象,可以包括:通过以指向调度协议对象的指针为函数输入参数,调用启动协议对象中的反馈注册函数,将调度协议对象注册至启动协议对象中,获得反馈协议全局对象。

其中,反馈注册函数是预先定义的,用于将调度协议对象注册至启动协议对象中的函数,以构建调度协议对象和启动协议对象之间的反馈通道。示例性地,反馈注册函数可以定义为:

publicvoidregistercallback(icallbackcallback)

反馈注册函数registercallback具有公有权限修饰符public。反馈注册函数registercallback具有一个反馈接口协议icallback类型的输入参数callback;registercallback具有一个void空类型的返回值。

具体地,每个启动协议对象中均预先定义一个反馈注册函数。本实施例中的调度协议对象预先继承了反馈接口协议icallback,从而可以利用this指针来表示调度协议对象。调度协议对象所属的调度类在构造函数中可以直接以this指针为函数输入参数,调用启动协议对象中的反馈注册函数,即调用registercallback(this),将调度协议对象callback注册至启动协议对象中,从而可以获得反馈协议全局对象。示例性地,在每个启动协议对象中可以预先定义一个全局的反馈接口协议类型的反馈协议对象mcallback,即privateicallbackmcallback,并在反馈注册函数的内部通过调用mcallback=callback的方式将调度协议对象callback的权限扩展至反馈协议全局对象mcallback,以便后续启动协议对象可以直接通用调用反馈协议全局对象mcallback的方式进行信息反馈。

实施例二

图2为本发明实施例二提供的一种基于反馈协议的应用启动方法的流程图,本实施例在上述实施例的基础上,对:“根据第一集合对象中的各延迟时间,对第一集合对象中的各启动协议对象进行调度并触发启动协议对象的加载操作”进行了优化。其中与上述实施例相同或相应的术语的解释在此不再赘述。

参见图2,本实施例提供的基于反馈协议的应用启动方法具体包括以下步骤:

s210、应用程序的每个启动协议对象通过调用延迟注册函数,将启动协议对象与启动协议对象对应的延迟时间注册至应用程序的调度协议对象中的第一集合对象。

s220、调度协议对象根据预设排列方式,对第一集合对象中的各延迟时间进行升序排列,以及相应地调整第一集合对象中各启动协议对象的排列顺序,并将排列后的第一集合对象确定为第二集合对象。

s230、调度协议对象将第二集合对象中的第一个延迟时间均作为当前目标时间和当前延迟时间,并获得当前延迟时间的后一延迟时间。

其中,当前目标时间可以是指定时器的定时时间。当加载第二集合对象中的第一个延迟时间对应的启动协议对象时,可以直接将第一个延迟时间作为当前目标时间,以便在到达当前目标时间时,可以触发该启动协议对象的加载操作。当前延迟时间可以是指当前时刻遍历到的第二集合对象中的延迟时间。在第一个循环周期内,将第二集合对象中的第一个延迟时间作为当前延迟时间。后一延迟时间可以是指基于第二集合对象中延迟时间的排列顺序,与当前延迟时间相邻的后一个延迟时间。若当前延迟时间为第二集合对象中的第一个延迟时间,则后一延迟时间为第二集合对象中的第二个延迟时间。

示例性地,可以定义三个整型int类型的元素变量:intdelay1=0,intdelay2=0,intdelay3=0,利用元素变量delay1、delay2和delay3分别存储当前延迟时间、后一延迟时间和当前目标时间。还可以定义一个整型int类型的索引号变量:intindex=0,利用索引号变量index来存储当前延迟时间对应的当前索引号。在第一个循环周期内,对delay1、delay2、delay3和index进行赋值,即将第二集合对象中的第一个延迟时间均赋值给delay1和delay3,将第二个延迟时间赋值给delay2,索引号变量index赋值为0。

s240、以当前延迟时间对应的当前索引号和当前目标时间为函数输入参数,调用消息处理对象中的消息发送函数,于延迟当前目标时间后,获取包含当前索引号的延迟消息。

其中,消息处理对象可以是预先创建的一个全局的handler对象。本实施例中的消息处理对象可以通过privatehandlermhandler来创建,并通过调用mhandler=newhandler()来实例化消息处理对象mhandler。消息发送函数是预先定义,可以用于发送延迟消息的函数。消息发送函数具有两个输入参数,第一个输入参数为int类型的参数,用于唯一标识一条延迟消息,以便区分不同的延迟消息。本实施例可以将当前延迟时间对应的当前索引号index直接作为第一个输入参数,即作为在mhandler的定时器消息中的唯一标识符,从而可以更加便捷地区分不同的延迟消息。第二个输入参数为当前目标时间delay3,用于表征延迟消息的发送时刻,即到达定时器的定时时间时发送。

本实施例需要开启多个定时器,以便逐次分批地加载启动协议对象。若直接通过调用timer类来开启定时器,其性能损耗较高。针对于此,本实施例通过android中的用于线程通行的handler类来进行定时器的开启,从而可以大大降低性能损耗。具体地,可以以当前延迟时间对应的当前索引号index和当前目标时间delay3作为输入参数,调用消息处理对象mhandler中的消息发送函数mhandler.sendmessagedelay(index,delay3),在延迟当前目标时间delay3后,可以获得一个消息内容为index的延迟消息。

s250、在获得延迟消息时,调用当前延迟时间对应的当前启动协议对象中的启动函数,以触发当前启动协议对象的加载操作。

具体地,当获得延迟消息时,表明已经到达了定时器的定时时间,此时可以根据第二集合对象中延迟时间与启动协议对象的对应关系,获得当前延迟时间对应的当前启动协议对象,并通过调用当前启动协议对象中的启动函数,来触发当前启动协议对象的加载操作,执行启动协议对象的初始化逻辑。

示例性地,在获得包含当前索引号的延迟消息时,可以通过调用当前启动协议对象mistartinit中的启动函数mistartinit.init(),从而可以基于协议的方式实现启动协议对象的加载操作。本实施例可以通过统一地调用启动协议对象中的启动函数mistartinit.init()的方式,来加载每个启动协议对象,从而使得启动协议对象的初始化过程更加便捷统一。

s260、启动协议对象若存在加载异常情况,则调用反馈协议全局对象中的信息反馈函数,将启动协议对象的异常信息发送至调度协议对象中,以使调度协议对象根据接收到的异常信息重新触发相应启动协议对象的加载操作。

s270、检测当前延迟时间是否为第二集合对象中的最后一个延迟时间;若是,则进入步骤s280;若否,则进入步骤s290。

具体地,本实施例可以在获得延迟消息时,根据延迟消息中的当前索引号来检测当前延迟时间是否为第二集合对象中的最后一个延迟时间,以便确定所有的启动协议对象是否全部被加载完毕。若当前延迟时间是最后一个延迟时间,则表明遍历结束,即启动应用程序时所需要延迟加载的启动协议对象均加载完毕,此时可以执行步骤s280的操作。若当前延迟时间不是最后一个延迟时间,则表明遍历还未结束,即还需开启下一个定时器,以加载下一个启动协议对象,此时可以执行步骤s290的操作,以便及时开启下一个定时器。

s280、应用程序启动结束。

具体地,在当前延迟时间为第二集合对象中的最后一个延迟时间时,表明启动应用程序时所需要延迟加载的启动协议对象均按照相应的定时周期加载完毕,此时可以直接确定应用程序启动结束。

s290、将后一延迟时间与当前延迟时间之间的时间差更新为当前目标时间,以及将后一延迟时间更新为当前延迟时间,并返回执行步骤s240。

具体地,在当前延迟时间不是第二集合对象中的最后一个延迟时间时,需要确定下一个定时器的定时时间,以便加载下一个启动协议对象。本实施例中每个启动协议对象对应的延迟时间均是从应用程序的开始启动时刻算起的,从而下一个定时器的定时时间应为后一延迟时间与当前延迟时间之间的时间差。本实施例通过更新当前目标时间delay3为后一延迟时间delay2与当前延迟时间delay1之间的时间差,来设置下一个定时器的定时时间,即delay3=delay2-delay1。在当前目标时间更新后,将当前延迟时间的后一延迟时间更新为当前延迟时间,并将当前索引号index进行自加操作index++,以及更新delay1和delay2中的数据,以便可以将第二集合对象中的延迟时间依次确定为当前延迟时间,从而可以依次加载相应的启动协议对象。在将当前目标时间和当前延迟时间更新后,通过重复执行步骤s240-s270进入下一个循环周期。

需要注意的是,若第二集合对象中相邻的两个延迟时间相同,即定时器的定时时间为零,此时可以同时加载这两个延迟时间对应的启动协议对象。本实施例还可以将步骤s250-s290所提供的功能进行封装为消息处理对象mhandler中的消息接收函数handlemessage(),从而可以以延迟消息为输入参数,直接调用消息处理对象mhandler中的消息接收函数mhandler.handlemessage(),对延迟消息进行处理,实现上述步骤s250-s290所提供的功能,从而使得操作更加便捷。

本实施例的技术方案,通过利用线程通行的handler类来进行定时器的开启操作,以及利用对第二间集合对象中的每个延迟时间进行循环遍历的方式,从而可以按照延迟时间的先后顺序,依次加载相应的启动协议对象,并且降低了性能损耗,提高了运行效率,从而进一步提高了应用程序的启动速度。

在上述技术方案的基础上,s260中的“调度协议对象根据接收的异常信息重新触发相应启动协议对象的加载操作”包括:调度协议对象根据接收的异常信息中的启动协议对象标识确定存在加载异常情况的目标启动协议对象,并再次调用目标启动协议对象中的启动函数,以再次触发目标启动协议对象的加载操作。

具体地,调度协议对象在接收到异常信息时,可以根据异常信息中的启动协议对象标识确定存在加载异常的目标启动协议对象,并通过再次调用目标启动协议对象mistartinit中的启动函数mistartinit.init()的方式,再次触发目标启动协议对象的加载操作,从而使得目标启动协议对象具有加载重试的机制,提高了应用启动系统的健壮性,以确保启动程序的正常启动。

在上述技术方案的基础上,再次调用目标启动协议对象中的启动函数,以再次触发目标启动协议对象的加载操作,包括:检测目标启动协议对象对应的当前剩余重试次数是否大于零;若是,则再次调用目标启动协议对象中的启动函数,以再次触发目标启动协议对象的加载操作,并将当前剩余重试次数减1得到的结果更新为当前剩余重试次数。

具体地,本实施例可以根据业务需求预先对每个启动协议对象设置一个重试总次数,以控制启动协议对象的重试次数,避免对无法加载成功的启动协议对象进行无限次重试加载的操作。本实施例在确定存在加载异常的目标启动协议对象后,可以获得目标启动协议对象对应的当前剩余重试次数是否大于零,若是,则表明可以对目标启动协议对象进行再次加载,此时可以通过调用目标启动协议对象中的启动函数,以再次触发目标启动协议对象的加载操作,并对当前剩余重试次数减1,以更新当前剩余重试次数;若否,则表明无法继续对目标启动协议对象进行重试操作,此时可以直接删除接收到的异常信息,以节省存储空间,同时也可以在显示界面中显示一个异常加载错误信息,以提醒用户目标启动协议对象加载失败。

在上述技术方案的基础上,在s250之前,还可以包括:开启一个新线程,以在新线程中,调用当前延迟时间对应的当前启动协议对象中的启动函数,以触发当前启动协议对象的加载操作。

具体地,本实施例可以通过调用threadmthread=newthread(),开启一个新线程,以便在开启的新线程中加载当前启动协议对象,从而可以避免自动在主线程中进行加载操作,进而可以避免导致主线程卡顿或者引用异常的情况,提高了运行性能。

以下是本发明实施例提供的基于反馈协议的应用启动装置的实施例,该装置与上述各实施例的基于反馈协议的应用启动方法属于同一个发明构思,在基于反馈协议的应用启动装置的实施例中未详尽描述的细节内容,可以参考上述基于反馈协议的应用启动方法的实施例。

实施例三

图3为本发明实施例三提供的一种基于反馈协议的应用启动装置的结构示意图,本实施例可适用于启动基于android系统的应用程序的情况,该装置具体包括:延迟注册模块310、启动协议对象调度加载模块320和启动协议对象重新加载模块330。

其中,延迟注册模块310,用于应用程序的每个启动协议对象通过调用延迟注册函数,将启动协议对象与启动协议对象对应的延迟时间注册至应用程序的调度协议对象中的第一集合对象,其中,每个启动协议对象预先基于启动接口协议生成,调度协议对象预先基于反馈接口协议生成;启动协议对象调度加载模块320,用于调度协议对象根据第一集合对象中的各延迟时间,对第一集合对象中的各启动协议对象进行调度并触发启动协议对象的加载操作;启动协议对象重新加载模块330,用于启动协议对象若存在加载异常情况,则调用反馈协议全局对象中的信息反馈函数,将启动协议对象的异常信息发送至调度协议对象中,以使调度协议对象根据接收到的异常信息重新触发相应启动协议对象的加载操作,其中,反馈协议全局对象通过预先将调度协议对象注册至启动协议对象中获得。

可选地,第一集合对象为键值对结构类型的对象;相应地,延迟注册模块310包括延迟注册函数执行单元,用于通过如下步骤实现将启动协议对象与启动协议对象对应的延迟时间注册至应用程序的调度协议对象中的第一集合对象的功能:以启动协议对象、启动协议对象对应的延迟时间为函数输入参数,调用第一集合对象中的存储函数,将启动协议对象作为键值对中的键信息,启动协议对象对应的延迟时间作为键值对中的值信息,存储至第一集合对象中。

可选地,启动协议对象调度加载模块320,包括:

第二集合对象确定单元,用于根据预设排列方式,对第一集合对象中的各延迟时间进行升序排列,以及相应地调整第一集合对象中各启动协议对象的排列顺序,并将排列后的第一集合对象确定为第二集合对象;

启动协议对象加载单元,用于对第二集合对象中的延迟时间和启动协议对象进行依次遍历,并根据遍历到的当前延迟时间进行定时操作,触发当前延迟时间对应的当前启动协议对象的加载操作。

可选地,启动协议对象加载单元,具体用于:

将第二集合对象中的第一个延迟时间均作为当前目标时间和当前延迟时间,并获得当前延迟时间的后一延迟时间;

以当前延迟时间对应的当前索引号和当前目标时间为函数输入参数,调用消息处理对象中的消息发送函数,于延迟当前目标时间后,获取包含当前索引号的延迟消息;

在获得延迟消息时,调用当前延迟时间对应的当前启动协议对象中的启动函数,以触发当前启动协议对象的加载操作;

检测当前延迟时间是否为第二集合对象中的最后一个延迟时间;

若是,则应用程序启动结束;

若否,则将后一延迟时间与当前延迟时间之间的时间差更新为当前目标时间,以及将后一延迟时间更新为当前延迟时间,并返回执行以当前延迟时间对应的当前索引号和当前目标时间为函数输入参数,调用消息处理对象中的消息发送函数的操作。

可选地,该装置还包括:调度协议对象生成模块,用于应用程序的调度类预先调用接口继承关键字,继承反馈接口协议,并复写反馈接口协议中的信息反馈函数,并对继承反馈接口协议的调度类进行实例化,获得调度类的调度协议对象。

可选地,该装置还包括:反馈协议全局对象获得模块,用于通过以指向调度协议对象的指针为函数输入参数,调用启动协议对象中的反馈注册函数,将调度协议对象注册至启动协议对象中,获得反馈协议全局对象。

可选地,启动协议对象重新加载模块330包括:

目标启动协议对象确定单元,用于调度协议对象根据接收的异常信息中的启动协议对象标识确定存在加载异常情况的目标启动协议对象;

目标启动协议对象加载单元,用于再次调用目标启动协议对象中的启动函数,以再次触发目标启动协议对象的加载操作。

可选地,目标启动协议对象加载单元,具体用于:检测目标启动协议对象对应的当前剩余重试次数是否大于零;若是,则再次调用目标启动协议对象中的启动函数,以再次触发目标启动协议对象的加载操作,并将当前剩余重试次数减1得到的结果更新为当前剩余重试次数。

本发明实施例所提供的基于反馈协议的应用启动装置可执行本发明任意实施例所提供的基于反馈协议的应用启动方法,具备执行基于反馈协议的应用启动方法相应的功能模块和有益效果。

实施例四

图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),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

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