基于Android的应用启动任务优化方法及装置与流程

文档序号:33033161发布日期:2023-01-20 21:34阅读:59来源:国知局
基于android的应用启动任务优化方法及装置
技术领域
:1.本技术涉及应用启动任务优化
技术领域
:,具体而言,涉及一种基于android的应用启动任务优化方法及装置。
背景技术
::2.在andriod应用启动时,需要执行各种初始化任务,有些任务之间还有前后依赖关系。在大型的应用中,启动任务的数量和任务之间的相互依赖关系比较复杂,导致任务管理混乱,代码维护成本极高,可谓牵一发而动全身。目前android中解决此类问题的方法通常是将耗时任务放到子线程加载,等到所有加载任务加载完成之后,再进入首页,其中有依赖关系的任务通过各种回调等方式来完成异步任务调度。3.随着业务的迭代,启动任务和应用内其他任务的增多,代码变得臃肿,任务之间的依赖关系变得错综复杂难以维护。对于这种情况,开发人员面向的不是业务本身的逻辑,而是大量复杂的非业务逻辑(如线程调度,任务排序等),导致后续迭代难度增大,业务关系难以捋清。4.并且,在应用启动任务优化过程中,通常会涉及到跨进程通信,传统的跨进程通信主要是通过定义各个业务需要的aidl(androidinterfacedefinitionlanguage,即android接口定义语言)及服务,通过androidbinder机制进行跨进程通信。这样直接使用binder加service的方式使得面临复杂业务时,通信接口数量多且复杂难以管理,更加重了开发人员的开发负担。技术实现要素:5.本技术实施例的目的在于提供一种基于android的应用启动任务优化方法及装置,以有效实现应用启动任务优化,降低开发人员的开发负担。6.为了实现上述目的,本技术的实施例通过如下方式实现:7.第一方面,本技术实施例提供一种基于android的应用启动任务优化方法,包括:存储应用启动时关联的所有初始化任务,并基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,作为执行初始化任务的排序;针对初始化任务的执行过程,判断当前任务是否在主进程内,若当前任务不在主进程内,通过声明注解方法实现当前任务的跨进程任务队列交互,其中,当前任务为当前需要执行的初始化任务,主进程为此应用运行分配的进程。8.在本技术实施例中,存储应用启动时关联的所有初始化任务,然后利用任务先后依赖关系及任务调度逻辑,进行任务队列结构排序,可以解决复杂任务调度管理问题,大大减少开发人员需要面对的非业务逻辑(例如任务排序、线程调度等);而在初始化任务的执行过程中,通过判断当前任务是否在主进程内,当前任务不在主进程内时,可以通过声明注解方法实现当前任务的跨进程任务队列交互。这样的方式不需要预先逐个定义接口,可以实现动态的接口方法调用,在面临复杂业务时,仍然非常便于管理,大大降低开发人员的开发负担。9.结合第一方面,在第一方面的第一种可能的实现方式中,基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,包括:针对每个初始化任务:获取调用本初始化任务所在线程需要等待的任务数量,并基于本初始化任务需要等待的任务数量,确定出本初始化任务的入度,其中,本初始化任务不需要等待时则任务数量为零;基于每个初始化任务的入度,确定出本阶段的可执行任务,并将本阶段中可执行任务的每个后续任务的入度减一,其中,一个初始化任务的后续任务依赖于此初始化任务的执行结果;若所有初始化任务均已被确定为可执行任务,完成任务队列结构排序。10.在该实现方式中,针对每个初始化任务:可以确定出本初始化任务的入度,进一步确定出本阶段的可执行任务,并将本阶段中可执行任务的每个后续任务(依赖于此初始化任务的执行结果)的入度减一;若所有初始化任务均已被确定为可执行任务,完成任务队列结构排序。此种方式可以利用广度优先的方式梳理出初始化任务的有向无环图,从而实现任务队列结构排序,使得任务之间逻辑关系清晰,开发者可以直接面向业务逻辑进行任务启动,而无需关心任务之间的具体调度,极大地方便了开发人员优化自己的应用启动及应用内任务梳理过程。11.结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,在基于每个初始化任务的入度,确定出本阶段的可执行任务之前,所述方法还包括:获取每个初始化任务所在线程的优先级;对应的,基于每个初始化任务的入度,确定出本阶段的可执行任务,包括:确定每个入度为零且未被确定为可执行任务的初始化任务为本阶段任务;基于每个本阶段任务和其所在线程的优先级,确定出本阶段的可执行任务。12.在该实现方式中,通过获取每个初始化任务所在线程的优先级,并确定每个入度为零且未被确定为可执行任务的初始化任务为本阶段任务,进一步基于每个本阶段任务和其所在线程的优先级确定出本阶段的可执行任务。这样的方式能够考虑到同一入度的本阶段任务(即本阶段内不需要再等待其他初始化任务的执行结果),考虑到本阶段任务所在线程的优先级,更有利于进一步优化启动任务(所在线程的优先级越高,被执行的概率越高)。13.结合第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,所述方法还包括:对初始化任务进行线程管理。14.在该实现方式中,对初始化任务进行线程管理,能够进一步实现对应用启动任务的优化。15.结合第一方面的第一种可能的实现方式,在第一方面的第四种可能的实现方式中,通过声明注解方法实现当前任务的跨进程任务队列交互,包括:在主进程中注册本进程唯一的单例实体类,并对单例实体类的全类名及接口方法名称进行缓存;在其他进程中通过绑定全局唯一通信服务,建立其他进程与主进程之间的跨进程连接,通过定义好的类id及接口方法id获取主进程中对应的实例并进行接口方法调用,实现当前任务的跨进程任务队列交互。16.在该实现方式中,在主进程中注册本进程唯一的单例实体类,并对单例实体类的全类名及接口方法名称进行缓存,在其他进程中通过绑定全局唯一通信服务,建立其他进程与主进程之间的跨进程连接,通过定义好的类id及接口方法id获取主进程中对应的实例并进行接口方法调用,实现当前任务的跨进程任务队列交互。此种方式通过协程技术解决多线程任务调度问题,跨进程任务调度支持,使得多进程间任务调度在调用者层面无感知。17.结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,在其他进程中通过绑定全局唯一通信服务,建立其他进程与主进程之间的跨进程连接,包括:利用proccessbridge.connect在其他进程中向主进程发起链接请求;获取主进程返回的链接结果,建立其他进程与主进程之间的跨进程连接。18.结合第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,通过定义好的类id及接口方法id获取主进程中对应的实例并进行接口方法调用,实现当前任务的跨进程任务队列交互,包括:其他进程利用proccessbridge.getinstance获取代理对象,并将代理对象通过binder发送到主进程;主进程解析代理对象,通过动态反射技术获取代理对象对应的类id及接口方法id,以确定出返回值,并通过binder将返回值发送回其他进程。19.在该实现方式中,主进程解析代理对象,通过动态反射技术获取代理对象对应的类id及接口方法id,能够确定出相应的返回值(主进程中缓存有单例实体类的全类名及接口方法名称),实现动态的接口方法调用,大大简化管理问题,降低开发难度。20.第二方面,本技术实施例提供一种基于android的应用启动任务优化装置,包括:任务排序单元,用于存储应用启动时关联的所有初始化任务,并基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,作为执行初始化任务的排序;跨进程交互单元,用于针对初始化任务的执行过程,判断当前任务是否在主进程内,若当前任务不在主进程内,通过声明注解方法实现当前任务的跨进程任务队列交互,其中,当前任务为当前需要执行的初始化任务,主进程为此应用运行分配的进程。21.第三方面,本技术实施例提供一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行第一方面或第一方面的可能的实现方式中任一项所述的基于android的应用启动任务优化方法。22.第四方面,本技术实施例提供一种电子设备,包括存储器和处理器,所述存储器用于存储包括程序指令的信息,所述处理器用于控制程序指令的执行,所述程序指令被处理器加载并执行时实现第一方面或第一方面的可能的实现方式中任一项所述的基于android的应用启动任务优化方法。23.为使本技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。附图说明24.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。25.图1为本技术实施例提供的基于android的应用启动任务优化方法的流程图。26.图2为通过声明注解方法实现跨进程队列交互的时序图。27.图3为本技术实施例提供的基于android的应用启动任务优化装置的结构框图。28.图4为本技术实施例提供的一种电子设备的结构框图。29.图标:10-基于android的应用启动任务优化装置;11-任务排序单元;12-跨进程交互单元;20-电子设备;21-存储器;22-通信模块;23-总线;24-处理器。具体实施方式30.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。31.本实施例以电子设备(例如智能手机、平板电脑等)为执行主体,利用基于android的应用启动任务优化方法对电子设备内安装的应用进行启动任务优化的过程进行介绍。32.请参阅图1,图1为本技术实施例提供的基于android的应用启动任务优化方法的流程图。基于android的应用启动任务优化方法可以包括步骤s10和步骤s20。33.应用启动时,电子设备可以执行步骤s10。34.步骤s10:存储应用启动时关联的所有初始化任务,并基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,作为执行初始化任务的排序。35.在本实施例中,电子设备可以存储应用启动时关联的所有初始化任务。对于存在子任务的初始化任务,电子设备同样存储每个初始化任务的子任务。36.例如,采用kotlin语言实现任务存储功能:37.taskmap:mutablemap《class,defaulttaskimp》=concurrenthashmap()38.存储所有的任务,key是class,value是defaulttask;39.taskchildmap:mutablemap《class,arraylist《defaulttaskimp》=concurrenthashmap()40.储存任务的子任务,key是任务的class,value是defaulttaskimp的list。41.之后,电子设备可以基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,作为执行初始化任务的排序,以解决复杂任务调度管理问题,大大减少开发人员需要面对的非业务逻辑(例如任务排序、线程调度等)。42.有向无环图是有向图的一种,可以用来表示事件之间的驱动依赖关系,管理任务之间的调度。示例性的,电子设备可以通过有向无环图进行任务队列结构排序。43.以广度优先算法为例,针对每个初始化任务:44.电子设备可以获取调用本初始化任务所在线程需要等待的任务数量。45.具体的,电子设备可以判断调用本初始化任务所在线程时是否需要等待,以kotlin语言为例:46.funcanwait():boolean47.此处,canwait()表示当调用taskdispatcherawait时,是否需要等待,returntrue,表示需要等待任务执行结束taskdispatcherawait方法才能继续往下执行。48.若调用本初始化任务所在线程时不需要等待,returnfalse,可以确定本初始化任务需要等待的任务数量为零。49.若调用本初始化任务所在线程时需要等待,returntrue,并返回前置任务依赖(默认是返回null,即不需要等待时,任务数量为零)。以kotlin语言为例:50.fungetdependstasks():list《class《defaulttaskimp》》?51.电子设备利用fungetdependstasks():list《class《defaulttaskimp》》方法可以返回前置任务依赖,从而确定出需要等待的任务数量。52.确定出本初始化任务需要等待的任务数量后,电子设备可以基于本初始化任务需要等待的任务数量,确定出本初始化任务的入度。53.例如,本初始化任务需要等待的任务数量为3,则说明本初始化任务依赖于另外3个初始化任务的执行结果,从而确定本初始化任务的入度为3。又如,本初始化任务需要等待的任务数量为0,则说明本初始化任务不依赖其他初始化任务的执行结果,从而确定本初始化任务的入度为0。54.通过此种方式,电子设备可以确定出每个初始化任务的入度。之后,电子设备可以基于每个初始化任务的入度,确定出本阶段的可执行任务。55.示例性的,电子设备还可以获取每个初始化任务所在线程的优先级。以kotlin语言为例:56.fungetpriority():int57.getpriority():int方法,用于获取任务线程优先级。58.基于此,电子设备可以确定每个入度为零且未被确定为可执行任务的初始化任务为本阶段任务,然后基于每个本阶段任务和其所在线程的优先级,确定出本阶段的可执行任务。59.这样的方式能够考虑到同一入度的本阶段任务(即本阶段内不需要再等待其他初始化任务的执行结果),考虑到本阶段任务所在线程的优先级,更有利于进一步优化启动任务(所在线程的优先级越高,被执行的概率越高)。60.确定出本阶段的可执行任务后,电子设备可以将本阶段中可执行任务的每个后续任务的入度减一,其中,一个初始化任务的后续任务依赖于此初始化任务的执行结果。61.例如,任务a有两个后续任务:任务b和任务c。那么,任务b和任务c均依赖于任务a的执行结果,并且,任务b除任务a之外,不依赖于其他初始化任务(在本阶段,任务b的入度为1),而任务c除任务a之外,还依赖于任务d和任务e的执行结果(在本阶段,任务c的入度为3)。62.那么,当任务a被确定为本阶段的可执行任务后(意味着a可以在本阶段被执行完成),电子设备可以进一步将任务a的每个后续任务(即任务b和任务c)的入度减一。任务b的入度减一,变成入度为零,而任务c的入度减一,变成入度为2,那么,任务b即可在下一阶段被确定为入度为零的初始化任务。63.通过这样的方式,通常来说,能够梳理所有的初始化任务(不存在环状结构,例如r依赖于s,s依赖于t,t依赖于r这样的结构)。若所有初始化任务均已被确定为可执行任务,即可完成任务队列结构排序,得到反映任务队列结构排序的有向无环图。64.利用广度优先的方式梳理出初始化任务的有向无环图,从而实现任务队列结构排序,使得任务之间逻辑关系清晰,开发者可以直接面向业务逻辑进行任务启动,而无需关心任务之间的具体调度,极大地方便了开发人员优化自己的应用启动及应用内任务梳理过程。65.当然,在其他一些可能的实现方式中,还可以利用深度优先的方式实现任务队列结构排序,此处不作限定。66.在本实施例中,电子设备还可以对初始化任务进行线程管理。以kotlin语言为例:67.funismainthread():boolean68.isinmainthread():boolean,此接口返回结果表示当前的任务是否运行在主线程。69.对于耗时相对较长的初始化任务,电子设备可以将这种耗时任务放到子线程中去执行,避免阻塞主线程。对初始化任务进行线程管理,能够进一步实现对应用启动任务的优化。70.当然,实际应用过程中,对于线程的判断、优先级的获取等方法步骤,可以基于实际情况适应性调整其执行顺序,例如,先判断任务是否运行在主线程,对任务进行线程管理;然后获取任务的优先级,优先执行优先级高的任务,然后再进行有向无环图的具体梳理过程(主要是判断任务是否等待,确定任务的入度,确定每个阶段的任务执行,并对后续任务进行入度自减操作,以实现有向无环图的梳理)。以kotlin语言为例:[0071][0072]funexec()方法,表示调用此方法开始执行任务。[0073]另外,可以提供一个默认的实现defaulttaskimp,增加wait和decrement方法:wait,此接口调用会使任务进入休眠等待状态;decrement(),此方法将会对此任务的引用技术做自减操作(主要用在后续任务的入度操作上)。kotlin语言实现代码如下:[0074][0075][0076]采用广度优先算法实现有向无环图梳理,完成任务队列结构排序的部分代码示例如下,仅作参考:[0077][0078][0079]完成初始化任务的任务队列结构排序后,电子设备可以执行初始化任务。需要说明的是,对于初始化任务的执行过程,可以是任务队列结构排序与执行同步进行的,例如,梳理完成一部分初始化任务后(例如,梳理出一个阶段的可执行任务后),便可以进行初始化任务的执行。[0080]那么,针对初始化任务的执行过程,电子设备将采用步骤s20提供的方式进行初始化任务的执行。[0081]步骤s20:判断当前任务是否在主进程内,若当前任务不在主进程内,通过声明注解方法实现当前任务的跨进程任务队列交互,其中,当前任务为当前需要执行的初始化任务,主进程为此应用运行分配的进程。[0082]由于初始化任务中,不仅存在进程内通信,还涉及到跨进程通信的任务,传统的跨进程通信主要是通过定义各个业务需要的aidl及服务通过androidbinder机制进行跨进程通信,这样直接使用binder加service的方式使得面临复杂业务时,通信接口数量多且复杂难以管理。[0083]基于此,本实施例针对跨进程通信的方式进行了创新,以下将以初始化任务的执行过程为例进行介绍。[0084]在本实施例中,电子设备可以判断当前任务是否在主进程内,此处,当前任务为当前需要执行的初始化任务,主进程为此应用运行分配的进程。[0085]若当前任务在主进程内运行,则不涉及跨进程通信的问题,采用现有的进程内通信方式即可为当前任务的执行提供通信条件。[0086]若当前任务不在主进程内,则需要进行跨进程通信,那么,电子设备可以通过声明注解方法实现当前任务的跨进程任务队列交互。[0087]请参阅图2,图2为通过声明注解方法实现跨进程队列交互的时序图。[0088]在本实施例中,电子设备可以先在主进程中注册本进程唯一的单例实体类,并对单例实体类的全类名及接口方法名称进行缓存。[0089]示例性的,电子设备可以利用addclass()方法添加类,从而记录注册的类的classid(即类id)及方法签名等关键属性(含接口方法id),实现在主进程中注册单例实体类,并对单例实体类的全类名及接口方法名称进行缓存。[0090]之后,电子设备可以在其他进程中通过绑定全局唯一通信服务,建立其他进程与主进程之间的跨进程连接。[0091]示例性的,电子设备可以利用proccessbridge.connect在其他进程中向主进程发起链接请求。而主进程可以基于链接请求向此进程(发起请求的其他进程)返回链接结果。其他进程获取主进程返回的链接结果后,可以建立其他进程与主进程之间的跨进程连接。[0092]实现其他进程与主进程之间的跨进程连接后,电子设备可以通过定义好的类id及接口方法id获取主进程中对应的实例并进行接口方法调用,实现当前任务的跨进程任务队列交互。[0093]示例性的,电子设备可以在其他进程中利用proccessbridge.getinstance获取代理对象,并将代理对象通过binder发送到主进程。而主进程可以解析代理对象,通过动态反射技术获取代理对象对应的类id及接口方法id,以确定出返回值,并通过binder将返回值发送回其他进程。这样能够确定出相应的返回值(主进程中缓存有单例实体类的全类名及接口方法名称),实现动态的接口方法调用,大大简化管理问题,降低开发难度。[0094]在主进程中注册本进程唯一的单例实体类,并对单例实体类的全类名及接口方法名称进行缓存,在其他进程中通过绑定全局唯一通信服务,建立其他进程与主进程之间的跨进程连接,通过定义好的类id及接口方法id获取主进程中对应的实例并进行接口方法调用,实现当前任务的跨进程任务队列交互。此种方式通过协程技术解决多线程任务调度问题,跨进程任务调度支持,使得多进程间任务调度在调用者层面无感知。[0095]整体而言,在client进程中注册本进程唯一的单例实体类,使用接口的方式,对本类的全类名及接口方法名称的全部描述进行一个内存缓存。通过全局唯一的通信服务,加上自定义的接口通信协议来实现各种业务及数据的统一转发及接收。在其他进程中通过bind此全局service,来建立跨进程连接,进而通过类中定义好的类id及接口方法id来获取到主进程中对应的实例并进行接口方法调用;对于有返回值的跨进程调用,也是通过此服务来返回到接收进程中。另外,对于各个进程中业务接口的发现,可以是通过注解处理器在程序编译期根据注解生成注册相关业务类的代码,在运行时初始化阶段通过反射技术实现动态生成代码的调用及服务注册。[0096]以上,是对基于android的应用启动任务优化方法的介绍。请参阅图3,基于同一发明构思,本技术实施例还提供一种基于android的应用启动任务优化装置10,可以包括:[0097]任务排序单元11,用于存储应用启动时关联的所有初始化任务,并基于每个初始化任务的先后依赖关系及任务调度逻辑,进行任务队列结构排序,作为执行初始化任务的排序。[0098]跨进程交互单元12,用于针对初始化任务的执行过程,判断当前任务是否在主进程内,若当前任务不在主进程内,通过声明注解方法实现当前任务的跨进程任务队列交互,其中,当前任务为当前需要执行的初始化任务,主进程为此应用运行分配的进程。[0099]在本实施例中,所述任务排序单元11,具体用于:针对每个初始化任务:获取调用本初始化任务所在线程需要等待的任务数量,并基于本初始化任务需要等待的任务数量,确定出本初始化任务的入度,其中,本初始化任务不需要等待时则任务数量为零;基于每个初始化任务的入度,确定出本阶段的可执行任务,并将本阶段中可执行任务的每个后续任务的入度减一,其中,一个初始化任务的后续任务依赖于此初始化任务的执行结果;若所有初始化任务均已被确定为可执行任务,完成任务队列结构排序。[0100]在本实施例中,在所述任务排序单元11基于每个初始化任务的入度,确定出本阶段的可执行任务之前,还用于:获取每个初始化任务所在线程的优先级;对应的,所述任务排序单元11具体用于:确定每个入度为零且未被确定为可执行任务的初始化任务为本阶段任务;基于每个本阶段任务和其所在线程的优先级,确定出本阶段的可执行任务。[0101]在本实施例中,所述任务排序单元11还用于:对初始化任务进行线程管理。[0102]在本实施例中,所述跨进程交互单元12,具体用于:在主进程中注册本进程唯一的单例实体类,并对单例实体类的全类名及接口方法名称进行缓存;在其他进程中通过绑定全局唯一通信服务,建立其他进程与主进程之间的跨进程连接,通过定义好的类id及接口方法id获取主进程中对应的实例并进行接口方法调用,实现当前任务的跨进程任务队列交互。[0103]在本实施例中,所述跨进程交互单元12,具体用于:利用proccessbridge.connect在其他进程中向主进程发起链接请求;获取主进程返回的链接结果,建立其他进程与主进程之间的跨进程连接。[0104]在本实施例中,所述跨进程交互单元12,具体用于:其他进程利用proccessbridge.getinstance获取代理对象,并将代理对象通过binder发送到主进程;主进程解析代理对象,通过动态反射技术获取代理对象对应的类id及接口方法id,以确定出返回值,并通过binder将返回值发送回其他进程。[0105]请参阅图4,图4为本技术实施例提供的一种电子设备20的结构框图。电子设备20可以包括:通过网络与外界连接的通信模块22、用于执行程序指令的一个或多个处理器24、总线23和不同形式的存储器21,例如,磁盘、rom、或ram,或其任意组合。存储器21、通信模块22、处理器24之间可以通过总线23连接。[0106]示例性的,存储器21中存储有程序。处理器24可以从存储器21调用并运行这些程序,从而便可以通过运行程序实现基于android的应用启动任务优化。[0107]本技术实施例还提供一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行本实施例中的基于android的应用启动任务优化方法。[0108]综上所述,本技术实施例提供一种基于android的应用启动任务优化方法及装置,存储应用启动时关联的所有初始化任务,然后利用任务先后依赖关系及任务调度逻辑,进行任务队列结构排序,可以解决复杂任务调度管理问题,大大减少开发人员需要面对的非业务逻辑(例如任务排序、线程调度等);而在初始化任务的执行过程中,通过判断当前任务是否在主进程内,当前任务不在主进程内时,可以通过声明注解方法实现当前任务的跨进程任务队列交互。这样的方式不需要预先逐个定义接口,可以实现动态的接口方法调用,在面临复杂业务时,仍然非常便于管理,大大降低开发人员的开发负担。[0109]在本技术所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。[0110]另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0111]在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。[0112]以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1