CN111209122A - 接口调用方法、装置、电子设备及存储介质 - Google Patents

接口调用方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN111209122A
CN111209122A CN201911351264.0A CN201911351264A CN111209122A CN 111209122 A CN111209122 A CN 111209122A CN 201911351264 A CN201911351264 A CN 201911351264A CN 111209122 A CN111209122 A CN 111209122A
Authority
CN
China
Prior art keywords
interface
sdk
class
calling
service
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
Application number
CN201911351264.0A
Other languages
English (en)
Other versions
CN111209122B (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.)
Guangzhou Huaduo Network Technology Co Ltd
Original Assignee
Guangzhou Huaduo Network 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 Guangzhou Huaduo Network Technology Co Ltd filed Critical Guangzhou Huaduo Network Technology Co Ltd
Priority to CN201911351264.0A priority Critical patent/CN111209122B/zh
Publication of CN111209122A publication Critical patent/CN111209122A/zh
Application granted granted Critical
Publication of CN111209122B publication Critical patent/CN111209122B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services

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

本申请公开了一种接口调用方法、装置、电子设备及存储介质,该接口调用方法包括:获取服务请求,所述服务请求用于调用软件开发工具包SDK的与所述服务请求对应的服务接口;获取与所述服务接口对应的动态代理类,所述动态代理类被预先根据所述服务接口的调用方法进行实例化,以保证所述服务接口被调用前所述SDK被初始化;根据所述动态代理类执行对所述服务接口的调用。本申请利用动态代理机制来保证SDK的服务接口被实际调用前,SDK的初始化状态已完成。

Description

接口调用方法、装置、电子设备及存储介质
技术领域
本申请涉及信息处理技术领域,更具体地,涉及一种接口调用方法、装置、 电子设备及存储介质。
背景技术
软件开发工具包(Software Development Kit,SDK)是一些被软件工程师 用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发 工具的集合。目前,大多数的SDK为了保证业务时序的正常,都会要求使用 方在使调用SDK的服务接口前,要完成SDK的初始化。
发明内容
本申请实施例提出了一种接口调用方法、装置、电子设备及存储介质, 可通过动态代理机制实现在调用SDK的服务接口之前,SDK的初始化状态 已完成。
第一方面,本申请实施例提供了一种接口调用方法,该方法包括:获取服 务请求,所述服务请求用于调用软件开发工具包SDK的与所述服务请求对应 的服务接口;获取与所述服务接口对应的动态代理类,所述动态代理类被预先 根据所述服务接口的调用方法进行实例化,以保证所述服务接口被调用前所述 SDK被初始化;根据所述动态代理类执行对所述服务接口的调用。
第二方面,本申请实施例提供了一种接口调用装置,该装置包括:请求获 取模块、代理获取模块以及代理调用模块。其中,请求获取模块用于获取服务 请求,所述服务请求用于调用软件开发工具包SDK的与所述服务请求对应的 服务接口;代理获取模块用于获取与所述服务接口对应的动态代理类,所述动 态代理类被预先根据所述服务接口的调用方法进行实例化,以保证所述服务接 口被调用前所述SDK被初始化;代理调用模块用于根据所述动态代理类执行 对所述服务接口的调用。
第三方面,本申请实施例提供了一种电子设备,包括:存储器;一个或多 个处理器,与所述存储器耦接;一个或多个应用程序,其中,一个或多个应用 程序被存储在存储器中并被配置为由一个或多个处理器执行,一个或多个应用 程序配置用于执行上述第一方面提供的接口调用方法。
第四方面,本申请实施例提供了一种计算机可读取存储介质,计算机可读 取存储介质中存储有程序代码,程序代码可被处理器调用执行上述第一方面提 供的接口调用方法。
本申请实施例提供的一种接口调用方法、装置、电子设备及存储介质,通 过获取服务请求,该服务请求用于调用软件开发工具包SDK的与服务请求对 应的服务接口,然后获取与该服务接口对应的动态代理类。其中,该动态代理 类被预先根据该服务接口的调用方法进行实例化,以保证该服务接口被调用前 SDK被初始化。最后根据该动态代理类执行对该服务接口的调用。从而实现 利用动态代理机制,代理SDK服务接口的调用方法,以保证SDK服务接口被 调用前,SDK的初始化接口已经执行完成。通过这种方式,SDK的调用方无需再考虑SDK初始化的接口,直接调用服务接口即可,保证了SDK的执行时 序,优化了SDK调用方的代码结构。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所 需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请 的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还 可以根据这些附图获得其他的附图。
图1示出了本申请一个实施例提供的接口调用方法的流程示意图。
图2示出了本申请另一个实施例提供的接口调用方法的流程示意图。
图3示出了图2中的步骤S230的一种流程示意图。
图4示出了图3中的步骤S233的一种流程示意图。
图5示出了本申请实施例提供的一种接口调用方法的执行流程示意图。
图6示出了本申请实施例提供的一种接口调用方法的程序结构图
图7示出了本申请实施例提供的一种接口调用装置的模块框图。
图8示出了本申请实施例提供的一种电子设备的结构框图。
图9示出了本申请实施例的用于保存或者携带实现根据本申请实施例的 接口调用方法的程序代码的存储单元。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施 例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
在安卓(Android)项目开发过程中,除了产出线上应用的应用程序包 (Androidapplication package,apk)的项目外,还有很多项目是为了产出方便 使用方(如研发人员)使用的SDK而存在的。
通常情况下,SDK都会提供一个初始化接口给到使用方,用来对SDK进 行初始化设置。这里的SDK初始化一般是进行一些资源的加载、变量的初始 化等操作。除此之外,SDK还会提供一些功能性的服务接口,用来进行业务功 能的调用。目前,为了保证业务时序的正常,大多数的SDK都会要求使用方 在使用功能性的服务接口前,要保证SDK的初始化接口已经被调用完成。
为了实现上述要求,现有的大部分研发,通常会选择在应用程序 (Application,APP)的Application类(用来维护应用程序全局状态的基础类) 的oncreate方法中进行SDK初始化的调用,但是这样做会增加APP的启动时 间,降低用户使用体验。除此之外,也有研发选择在调用SDK的服务接口之 前,通过添加判断方法,以先判断SDK的初始化接口是否被执行,如果没被 执行先执行SDK的初始化。这样做虽然解决了上面所说的APP启动时间过长的问题,但是这种调用一个服务接口,添加一个判断方法代码的方式,会导致 业务代码的冗余、重复,也不符合代码规范。
基于上述缺陷,发明人经过长时间的研究后,提出了本申请实施例中的接 口调用方法、装置、电子设备及存储介质,通过动态代理机制实现在调用SDK 的服务接口之前,SDK的初始化状态已完成,减少了代码的冗余和重复,提高 了代码的可维护性。
请参阅图1,图1示出了本申请实施例提供的一种接口调用方法的流程示 意图,可应用于电子设备。在具体的实施例中,接口调用方法可应用于如图7 所示的接口调用装置400以及图8所示的电子设备100。下面将针对图1所示 的流程进行详细的阐述。该接口调用方法可以包括以下步骤:
步骤S110:获取服务请求,所述服务请求用于调用软件开发工具包SDK 的与所述服务请求对应的服务接口。
在一些实施例中,上述服务请求可以是请求实现一个服务功能时对应生成 的请求指令。电子设备在获取到该服务请求时,可以从软件开发工具包SDK 提供的所有服务接口中,查找与该服务请求对应的服务接口。作为一种方式, 电子设备可以根据服务请求,确定请求的服务功能,然后从所有服务接口中获 取用于实现该服务功能的服务接口。
在一些实施例中,服务接口可以是SDK对外暴露出来的接口,供调用方 进行调用,以实现该服务接口对应的服务功能。SDK可以包括一个服务接口, 也可以包括多个服务接口,每个服务接口可以对应一种服务功能。在一些实施 例中,服务接口也可以理解为一个可以实现对应的服务功能,而又无需访问源 码,或理解内部执行逻辑的访问路径或访问通道,如方法的名称test()。
在一些实施例中,上述服务请求可以是由客户端进程所在设备的用户通过 与设备的交互操作发出。作为一种实施方式,该服务请求可以基于对SDK的 任一服务接口对应的插件进行的交互操作触发。具体地,对于SDK的任一种 服务功能,均可以以相应的插件的形式显示于设备的显示界面中。从而用户可 以对该插件进行交互操作,进而触发对该插件对应服务功能的服务请求,进而 调用该服务功能对应的服务接口。在另一些实施例中,上述服务请求也可以是 由客户端进程所在设备的其他处理逻辑在满足预设条件时发出,本申请实施例 中并不对服务请求的具体触发场景进行限定。
步骤S120:获取与所述服务接口对应的动态代理类,所述动态代理类被 预先根据所述服务接口的调用方法进行实例化,以保证所述服务接口被调用前 所述SDK被初始化。
由于代理的实质是不直接调用目标对象,而是通过一个代理对象间接的调 用目标对象。而通过这种方式,代理对象可以在调用目标对象的前后增加额外 的功能。因此,在本申请实施例中,可通过动态代理机制,在调用服务接口之 前,增加SDK初始化相关操作,以保证服务接口被调用前SDK已被初始化。 这样,通过封装有SDK初始化相关操作的动态代理类,SDK的调用方无需再 考虑SDK初始化的接口,直接通过动态代理类调用SDK服务接口即可,减少 了代码的冗余和重复,提高了代码的可维护性。
具体地,在本申请实施例中,电子设备在获取到服务请求后,可以获取与 该服务请求对应的服务接口对应的动态代理类。其中,动态代理类被预先根据 该服务接口的调用方法进行实例化,以保证该服务接口被调用前SDK已被初 始化。
在一些实施例中,上述服务接口的调用方法可以理解为动态代理类对服务 接口进行调用时所需要执行的逻辑操作。该逻辑操作可用于实现在调用服务接 口前SDK已被初始化。作为一种方式,该逻辑操作可以是:在调用服务接口 前,检查SDK的初始化状态,如果没有被初始化并且不在初始化的过程中, 则可先调用初始化方法,再调用服务接口;否则,直接调用服务接口。可以理 解的是,根据该服务接口的调用方法对动态代理类进行实例化后,当通过动态 代理类调用服务接口时,动态代理类即可执行上述逻辑操作,从而保证了服务 接口被调用前SDK已被初始化。
其中,代理类在运行时创建的代理方式被称为动态代理,也就是说,动态 代理中的动态代理类并不是在代码中定义的,而是在运行时根据反射机制动态 生成的。在一些实施例中,上述动态代理类可利用java的反射机制自动生成。 具体地,在Java的java.lang.reflect包下提供了一个Proxy类(也即 java.lang.reflect.Proxy类)和一个InvocationHandler接口(也即 java.lang.reflect.InvocationHandler接口),通过这个类和这个接口可以生成动 态代理类和动态代理对象。其中,Proxy类主要用来获取动态代理对象(即实 例化对象),InvocationHandler接口主要作用是完成代理的过程,可用于实现 上述服务接口的调用方法。从而电子设备在确定了与该服务请求对应的服务接 口后,可以利用上述java的反射机制,生成上述动态代理类。
步骤S130:根据所述动态代理类执行对所述服务接口的调用。
在本申请实施例中,服务器在获取到上述动态代理类后,可以根据动态代 理类执行对上述服务接口的调用。从而保证SDK服务接口被调用前,SDK初 始化接口已经执行完成。
在一些实施例中,由于动态代理类已被预先根据所述服务接口的调用方法 进行实例化,以保证服务接口被调用前SDK已被初始化。因此,电子设备在 根据该动态代理类执行对服务接口的调用时,可先检查SDK的初始化状态, 如果没有被初始化并且不在初始化的过程中,则可先调用初始化方法,再执行 对服务接口的调用。从而保证SDK服务接口被调用前,SDK初始化接口已经 执行完成。从而可在调用到服务接口时才进行SDK的初始化,实现按需加载 SDK,避免SDK的初始化造成用户使用过程中的卡顿、资源浪费。
本申请实施例提供的接口调用方法,通过获取服务请求,该服务请求用于 调用软件开发工具包SDK的与服务请求对应的服务接口,然后获取与该服务 接口对应的动态代理类。其中,该动态代理类被预先根据该服务接口的调用方 法进行实例化,以保证该服务接口被调用前SDK被初始化。最后根据该动态 代理类执行对该服务接口的调用。从而实现利用动态代理机制,代理SDK服 务接口的调用方法,以保证SDK服务接口被调用前,SDK的初始化接口已经 执行完成。通过这种方式,SDK的调用方无需再考虑SDK初始化的接口,直 接调用服务接口即可,保证了SDK的执行时序,优化了SDK调用方的代码结 构。
请参阅图2,图2示出了本申请另一实施例提供的一种接口调用方法的流 程示意图,可应用于上述电子设备,该接口调用方法可以包括:
步骤S210:获取服务接口,所述服务接口于SDK初始化后调用。
在一些实施例中,电子设备在获取到上述服务请求之前,可以先创建服务 接口的动态代理类。具体地,电子设备可先获取SDK的服务接口,且该服务 接口于SDK初始化后调用。
在一些实施例中,电子设备可获取SDK的于SDK初始化后才能调用的所 有服务接口,以创建每个服务接口对应的动态代理类。
步骤S220:创建与所述服务接口对应的动态代理类。
在一些实施例中,可以是通过Proxy类指定的类加载器(class loader)和 Class对象数组,来创建动态代理类。其中,Class对象数组中的每个元素都是 需要动态代理类实现的服务接口,即上述获取到的的服务接口。
步骤S230:根据所述服务接口的调用方法,对所述动态代理类进行实例 化。
可以理解的是,在创建动态代理对象的过程中,需要指定响应调用的调用 处理器(InvocationHandler接口的实现类),这是方法调用的一个集中控制点, 当通过动态代理类调用服务接口时,对该服务接口的调用就会被转发到调用处 理器的调用(invoke)方法来调用。
在一些实施例中,电子设备可根据服务接口的调用方法,确定调用处理器 中的invoke方法,该invoke方法用于保证服务接口被调用前SDK已被初始 化。电子设备在确定了invoke方法后,可生成指定的调用处理器。然后通过反 射机制获得动态代理类的构造函数,并根据该构造函数创建动态代理对象,该 动态代理对象即为动态代理类的一个实例,从而实现对动态代理类的实例化。 其中,通过构造函数创建动态代理对象时,指定的调用处理器被作为参数传入。 从而该动态代理对象可将调用接口的方法映射到指定的调用处理器,从而实现 所有动态代理类对服务接口的调用都会被转换到invoke方法来调用。
在一些实施例中,可以将SDK的所有服务接口统计设计为接口类和该接 口类的实现类的方式。具体地,在步骤S240之前,本申请实施例的接口调用 方法还可以包括:
注册所述服务接口的接口类,所述接口类用于实现对所述服务接口的调用;
注册与所述接口类对应的实现类,所述实现类包括实现所述服务接口对应 功能的逻辑操作。
其中,接口类可以理解为定义了一个或多个服务功能的集合,也即接口类 中可定义有一个或多个服务接口。例如,接口类A中定义有服务接口a,服务 接口b,服务接口c。具体地,在接口类中只能定义方法的形式,如包名、类 名、方法名、参数、返回类型,但不定义方法主体。可用关键字“Interface”表 示。
实现类可以理解为实现接口类中的服务功能的代码类文件,也即实现类中 定义有接口类中各个服务接口的实现方法,且实现方法中包括具体的逻辑操作。 例如,接口类A的实现类Aimpl中定义有服务接口a的实现方法对应的逻辑 操作,服务接口b的实现方法,服务接口c的实现方法。实现类可实现一个或 多个接口类,可用关键字“Implements”表示。需要说明的是,与接口类对应的 实现类,需要实现了该接口类中定义的所有服务功能。
在本申请实施例中,通过注册服务接口的接口类和与接口类对应的实现类, 从而可通过接口类实现对服务接口的调用,通过实现类来实现服务接口对应功 能的逻辑操作。从而可以创建与接口类对应的动态代理类,其中,该动态代理 类代理了实现类的所有实现方法。例如,创建接口类A的动态代理类 AimplProxy,AImplProxy的方法代理了实现类AImpl的所有方法。
在本申请实施例中,动态代理类除了代理了实现类的所有方法之外,还可 在实现类的方法执行前,增加SDK初始化相关操作,以保证服务接口被调用 前SDK已被初始化。具体地,步骤S230可以包括:
根据所述逻辑操作以及SDK初始化方法,对所述动态代理类进行实例化, 实例化后的所述动态代理类用于根据所述SDK初始化方法对所述SDK进行 初始化后,调用所述接口类以执行所述逻辑操作。
具体地,可以根据接口类的实现类以及SDK初始化方法,确定服务接口 的调用方法,从而确定调用处理器中的invoke方法,进而生成指定的调用处 理器。然后通过反射机制获得动态代理类的构造函数,并根据该构造函数创建 动态代理对象,该动态代理对象即为动态代理类的一个实例,从而实现对动态 代理类的实例化。实例化后的动态代理类(即动态代理对象),在调用服务接 口时,可根据SDK初始化方法对SDK进行初始化后,调用接口类中的服务接 口以执行实现类中该服务接口的逻辑操作。
在一些实施例中,当确定了上述调用处理器(InvocationHandler接口的实 现类)后,可直接根据Proxy类的newProxyInstance方法创建动态代理对象, 也即,可以直接通过newProxyInstance方法对动态代理类进行实例化。
在一些实施例中,请参阅图3,上述根据所述SDK初始化方法对所述SDK 进行初始化,可以包括:
步骤S231:检测所述SDK初始化是否已完成。
步骤S232:当检测到所述SDK初始化未完成时,检测所述SDK初始化 是否处于执行过程中。
步骤S233:当检测到所述SDK初始化处于执行过程中时,在所述SDK 初始化完成时,调用所述接口类以执行所述逻辑操作。
步骤S234:当检测到所述SDK初始化未处于执行过程中时,调用SDK 初始化方法,并在所述SDK初始化完成时,调用所述接口类以执行所述逻辑 操作。
在一些实施例中,当通过动态代理类调用服务接口时,对该服务接口的调 用就会被转发到调用处理器的invoke方法来调用。invoke方法中的执行逻辑 可以是:先检测SDK的初始化状态是否已完成。如果已完成可直接调用接口 类中的服务接口以执行对应的逻辑操作。如果检测到SDK的初始化状态未完 成时,可检测SDK初始化是否处于执行过程中,当检测到SDK初始化处于执 行过程中时,在SDK的初始化完成时,调用接口类中的服务接口以执行对应 的逻辑操作,从而实现对应的服务功能。这样,invoke方法就可以保证服务接口被调用前SDK的初始化已完成。需要注意的是,对于调用方来说,仅需通 过动态代理类调用服务接口即可,上述invoke方法的调用是在调用服务接口 时自动执行的。从而既保证了SDK的执行时序,又优化了SDK调用方的代码 结构。
在一些实施例中,当检测到SDK初始化处于执行过程中时,可以调用一 个检测接口,来实现对SDK初始化结束状态的检测。具体地,请参阅图4,步 骤S233可以包括:
步骤S2331:当检测到所述SDK初始化处于执行过程中时,调用检测接 口,所述检测接口用于检测所述SDK初始化是否已完成。
其中,检测接口是用于监听SDK初始化是否结束的接口,可以是方法名。 通过调用该检测接口,可执行对应的实现方法。
进一步地,在一些实施例中,在上述调用检测接口之前,本申请实施例的 接口调用方法还可以包括:注册检测接口对应的逻辑单元及所述逻辑单元的反 馈函数,所述逻辑单元包括检测所述SDK初始化是否已完成的逻辑操作,所 述反馈函数用于获取所述逻辑操作的执行结果。其中,逻辑单元可以为方法模 块(Method)或者说函数,该方法模块包括检测SDK初始化是否已完成的逻 辑操作。也就是说,可以预先注册好检测接口的实现方法,从而后续可直接通 过调用检测接口,来调用该逻辑单元执行对应的逻辑操作。
在一些实施例中,检测SDK初始化是否已完成的逻辑操作可以是进行标 识位的判断,也可以是进行标识位的获取。该标识位可用于表征SDK初始化 的状态。如,标识位为1时,为初始化过程中,标识位为0时,为初始化结束。 可以通过判断标识位是否为0来确定初始化是否已完成。
在一些实施例中,可以通过调用反馈函数来获取逻辑操作的执行结果。也 即当调用上述逻辑单元执行对应的逻辑操作后,可以通过该反馈函数返回逻辑 操作的执行结果。
步骤S2332:获取返回的检测结果,并基于所述检测结果判断所述SDK初 始化是否已完成。
步骤S2333:当基于所述检测结果确定所述SDK初始化已完成时,调用 所述接口类以执行所述逻辑操作。
在一些实施例中,可以获取反馈函数返回的执行结果作为返回的检测结果, 从而可基于返回的检测结果判断SDK初始化是否已完成。例如,如果返回的 检测结果为上述标识位为0时,可以确定SDK初始化已完成。当基于检测结 果确定SDK初始化已完成时,可以调用接口类中的服务接口以执行对应的逻 辑操作,从而保证了服务接口被调用前SDK的初始化已完成。
步骤S240:获取服务请求,所述服务请求用于调用软件开发工具包SDK 的与所述服务请求对应的服务接口。
步骤S250:获取与所述服务接口对应的动态代理类,所述动态代理类被 预先根据所述服务接口的调用方法进行实例化,以保证所述服务接口被调用前 所述SDK被初始化。
步骤S260:根据所述动态代理类执行对所述服务接口的调用。
在本申请实施例中,步骤S240~S260可参阅前述实施例中的内容,此处 不再赘述。
例如,请参阅图5,图5示出了本申请的接口调用方法的执行流程示意图。 具体地,当用户调用SDK接口类A中的服务接口a时,可以通过动态代理机 制,返回接口类A的动态代理类A1。在用户获取到动态代理类A1并且调用 服务接口a时,先检查SDK是否已经被初始化,如果SDK已经被初始化,则 调用接口类A的服务接口a即可。其中,在调用接口类A的服务接口a时, 会执行接口类A的实现类AImpl中的服务接口a的实现方法。如果没有被初 始化并且不在初始化的过程中,则先调用SDK初始化接口以执行初始化方法, 再调用接口类A的服务接口a。如果SDK在初始化的过程中,可通过注册的 检测接口,来监听SDK初始化是否结束。如果已结束,再调用接口类A的服 务接口a。这样既能保证SDK接口的执行是在SDK初始化之后,又能延迟 SDK初始化方法的执行时机。让用户可以在功能正常的情况下,获得最佳的 用户体验。而SDK的使用方,也无需在每个接口调用前添加判断SDK的初始 化状态的代码,减少了代码的冗余和重复,提高了代码的可维护性。又例如, 请参见图6,图6示出了本申请的接口调用方法的程序结构图。
在一些实施例中,本申请实施例的接口调用方法还可以包括:
当获取到新服务请求时,直接调用SDK的与所述新服务请求对应的新服 务接口。
在一些实施例中,大多服务接口对应的SDK初始化方法通常是一样的, 在已通过动态代理类调用了上述服务接口的情况下,如果又获取到一个新服务 请求,则电子设备可直接调用SDK的与新服务请求对应的新服务接口。可以 理解的是,由于之前通过动态代理类调用服务接口时,已经确保了SDK初始 化状态已完成,因此,无需再通过动态代理类调用新服务接口,来进行SDK 初始化的相关操作。也就是说,当服务接口B的调用时序在服务接口A之后 时,如果已通过动态代理类调用了服务接口A,后续可直接调用服务接口B, 而非通过动态代理类调用服务接口B。
本申请实施例提供的接口调用方法,通过将SDK的服务接口设计为接口 类和接口类的实现类,然后获取接口类的动态代理类,其中,该动态代理类既 代理了所有实现类的方法,又可在调用服务接口前保证SDK被初始化。最后 通过动态代理类来实现对服务接口的调用。通过这种方式,SDK的调用方无 需再考虑SDK初始化的接口,直接通过动态代理类调用服务接口即可,保证 了SDK的执行时序的同时,也优化了SDK调用方的代码结构。
请参阅图7,图7示出了本申请实施例提供的一种接口调用装置400的结 构框图,该接口调用装置400应用于电子设备。该接口调用装置400包括:请 求获取模块410、代理获取模块420以及代理调用模块430。其中,请求获取 模块410用于获取服务请求,所述服务请求用于调用软件开发工具包SDK的 与所述服务请求对应的服务接口;代理获取模块420用于获取与所述服务接口 对应的动态代理类,所述动态代理类被预先根据所述服务接口的调用方法进行 实例化,以保证所述服务接口被调用前所述SDK被初始化;代理调用模块430用于根据所述动态代理类执行对所述服务接口的调用。
在一些实施例中,该接口调用装置400还可以包括:接口获取模块,用于 获取服务接口,所述服务接口于SDK初始化后调用;代理类创建模块,用于 创建与所述服务接口对应的动态代理类;实例化模块,用于根据所述服务接口 的调用方法,对所述动态代理类进行实例化。
在一些实施例中,该接口调用装置400还可以包括:接口类注册模块,用 于注册所述服务接口的接口类,所述接口类用于实现对所述服务接口的调用; 实现类注册模块,用于注册与所述接口类对应的实现类,所述实现类包括实现 所述服务接口对应功能的逻辑操作。上述实例化模块可以具体用于:根据所述 逻辑操作以及SDK初始化方法,对所述动态代理类进行实例化,实例化后的 所述动态代理类用于根据所述SDK初始化方法对所述SDK进行初始化后,调 用所述接口类以执行所述逻辑操作。
进一步地,在一些实施例中,上述实例化模块中根据所述SDK初始化方 法对所述SDK进行初始化,可以包括:检测所述SDK初始化是否已完成;当 检测到所述SDK初始化未完成时,检测所述SDK初始化是否处于执行过程 中;当检测到所述SDK初始化处于执行过程中时,在所述SDK初始化完成 时,调用所述接口类以执行所述逻辑操作;当检测到所述SDK初始化未处于 执行过程中时,调用SDK初始化方法,并在所述SDK初始化完成时,调用所 述接口类以执行所述逻辑操作。
在一些实施例中,上述当检测到所述SDK初始化处于执行过程中时,在 所述SDK初始化完成时,调用所述接口类以执行所述逻辑操作,可以包括: 当检测到所述SDK初始化处于执行过程中时,调用检测接口,所述检测接口 用于检测所述SDK初始化是否已完成;获取返回的检测结果,并基于所述检 测结果判断所述SDK初始化是否已完成;当基于所述检测结果确定所述SDK 初始化已完成时,调用所述接口类以执行所述逻辑操作。
进一步地,在一些实施例中,在上述调用检测接口之前,上述实例化模块 还可具体用于:注册检测接口对应的逻辑单元及所述逻辑单元的反馈函数,所 述逻辑单元包括检测所述SDK初始化是否已完成的逻辑操作,所述反馈函数 用于获取所述逻辑操作的执行结果。
在一些实施例中,该接口调用装置400还可以包括:新请求获取模块,用 当获取到新服务请求时,直接调用SDK的与所述新服务请求对应的新服务接 口。
本申请实施例提供的接口调用装置用于实现前述方法实施例中相应的接 口调用方法,并具有相应的方法实施例的有益效果,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述 装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不 再赘述。
在本申请所提供的几个实施例中,所显示或讨论的模块相互之间的耦合或 直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接, 可以是电性,机械或其它的形式。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中, 也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块 中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的 形式实现。
请参考图8,图8其示出了本申请实施例提供的一种电子设备的结构框图。 该电子设备100可以是智能手机、平板电脑、笔记本电脑、台式电脑、可穿戴 终端设备等能够运行应用程序的电子设备。本申请中的电子设备100可以包括 一个或多个如下部件:处理器110、存储器120以及一个或多个应用程序,其 中一个或多个应用程序可以被存储在存储器120中并被配置为由一个或多个 处理器110执行,一个或多个应用程序配置用于执行如前述方法实施例所描述 的方法。
处理器110可以包括一个或者多个处理核。处理器110利用各种接口和线 路连接整个电子设备100内的各个部分,通过运行或执行存储在存储器120内 的指令、程序、代码集或指令集,以及调用存储在存储器120内的数据,执行 电子设备100的各种功能和处理数据。可选地,处理器110可以采用数字信号 处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(ProgrammableLogic Array,PLA)中 的至少一种硬件形式来实现。处理器110可集成中央处理器(CentralProcessing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序 等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可 以理解的是,上述调制解调器也可以不集成到处理器110中,单独通过一块通 信芯片进行实现。
存储器120可以包括随机存储器(Random Access Memory,RAM),也 可以包括只读存储器(Read-Only Memory)。存储器120可用于存储指令、程 序、代码、代码集或指令集。存储器120可包括存储程序区和存储数据区,其 中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指 令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方 法实施例的指令等。存储数据区还可以存储电子设备100在使用中所创建的数 据等。
本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关 的部分结构的框图,并不构成对本申请方案所应用于其上的电子设备的限定, 具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件, 或者具有不同的部件布置。
综上所述,本申请实施例提供的接口调用方法、装置及电子设备,通过获 取服务请求,该服务请求用于调用软件开发工具包SDK的与服务请求对应的 服务接口,然后获取与该服务接口对应的动态代理类。其中,该动态代理类被 预先根据该服务接口的调用方法进行实例化,以保证该服务接口被调用前 SDK被初始化。最后根据该动态代理类执行对该服务接口的调用。从而实现 利用动态代理机制,代理SDK服务接口的调用方法,以保证SDK服务接口被 调用前,SDK的初始化接口已经执行完成。通过这种方式,SDK的调用方无 需再考虑SDK初始化的接口,直接调用服务接口即可,保证了SDK的执行时 序,优化了SDK调用方的代码结构。
请参阅图9,其示出了本申请实施例提供的一种计算机可读取存储介质的 结构框图。该计算机可读取存储介质800中存储有程序代码,程序代码可被处 理器调用执行上述方法实施例中所描述的方法。
计算机可读取存储介质800可以是诸如闪存、EEPROM(电可擦除可编程 只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机 可读取存储介质800包括非瞬时性计算机可读介质(non-transitory computer- readable storage medium)。计算机可读取存储介质800具有执行上述方法中的 任何方法步骤的程序代码810的存储空间。这些程序代码可以从一个或者多个 计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代 码810可以例如以适当形式进行压缩。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、 “具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、 结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中, 对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的 具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的 方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书 中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限 制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员 当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中 部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的 本质脱离本申请各实施例技术方案的精神和范围。

Claims (10)

1.一种接口调用方法,其特征在于,所述方法包括:
获取服务请求,所述服务请求用于调用软件开发工具包SDK的与所述服务请求对应的服务接口;
获取与所述服务接口对应的动态代理类,所述动态代理类被预先根据所述服务接口的调用方法进行实例化,以保证所述服务接口被调用前所述SDK被初始化;
根据所述动态代理类执行对所述服务接口的调用。
2.根据权利要求1所述的方法,其特征在于,在所述获取服务请求之前,所述方法还包括:
获取服务接口,所述服务接口于SDK初始化后调用;
创建与所述服务接口对应的动态代理类;
根据所述服务接口的调用方法,对所述动态代理类进行实例化。
3.根据权利要求2所述的方法,其特征在于,在所述获取服务请求之前,所述方法还包括:
注册所述服务接口的接口类,所述接口类用于实现对所述服务接口的调用;
注册与所述接口类对应的实现类,所述实现类包括实现所述服务接口对应功能的逻辑操作;
所述根据所述服务接口的调用方法,对所述动态代理类进行实例化,包括:
根据所述逻辑操作以及SDK初始化方法,对所述动态代理类进行实例化,实例化后的所述动态代理类用于根据所述SDK初始化方法对所述SDK进行初始化后,调用所述接口类以执行所述逻辑操作。
4.根据权利要求3所述的方法,其特征在于,所述根据所述SDK初始化方法对所述SDK进行初始化,包括:
检测所述SDK初始化是否已完成;
当检测到所述SDK初始化未完成时,检测所述SDK初始化是否处于执行过程中;
当检测到所述SDK初始化处于执行过程中时,在所述SDK初始化完成时,调用所述接口类以执行所述逻辑操作;
当检测到所述SDK初始化未处于执行过程中时,调用SDK初始化方法,并在所述SDK初始化完成时,调用所述接口类以执行所述逻辑操作。
5.根据权利要求4所述的方法,其特征在于,所述当检测到所述SDK初始化处于执行过程中时,在所述SDK初始化完成时,调用所述接口类以执行所述逻辑操作,包括:
当检测到所述SDK初始化处于执行过程中时,调用检测接口,所述检测接口用于检测所述SDK初始化是否已完成;
获取返回的检测结果,并基于所述检测结果判断所述SDK初始化是否已完成;
当基于所述检测结果确定所述SDK初始化已完成时,调用所述接口类以执行所述逻辑操作。
6.根据权利要求5所述的方法,其特征在于,在所述调用检测接口之前,所述方法还包括:
注册检测接口对应的逻辑单元及所述逻辑单元的反馈函数,所述逻辑单元包括检测所述SDK初始化是否已完成的逻辑操作,所述反馈函数用于获取所述逻辑操作的执行结果。
7.根据权利要求1-6任一项所述的方法,其特征在于,在所述根据所述动态代理类执行对所述服务接口的调用之后,所述方法还包括:
当获取到新服务请求时,直接调用SDK的与所述新服务请求对应的新服务接口。
8.一种接口调用装置,其特征在于,所述装置包括:
请求获取模块,用于获取服务请求,所述服务请求用于调用软件开发工具包SDK的与所述服务请求对应的服务接口;
代理获取模块,用于获取与所述服务接口对应的动态代理类,所述动态代理类被预先根据所述服务接口的调用方法进行实例化,以保证所述服务接口被调用前所述SDK被初始化;
代理调用模块,用于根据所述动态代理类执行对所述服务接口的调用。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个应用程序配置用于执行如权利要求1-7任一项所述的方法。
10.一种计算机可读取存储介质,其特征在于,所述计算机可读取存储介质中存储有程序代码,所述程序代码可被处理器调用执行如权利要求1-7任一项所述的方法。
CN201911351264.0A 2019-12-24 2019-12-24 接口调用方法、装置、电子设备及存储介质 Active CN111209122B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911351264.0A CN111209122B (zh) 2019-12-24 2019-12-24 接口调用方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911351264.0A CN111209122B (zh) 2019-12-24 2019-12-24 接口调用方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN111209122A true CN111209122A (zh) 2020-05-29
CN111209122B CN111209122B (zh) 2024-06-11

Family

ID=70784270

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911351264.0A Active CN111209122B (zh) 2019-12-24 2019-12-24 接口调用方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN111209122B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111949421A (zh) * 2020-08-12 2020-11-17 北京奇艺世纪科技有限公司 Sdk调用方法、装置、电子设备和计算机可读存储介质
CN112637196A (zh) * 2020-12-21 2021-04-09 上海销氪信息科技有限公司 一种第三方服务的调用方法、装置、电子设备和存储介质
CN112988279A (zh) * 2021-04-16 2021-06-18 广州南方卫星导航仪器有限公司 一种对象处理方法、装置、电子设备及存储介质
CN114020498A (zh) * 2022-01-04 2022-02-08 深圳市明源云科技有限公司 不同部署场景的远程调用方法、装置、设备及存储介质
CN114296823A (zh) * 2021-12-29 2022-04-08 深圳市华宇讯科技有限公司 用于业务模块间解耦的信息处理方法及装置
CN114528054A (zh) * 2022-01-19 2022-05-24 浪潮卓数大数据产业发展有限公司 基于业务模块的第三方sdk初始化方法、装置、设备及介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1832476A (zh) * 2005-03-08 2006-09-13 微软公司 动态服务代理
CN103425462A (zh) * 2012-05-14 2013-12-04 阿里巴巴集团控股有限公司 一种工作流数据持久化的方法和装置
CN107066292A (zh) * 2017-03-06 2017-08-18 北京百度网讯科技有限公司 服务器环境部署方法和装置
CN108055248A (zh) * 2017-11-30 2018-05-18 平安科技(深圳)有限公司 基于dubbo框架的远程调用方法、服务器及存储介质
CN108255615A (zh) * 2017-11-30 2018-07-06 平安科技(深圳)有限公司 跨语言调用方法、服务器及存储介质
CN109254808A (zh) * 2018-07-18 2019-01-22 平安科技(深圳)有限公司 接口调用方法、装置及计算机可读存储介质
CN109814943A (zh) * 2018-12-21 2019-05-28 北京城市网邻信息技术有限公司 服务构建方法、加载方法及装置、电子设备、存储介质
CN110399178A (zh) * 2019-06-14 2019-11-01 五八有限公司 一种第三方服务的调用方法、装置、电子设备和存储介质
CN110399233A (zh) * 2019-06-28 2019-11-01 口碑(上海)信息技术有限公司 远程过程调用的处理方法及装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1832476A (zh) * 2005-03-08 2006-09-13 微软公司 动态服务代理
CN103425462A (zh) * 2012-05-14 2013-12-04 阿里巴巴集团控股有限公司 一种工作流数据持久化的方法和装置
CN107066292A (zh) * 2017-03-06 2017-08-18 北京百度网讯科技有限公司 服务器环境部署方法和装置
CN108055248A (zh) * 2017-11-30 2018-05-18 平安科技(深圳)有限公司 基于dubbo框架的远程调用方法、服务器及存储介质
CN108255615A (zh) * 2017-11-30 2018-07-06 平安科技(深圳)有限公司 跨语言调用方法、服务器及存储介质
CN109254808A (zh) * 2018-07-18 2019-01-22 平安科技(深圳)有限公司 接口调用方法、装置及计算机可读存储介质
CN109814943A (zh) * 2018-12-21 2019-05-28 北京城市网邻信息技术有限公司 服务构建方法、加载方法及装置、电子设备、存储介质
CN110399178A (zh) * 2019-06-14 2019-11-01 五八有限公司 一种第三方服务的调用方法、装置、电子设备和存储介质
CN110399233A (zh) * 2019-06-28 2019-11-01 口碑(上海)信息技术有限公司 远程过程调用的处理方法及装置

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111949421A (zh) * 2020-08-12 2020-11-17 北京奇艺世纪科技有限公司 Sdk调用方法、装置、电子设备和计算机可读存储介质
CN111949421B (zh) * 2020-08-12 2023-09-05 北京奇艺世纪科技有限公司 Sdk调用方法、装置、电子设备和计算机可读存储介质
CN112637196A (zh) * 2020-12-21 2021-04-09 上海销氪信息科技有限公司 一种第三方服务的调用方法、装置、电子设备和存储介质
CN112988279A (zh) * 2021-04-16 2021-06-18 广州南方卫星导航仪器有限公司 一种对象处理方法、装置、电子设备及存储介质
CN114296823A (zh) * 2021-12-29 2022-04-08 深圳市华宇讯科技有限公司 用于业务模块间解耦的信息处理方法及装置
CN114020498A (zh) * 2022-01-04 2022-02-08 深圳市明源云科技有限公司 不同部署场景的远程调用方法、装置、设备及存储介质
CN114528054A (zh) * 2022-01-19 2022-05-24 浪潮卓数大数据产业发展有限公司 基于业务模块的第三方sdk初始化方法、装置、设备及介质
CN114528054B (zh) * 2022-01-19 2024-05-10 浪潮卓数大数据产业发展有限公司 基于业务模块的第三方sdk初始化方法、装置、设备及介质

Also Published As

Publication number Publication date
CN111209122B (zh) 2024-06-11

Similar Documents

Publication Publication Date Title
CN111209122B (zh) 接口调用方法、装置、电子设备及存储介质
CN109933443B (zh) 进程间通信方法、装置、计算机设备及可读存储介质
CN112257135B (zh) 一种基于多线程的模型加载方法、装置、存储介质及终端
US10019298B2 (en) Middleware interface and middleware interface generator
CN108363528B (zh) 应用页面的启动方法、装置、存储介质及电子设备
US9678767B2 (en) Unified extensible firmware interface (UEFI) driver and protocol
CN108153533B (zh) 制作安装程序的方法和装置、程序的安装方法和装置
CN107273226B (zh) 在安卓系统中集成组件及调用被集成组件的方法和装置
CN111078316B (zh) 布局文件加载方法、装置、存储介质及电子设备
CN112835615A (zh) 软件开发工具包的插件化处理方法、装置及电子设备
CN109725887B (zh) 基于消息研发框架的数据交互方法、装置及终端设备
CN109408256B (zh) 应用调用方法和装置
CN114327087A (zh) 输入事件处理方法、装置、电子设备和存储介质
CN106778269B (zh) 一种驱动层防注入方法、装置及客户端
CN109918598B (zh) 一种基于Android电视浏览器的web页面渲染方法
CN111124627B (zh) 应用程序的调起者确定方法、装置、终端及存储介质
CN106775608B (zh) 独立系统进程的实现方法和装置
CN108197029B (zh) 一种获取进程信息的方法和设备
CN111309407A (zh) 集成第三方库的处理方法及装置
CN112764729B (zh) 应用软件开发方法、装置、计算机设备及可读存储介质
CN114647411A (zh) 编程界面加载方法、装置、电子设备及存储介质
CN105631318B (zh) 一种注册表键值的获取方法及装置
CN114936145A (zh) 数据库测试方法、装置、存储介质及数据库压测装置
CN114510334A (zh) 类实例的调用方法、装置、电子设备及自动驾驶车辆
CN112491799A (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
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20200529

Assignee: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd.

Assignor: GUANGZHOU HUADUO NETWORK TECHNOLOGY Co.,Ltd.

Contract record no.: X2021440000031

Denomination of invention: Interface calling method, device, electronic device and storage medium

License type: Common License

Record date: 20210125

EE01 Entry into force of recordation of patent licensing contract
GR01 Patent grant
GR01 Patent grant