CN111078308B - 类的自动加载方法、装置、电子设备及存储介质 - Google Patents

类的自动加载方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN111078308B
CN111078308B CN201910995605.1A CN201910995605A CN111078308B CN 111078308 B CN111078308 B CN 111078308B CN 201910995605 A CN201910995605 A CN 201910995605A CN 111078308 B CN111078308 B CN 111078308B
Authority
CN
China
Prior art keywords
class
client program
information
interface
classes
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.)
Active
Application number
CN201910995605.1A
Other languages
English (en)
Other versions
CN111078308A (zh
Inventor
李星
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing QIYI Century Science and Technology Co Ltd
Original Assignee
Beijing QIYI Century Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing QIYI Century Science and Technology Co Ltd filed Critical Beijing QIYI Century Science and Technology Co Ltd
Priority to CN201910995605.1A priority Critical patent/CN111078308B/zh
Publication of CN111078308A publication Critical patent/CN111078308A/zh
Application granted granted Critical
Publication of CN111078308B publication Critical patent/CN111078308B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请涉及一种类的自动加载方法、装置、电子设备及存储介质,方法包括:在客户端程序启动后的空闲时刻,获取所述客户端程序的类的信息;根据所述客户端程序的类的信息,从所述客户端程序的类中选择目标类,调用所述目标类自动加载的接口,执行所述目标类的自动加载流程;其中,所述目标类继承了所述自动加载的接口,并实现了所述自动加载的接口的自动加载流程;其中,所述目标类继承了所述自动加载的接口,并实现了所述自动加载的接口中声明的方法。本申请能够解决客户端程序启动时自动调用所有类的load函数,影响客户端程序的启动速度的问题。

Description

类的自动加载方法、装置、电子设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种类的自动加载方法、装置、电子设备及存储介质。
背景技术
目前,有些针对移动终端开发的移动操作系统(例如iOS),在启动客户端程序时注册组件提供的服务,在类未创建时自动调用所有类的load函数。在客户端程序启动时注册组件提供的服务,具有自动、全局并且类未创建时调用等特性,项目中常被用于实现分布式、轻量级自动注册。
但是,由于客户端程序启动过程中大量调用load函数,或者,调用的load函数中存在耗时操作,会大大影响客户端程序的启动速度。
发明内容
本申请提供了一种类的自动加载方法、装置、电子设备及存储介质,用以解决客户端程序启动时注册组件提供的服务,自动调用所有类的load函数,影响客户端程序的启动速度的问题。
第一方面,本申请提供了一种类的自动加载方法,包括:在客户端程序启动后的空闲时刻,获取所述客户端程序的类的信息;根据所述客户端程序的类的信息,从所述客户端程序的类中选择目标类,调用所述目标类中自动加载的接口,执行所述目标类的自动加载流程;其中,所述目标类继承了所述自动加载的接口,并实现了所述自动加载的接口的自动加载流程;其中,所述目标类继承了所述自动加载的接口,并实现了所述自动加载的接口中声明的方法。
可选地,获取所述客户端程序的类的信息,包括:通过应用程序编程接口获取所述客户端程序的类的信息,所述客户端程序的类的信息包括:类的名称、第一指示信息和第二指示信息三者之间的对应关系,所述第一指示信息用于指示所述类是否继承了所述自动加载的接口,所述第二指示信息用于指示所述类是否实现了所述自动加载的接口中声明的方法。
可选地,通过应用程序编程接口获取所述客户端程序的类的信息,包括:通过应用程序编程接口读取符号表,获取所述符号表中保存的所述客户端程序的类的信息;其中,所述符号表中包括所述客户端程序中所有自定义类的信息,所述符号表用于保存类的结构体的数据集合,所述类的结构体中包含所述类的信息。
可选地,从所述客户端程序的类中选择目标类,包括:遍历所述客户端程序的类的信息,从所述客户端程序的类中选择所述第一指示信息和所述第二指示信息符合预设条件的类,将选择出的类作为所述目标类;其中,所述预设条件为:所述第一指示信息指示继承了所述自动加载的接口,且所述第二指示信息指示实现了所述自动加载的接口中声明的方法。
第二方面,本申请提供了一种类的自动加载装置,包括:获取模块,用于在客户端程序启动后的空闲时刻,获取所述客户端程序的类的信息;调用模块,用于根据所述客户端程序的类的信息,从所述客户端程序的类中选择目标类,调用所述目标类自动加载的接口,执行所述目标类的自动加载流程;其中,所述目标类中继承了所述自动加载的接口,并实现了所述自动加载的接口中声明的方法。
可选地,所述获取模块具体用于:通过应用程序编程接口获取所述客户端程序的类的信息,所述客户端程序的类的信息包括:类的名称、第一指示信息和第二指示信息三者之间的对应关系,所述第一指示信息用于指示所述类是否继承了所述自动加载的接口,所述第二指示信息用于指示所述类是否实现了所述自动加载的接口中声明的方法。
可选地,所述获取模块具体用于:通过应用程序编程接口读取符号表,获取所述符号表中的所述客户端程序的类的信息;其中,所述符号表中包括所述客户端程序中所有自定义类的信息,所述符号表用于保存类的结构体的数据集合,所述类的结构体中包含所述类的信息。
可选地,所述调用模块具体用于:遍历所述客户端程序的类的信息,从所述客户端程序的类中选择所述第一指示信息和所述第二指示信息符合预设条件的类,将选择出的类作为所述目标类;其中,所述预设条件为:所述第一指示信息指示继承了所述自动加载的接口,且所述第二指示信息指示实现了所述自动加载的接口中声明的方法。
第三方面,本申请提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;所述存储器,用于存储计算机程序;所述处理器,用于执行所述存储器中所存储的程序,实现所述的类的自动加载方法。
第四方面,本申请提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现所述的类的自动加载方法。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例提供的该方法,在客户端程序启动后的空闲时刻,从客户端程序的类中选择目标类,该目标类继承了自动加载的接口,且实现了该自动加载协议的接口中声明的方法,执行该目标类的自动加载流程,采用该自动加载过程替换了目标类中的load函数,使得目标类中不存在load函数,有效避免了在客户端程序启动过程中自动调用所有类的load函数,影响客户端程序的启动速度的问题,提高了客户端程序的启动速度。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例中类的自动加载过程示意图;
图2为本申请实施例中选择并自动加载目标类的过程示意图;
图3为本申请实施例中构建路由表的过程示意图;
图4为本申请实施例中类的自动加载装置结构示意图;
图5为本申请实施例中电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了解决客户端程序启动时注册组件提供的服务,自动调用所有的load函数,影响客户端程序的启动速度的问题,本申请实施例中提供了一种类的自动加载方法,核心思想为:采用可替代方式替代类中的load函数,由于类中的load函数被替代,客户端程序在启动时找不到该类的load函数,也就无法在客户端程序启动时自动加载类的load函数,从而能够提高客户端程序的启动速度。
本申请实施例中提供的类的自动加载方法,是对客户端应用程序做出的改进,应用于安装客户端应用程序的终端设备上,如图1所示,具体过程如下:
步骤101,在客户端程序启动后的空闲时刻,获取该客户端程序的类的信息。
一个具体实施例中,通过应用程序编程接口(Application ProgrammingInterface,API)获取该客户端程序的类的信息,该自定义类的信息包括:类的名称、第一指示信息和第二指示信息三者之间的对应关系,该第一指示信息用于指示该类是否继承了自动加载的接口,该第二指示信息用于指示该类是否实现了该自动加载的接口中声明的方法。需要说明的是,客户端程序的类的信息可以是通过应用程序编程接口获得,也可以通过其它方式获得,例如直接获取客户端程序的技术人员在开发过程中记录的客户端程序的类的信息等。
当然,类的信息中还可能包括类的其它信息,该其它信息与本申请并不相关,因此不再一一列举。
具体地,通过应用程序编程接口读取符号表,获取该符号表中保存的该客户端程序的类的信息。其中,符号表中包括客户端程序中所有自定义类的信息,符号表用于保存类的结构体(struct)的数据集合,该类的结构体中包含该类的信息。通过类中的class_conformsToProtocol方法,判断该类是否继承了自动加载的接口,并且通过类中的class_getClassMethod方法,判断该类是否实现了自动加载的接口中声明的方法。
其中,获取客户端程序的类的信息的途径有多种,以下主要列举两种获取途径:
第一,通过第一应用程序编程接口读取第一符号表,该第一符号表中只包括客户端程序中所有自定义类的信息。读取该第一符号表中包含的所有类的信息,作为该客户端程序的类的信息。由于该第一符号表中不包含系统类的信息,只包含自定义类的信息,简化了计算复杂度,提高了效率。
例如,通过Objective-C(扩充C的面向对象编程语言,简称ObjC&OC)语言底层接口方法,如objc_copyClassNamesForImage,语句表示为:const char*objc_copyClassNamesForImage(const char*_image,unsigned int*outCount),读取第一符号表。
第二,通过第二应用程序编程接口读取第二符号表,该第二符号表中包括该客户端程序中所有自定义类的信息,且包括该客户端程序中所有系统类的信息。获取该第二符号表中所有类的信息,将该所有类的信息作为客户端程序的类的信息。
例如,通过Objective-C语言底层接口方法,如objc_copyClassList方法,语句表示为:Class*objc_copyClassList(unsigned int*outCount),或者,objc_getClassList方法,语句表示为:int objc_getClassList(Class*buffer,int bufferCount),读取第二符号表。
需要说明的是,本申请实施例提供的需要替代load函数的类属于自定义类,因此采用第一应用程序编程接口获取自定义类的方式,相较于采用第二应用程序编程接口获取自定义类和系统类的方式,提高了效率。
一个具体实施例中,在客户端程序启动、首次成功加载页面后的空闲时刻,启动获取该客户端程序的类的信息并识别目标类的过程。
当然,启动获取该客户端程序的类的信息的过程的具体触发时刻,可以是后台程序设计人员根据需要指定。例如,获取该客户端程序的类的信息的过程,可以是在客户端程序启动后、首次成功加载页面后,即时启动,也可以是在客户端程序启动后,需要运行某个组件时启动。
步骤102,根据该客户端程序的类的信息,从客户端程序的类中选择目标类,调用该目标类自动加载的接口,执行该目标类的自动加载流程。
其中,目标类继承了自动加载的接口,并实现了该自动加载的接口中声明的方法。
一个具体实施例中,从客户端程序的类中选择目标类的具体过程为:遍历客户端程序的类的信息,从该客户端程序的类中选择第一指示信息和第二指示信息符合预设条件的类,将选择出的类作为目标类。其中,该预设条件为:第一指示信息指示继承了自动加载的接口,且第二指示信息指示实现了自动加载的接口中声明的方法。
需要说明的是,本申请实施例中通过遍历客户端程序的类的信息,筛选出目标类并自动执行目标类的自动加载流程,实现了目标类的自动加载,替代了原有的load函数,使得类中不再定义load函数,在客户端程序启动时无法找到该类的load函数进行调用,保证了客户端程序的启动速度。
具体地,在Objective-C语言中,通过类中定义的结构体(表示为cls)和协议(表示为protocol)这两个参数,可以判断该类是否在协议中约定了自动加载的接口,表示为语句:BOOL class_conformsToProtocol(Class cls,Protocol*protocol)。通过类中定义的结构体(表示为cls)和函数(表示为name)这两个参数,可以判断该类是否在函数中实现了自动加载的接口中声明的方法,表示为语句:Method class_getClassMethod(Class cls,SEL name)。
其中,在面向对象语言中,将接口称为协议,某类继承了某个协议,表示某类有可能实现了协议中定义的方法。以Objective-C语言为例:假设自动加载的接口定义如下
@protocol QYPPAutoScanProtocol<NSObject>
+(void)autoScan;
@end
如果自定义类QYPPRouter需要自动加载,则需要做如下两个操作:
操作1,定义类头文件,用于类的声明,类声明时需要继承自动加载协议:
@interface QYPPRouter:NSObject<QYPPAutoScanProtocol>
@end
表示自定义的QYPPRouter类继承了QYPPAutoScanProtocol协议,并且可能会实现了+(void)autoScan方法,具体是否实现了该方法,需要进一步判断。
操作2,定义类源文件,用于类的实现,实现时需要实现自动加载协议:
QYPPRouter如果实现了上述两个操作,自动扫描时就会自动调用QYPPRouter类的autoScan方法来执行autoScan实现的方法(如自动读取数据库操作)。
一个具体实施例中,假设客户端程序的类的个数为N,从该客户端程序的类中选择目标类,调用目标类中的自动加载协议的接口,执行该目标类的自动加载流程的具体过程如图2所示:
步骤201,判断客户端程序的类中的第i个类是否继承了自动加载的接口,若是,执行步骤202,否则,执行步骤204;
步骤202,判断该第i个类是否实现了自动加载的接口中声明的方法,若是,执行步骤203,否则,执行步骤204;
步骤203,判定该第i个类是目标类,调用该第i个类的自动加载的接口,执行该第i个类的自动加载流程;
步骤204,判断i是否小于N,若是,执行步骤205,否则,执行步骤206;
步骤205,更新i=i+1后,执行步骤201;
步骤206,结束流程。
本申请实施例中,根据目标类实现的自动加载的接口中所定义的方法的不同,执行自动加载流程所实现的自动加载行为也不同,例如,执行自动加载流程实现页面注册到路由表,或者,实现加载数据库中的数据等。
一个具体实施例中,以构建路由表为例,自动加载目标类以注册组件的过程进行说明,如图3所示,主要包括以下步骤:
步骤301,启动客户端程序,该客户端程序中在首次执行路由跳转的时刻触发构建路由表的过程;
步骤302,在客户端程序启动后,执行路由跳转的时刻开始,依次扫描客户端程序所有自定义类的信息,假设自定义类共有N个;
步骤303,判断该自定义类中的第i个类是否继承了路由表注册的自动加载的接口,若是,执行步骤304,否则,执行步骤306;
步骤304,判断该第i个类是否实现了路由表注册的自动加载的接口中声明的方法,若是,执行步骤305,否则,执行步骤306;
步骤305,判定该第i个类是目标类,调用该第i个类的自动加载的接口,执行该第i个类的自动加载流程,即执行目标类的路由表注册方法;
步骤306,判断i是否小于N,若是,执行步骤307,否则,执行步骤308;
步骤307,更新i=i+1后,执行步骤303;
步骤308,在路由表中注册客户端页面跳转信息的流程结束。
本申请实施例提供的该方法,在客户端程序启动后的空闲时刻,从客户端程序的类中选择目标类,该目标类继承了自动加载的接口,且实现了该自动加载协议的接口中声明的方法,执行该目标类的自动加载流程,采用该自动加载过程替换了目标类中的load函数,使得目标类中不存在load函数,有效避免了在客户端程序启动过程中自动调用所有的load函数,影响客户端程序的启动速度的问题,提高了客户端程序的启动速度。
并且,本申请实施例提供的方法,能够在客户端程序启动后的空闲时刻自动识别目标类,并且通过遍历该客户端程序的类搜索目标类,具有全局性,在目标类未创建时即可自动执行该目标类的自动加载流程,保留了类未创建时调用的特性,可见,本申请实施例保持类采用load函数时的性能,并且避免了客户端程序启动时调用load函数,在不改变客户端程序原有性能的情况下,提高了客户端程序的启动速度。
同时,本申请实施例提供的方法,能够替代原有的load函数,并与load函数的特性完全保持一致,使得无需修改原有逻辑,能够最大限度维持原有优秀的技术方案。并且,本申请实施例提供的类的加载过程具有通用性,适用于优化所有使用load函数的类的自动加载。
本申请实施例在客户端程序启动后的空闲时刻自动识别目标类并执行目标类的自动加载流程,除了可以规避load函数在启动过程中自动加载的问题外,还可以由设计人员选择合适的空闲时刻作为触发时刻,最大程度优化程序性能,在优化程序性能方面具有非常大的自由度。
需要说明的是,本申请实施例中可以将类的自动加载的整个控制过程写入一个扫描类中,在客户端程序启动后的空闲时刻,例如,客户端程序启动完成,程序首页已经显示出来时,运行该扫描类以触发整个类的自动加载过程。
基于同一构思,本申请实施例中还提供了一种类的自动加载装置,该装置的具体实施可参见方法实施例的描述,重复之处不再赘述,如图4所示,该装置主要包括:
获取模块401,用于在客户端程序启动后的空闲时刻,获取所述客户端程序的类的信息;
调用模块402,用于根据所述客户端程序的类的信息,从所述客户端程序的类中选择目标类,调用所述目标类自动加载的接口,执行所述目标类的自动加载流程;
其中,所述目标类中继承了所述自动加载的接口,并实现了所述自动加载的接口中声明的方法。
一个具体实施例中,所述获取模块401具体用于:通过应用程序编程接口获取所述客户端程序中类的信息,所述客户端程序的类的信息包括:类的名称、第一指示信息和第二指示信息三者之间的对应关系,所述第一指示信息用于指示所述类是否继承了所述自动加载的接口,所述第二指示信息用于指示所述类是否实现了所述自动加载的接口中声明的方法。
一个具体实施例中,所述获取模块具体用于:通过应用程序编程接口读取符号表,获取所述符号表中的所述客户端程序的类的信息;其中,所述符号表中包括所述客户端程序中所有自定义类的信息,所述符号表用于保存类的结构体的数据集合,所述类的结构体中包含所述类的信息。
一个具体实施例中,所述调用模块具体用于:遍历所述客户端程序的类的信息,从所述客户端程序的类中选择所述第一指示信息和所述第二指示信息符合预设条件的类,将选择出的类作为所述目标类;其中,所述预设条件为:所述第一指示信息指示继承了所述自动加载的接口,且所述第二指示信息指示实现了所述自动加载的接口中声明的方法。
基于同一构思,本申请实施例中还提供了一种电子设备,如图5所示,该电子设备主要包括:处理器501、通信接口502、存储器503和通信总线504,其中,处理器501、通信接口502和存储器503通过通信总线504完成相互间的通信。其中,存储器503中存储有可被至处理器501执行的程序,处理器501执行存储器503中存储的程序,实现如下步骤:在客户端程序启动后的空闲时刻,获取所述客户端程序的类的信息;根据客户端程序的类的信息,从客户端程序的类中选择目标类,调用所述目标类自动加载的接口,执行所述目标类的自动加载流程,其中,所述目标类继承了该自动加载的接口,并实现了该自动加载的接口中声明的方法。
上述电子设备中提到的通信总线504可以是外设部件互连标准(PeripheralComponent Interconnect,简称PCI)总线或扩展工业标准结构(Extended IndustryStandard Architecture,简称EISA)总线等。该通信总线504可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口502用于上述电子设备与其他设备之间的通信。
存储器503可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器501的存储装置。
上述的处理器501可以是通用处理器,包括中央处理器(Central ProcessingUnit,简称CPU)、网络处理器(Network Processor,简称NP)等,还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本申请的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述实施例中所描述类的自动加载方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。该计算机可以时通用计算机、专用计算机、计算机网络或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、微波等)方式向另外一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如软盘、硬盘、磁带等)、光介质(例如DVD)或者半导体介质(例如固态硬盘)等。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

Claims (8)

1.一种类的自动加载方法,其特征在于,包括:
在客户端程序启动后的空闲时刻,获取所述客户端程序的类的信息;
根据所述客户端程序的类的信息,从所述客户端程序的类中选择目标类,调用所述目标类自动加载的接口,执行所述目标类的自动加载流程;
其中,所述目标类继承了所述自动加载的接口,并实现了所述自动加载的接口中声明的方法,所述自动加载的接口替代了原有的load函数,使得所述目标类中不再定义load函数,在所述客户端程序启动时无法找到该类的load函数进行调用;
其中,获取所述客户端程序的类的信息,包括:
通过应用程序编程接口获取所述客户端程序的类的信息,所述客户端程序的类的信息包括:类的名称、第一指示信息和第二指示信息三者之间的对应关系,所述第一指示信息用于指示所述类是否继承了所述自动加载的接口,所述第二指示信息用于指示所述类是否实现了所述自动加载的接口中声明的方法。
2.根据权利要求1所述的类的自动加载方法,其特征在于,通过应用程序编程接口获取所述客户端程序的类的信息,包括:
通过应用程序编程接口读取符号表,获取所述符号表中保存的所述客户端程序的类的信息;
其中,所述符号表中包括所述客户端程序中所有自定义类的信息,所述符号表用于保存类的结构体的数据集合,所述类的结构体中包含所述类的信息。
3.根据权利要求1至2任一项所述的类的自动加载方法,其特征在于,从所述客户端程序的类中选择目标类,包括:
遍历所述客户端程序的类的信息,从所述客户端程序的类中选择所述第一指示信息和所述第二指示信息符合预设条件的类,将选择出的类作为所述目标类;
其中,所述预设条件为:所述第一指示信息指示继承了所述自动加载的接口,且所述第二指示信息指示实现了所述自动加载的接口中声明的方法。
4.一种类的自动加载装置,其特征在于,包括:
获取模块,用于在客户端程序启动后的空闲时刻,获取所述客户端程序的类的信息;
调用模块,用于根据所述客户端程序的类的信息,从所述客户端程序的类中选择目标类,调用所述目标类自动加载的接口,执行所述目标类的自动加载流程;
其中,所述目标类中继承了所述自动加载的接口,并实现了所述自动加载的接口中声明的方法,所述自动加载的接口替代了原有的load函数,使得所述目标类中不再定义load函数,在所述客户端程序启动时无法找到该类的load函数进行调用;
其中,所述获取模块具体用于:
通过应用程序编程接口获取所述客户端程序中类的信息,所述客户端程序的类的信息包括:类的名称、第一指示信息和第二指示信息三者之间的对应关系,所述第一指示信息用于指示所述类是否继承了所述自动加载的接口,所述第二指示信息用于指示所述类是否实现了所述自动加载的接口中声明的方法。
5.根据权利要求4所述的类的自动加载装置,其特征在于,所述获取模块具体用于:
通过应用程序编程接口读取符号表,获取所述符号表中的所述客户端程序的类的信息;
其中,所述符号表中包括所述客户端程序中所有自定义类的信息,所述符号表用于保存类的结构体的数据集合,所述类的结构体中包含所述类的信息。
6.根据权利要求4至5任一项所述的类的自动加载装置,其特征在于,所述调用模块具体用于:
遍历所述客户端程序的类的信息,从所述客户端程序的类中选择所述第一指示信息和所述第二指示信息符合预设条件的类,将选择出的类作为所述目标类;
其中,所述预设条件为:所述第一指示信息指示继承了所述自动加载的接口,且所述第二指示信息指示实现了所述自动加载的接口中声明的方法。
7.一种电子设备,其特征在于,包括:处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;
所述存储器,用于存储计算机程序;
所述处理器,用于执行所述存储器中所存储的程序,实现权利要求1至3任一项所述的类的自动加载方法。
8.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述算机程序被处理器执行时实现权利要求1至3任一项所述的类的自动加载方法。
CN201910995605.1A 2019-10-18 2019-10-18 类的自动加载方法、装置、电子设备及存储介质 Active CN111078308B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910995605.1A CN111078308B (zh) 2019-10-18 2019-10-18 类的自动加载方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910995605.1A CN111078308B (zh) 2019-10-18 2019-10-18 类的自动加载方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN111078308A CN111078308A (zh) 2020-04-28
CN111078308B true CN111078308B (zh) 2023-12-15

Family

ID=70310589

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910995605.1A Active CN111078308B (zh) 2019-10-18 2019-10-18 类的自动加载方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN111078308B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105955765A (zh) * 2016-04-22 2016-09-21 北京小米移动软件有限公司 应用预加载方法及装置
CN109375961A (zh) * 2018-10-17 2019-02-22 平安普惠企业管理有限公司 应用程序启动优化方法、装置、计算机设备及存储介质
CN109710428A (zh) * 2018-12-27 2019-05-03 杭州数梦工场科技有限公司 一种实现类的动态调用方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106095499A (zh) * 2016-06-07 2016-11-09 青岛海信电器股份有限公司 嵌入式系统启动优化方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105955765A (zh) * 2016-04-22 2016-09-21 北京小米移动软件有限公司 应用预加载方法及装置
CN109375961A (zh) * 2018-10-17 2019-02-22 平安普惠企业管理有限公司 应用程序启动优化方法、装置、计算机设备及存储介质
CN109710428A (zh) * 2018-12-27 2019-05-03 杭州数梦工场科技有限公司 一种实现类的动态调用方法及装置

Also Published As

Publication number Publication date
CN111078308A (zh) 2020-04-28

Similar Documents

Publication Publication Date Title
CN110879781B (zh) 程序调试方法、装置、电子设备及计算机可读存储介质
CN110457049B (zh) 实现插件自动化的方法、装置、电子设备及存储介质
CN110888817B (zh) 代码覆盖率报告的生成方法、装置和可读存储介质
CN110851207B (zh) 状态转换管理方法、装置、电子设备和存储介质
US11422917B2 (en) Deriving software application dependency trees for white-box testing
CN111078308B (zh) 类的自动加载方法、装置、电子设备及存储介质
CN113885920A (zh) 机器学习模型的热更新方法、装置、电子设备及存储介质
CN111399849B (zh) 一种应用程序安装包的确定方法及系统
CN111124545A (zh) 应用程序启动方法、装置、电子设备及存储介质
CN112905919B (zh) 后端应用调用方法、装置、计算机设备和可读存储介质
CN113553578B (zh) 一种日志打印响应方法、装置、电子设备和存储介质
CN109697072A (zh) 信息处理方法、装置及设备
CN111443920B (zh) 一种框架迁移方法及装置
CN108845953B (zh) 接口测试的方法及装置
CN110442370B (zh) 一种测试用例查询方法及装置
CN112965697A (zh) 一种代码文件的生成方法、装置及电子设备
CN115150316A (zh) 基于动态路由的网关控制方法、装置、介质及网关设备
CN112035119B (zh) 一种数据删除方法及装置
CN111736847B (zh) 脚本语言映射方法、电子设备及可读存储介质
CN112558975B (zh) 组件的代码切换方法、装置、电子设备及可读存储介质
CN116382796B (zh) 一种h5小程序运行器的插件管理方法、装置及电子设备
CN111538510B (zh) 一种应用程序安装包的确定方法、装置及电子设备
CN110209513B (zh) 一种应用程序的广播注册方法、装置、设备及介质
CN111104097B (zh) 一种数据写入、读取方法及装置
CN114942899B (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