CN111400070A - 终端设备及其跨进程接口调用实现和执行方法 - Google Patents
终端设备及其跨进程接口调用实现和执行方法 Download PDFInfo
- Publication number
- CN111400070A CN111400070A CN202010212437.7A CN202010212437A CN111400070A CN 111400070 A CN111400070 A CN 111400070A CN 202010212437 A CN202010212437 A CN 202010212437A CN 111400070 A CN111400070 A CN 111400070A
- Authority
- CN
- China
- Prior art keywords
- interface
- service
- identifier
- client
- service process
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Library & Information Science (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种终端设备及其跨进程接口调用实现、执行方法,该实现方法包括如下步骤:跨进程通信的服务进程与客户进程以编程注解的方式共同协议分别定义同一接口的实现类和接口类,约定该接口的接口标识;运行后,服务进程将注解的接口注册信息注册到接口库,允许客户进程与自身绑定通信;当客户进程创建接口时,解析该接口的注解获得接口标识,驱动服务进程查询接口库以实例化与该接口标识相应的实现类生成实例对象,返回对象标识;当客户进程调用其接口的方法时,通过调用携带所述对象标识的代理对象,间接调用实现类对象,获取结果数据。本发明简化了应用程序开发过程中涉及通信接口实现的开发步骤,提供了更为简便高效的跨进程通信解决方案。
Description
技术领域
本发明涉及Android操作系统的应用程序开发技术,尤其涉及一种跨进程接口调用执行方法、一种跨进程接口调用实现方法,还涉及各方法相应的终端设备。
背景技术
开发Android应用过程中,根据业务规模、场景的不同,我们会开始引入多进程通信技术到现有技术体系中。使用多进程通信技术,能突破应用可分配系统资源的限制(Android系统资源的分配以进程为基本单位),让应用的可使用资源成倍增长,能实现应用保活等业务需求,但是增加了多进程通信的技术体系,我们就需要处理多进程通信中数据传输的问题,由此将大幅度增加开发的技术复杂度。
Android官方本身提供了多种解决多进程通信的技术,我们通常使用AIDL来实现进程间通信。AIDL是Android中IPC(Inter-Process Communication)方式中的一种,是Android Interface definition language(Android接口定义语言)的缩写。AIDL虽然各方面指标都较为符合实际需要,但处理过程复杂,开发成本较高。
一般使用AIDL开发一个支持多进程通信的接口方法,我们需要做如下操作:1、创建aidl文件,在aidl文件中定义接口类;2、如果接口类的方法的参数中含有自定义类型,还需要为该类型再定义一个aidl文件;3、需要创建一个Service类为提供服务的进程提供信息的通信服务;4、定义一个Binder类去实现aidl中定义的接口类,在实现类中实现功能逻辑;5、Service类通过onBind接口返回步骤4中Binder类的对象给Client程序;6、Client程序需要去连接Server程序的Service类,在onServiceConnected方法中获取Binder类的代理对象,通过代理对象调用Binder类的接口方法来获取Binder类提供的功能;7、Client程序需要维护其与Service类的连接状态,因为Service类是其通信交互的载体。
按照上述利AIDL开发多进程通信的接口方法可以创建一个跨进程接口,问题的关键在于,通常情况下每个提供IPC服务的接口类都需要按照上述的步骤重新操作一遍,如此可以看出,现有技术虽然支持ipc通信,但是其开发步骤复杂而繁琐、可扩充性差,导致开发成本较高。这特别不利于一些需要联合运行的项目的开发。
发明内容
本发明的第一目的在于为提升应用程序开发效率而提供一种跨进程接口调用实现方法。
本发明的第二目的在于为提升应用程序开发效率而提供一种跨进程接口调用执行方法。
相应的,作为本发明的其他目的,也基于前述各目的的方法而提供与之相适应的终端设备。
为满足本发明的第一目的,本发明提供的一种跨进程接口调用实现方法,包括如下步骤:
应用程序中,跨进程通信的服务进程与客户进程以编程注解的方式共同协议分别定义同一接口的实现类和接口类,约定该接口的接口标识;
在应用程序安装运行后,服务进程将其实现类中注解的接口注册信息注册到接口库,允许客户进程与自身基于操作系统进程通信机制进行绑定通信;
当客户进程创建某个接口时,解析该接口的注解获得接口标识,驱动服务进程查询接口库中的接口注册信息确定与该接口标识相应的实现类,实例化该实现类生成实例对象,返回该实例对象的对象标识;
当客户进程调用其已创建的接口的方法时,通过调用携带所述对象标识的代理对象,间接调用服务进程中相应的实现类对象,执行其中的内建方法,获取返回的结果数据。
较佳的实施例中,服务进程在实例化实现类时,为该实现类的实例对象分配对象标识,将对象标识与实例对象的对应关系存储到接口库的接口注册信息中,将该对象标识提供给客户进程创建代理对象,代理对象发生代理调用时,提供该对象标识给服务进程,以供服务进程查询接口库的接口注册信息而确定要调用的具体实例对象。
较佳的实施例中,应用程序中服务进程的接口类和客户进程实现类均协议定义了接口的内建方法的方法标识,该方法标识在应用程序运行后被作为接口注册信息注册到所述接口库,且在客户进程通过代理对象调用该内建方法时,被客户进程传输给服务进程,以供服务进程查询接口库中的接口注册信息而确定相应的实例对象中的内建方法。
进一步的实施例中,客户进程向服务进程提供的接口标识被以第一格式封装,而在服务进程按照相应的格式协议予以解析提取;服务进程向客户进程提供的方法标识和对象标识被以第二格式封装,而客户进程按照相应的格式协议予以解析提取。
较佳的实施例中,所述的注解按照Java注解技术实现,所述代理对象按照Java代理技术实现。
较佳的,服务进程负责向操作系统注册服务组件,供客户进程与之绑定通信,在其彼此解除绑定后,服务进程删除因客户进程产生的所述接口库中的接口注册信息。
为满足本发明的第二目的,本发明提供的一种跨进程接口调用执行方法,包括如下步骤:
客户进程根据其业务模块中的接口类,调用其解析模块解析出该接口类预先注解的接口标识,将其封装成请求格式,向服务进程发起接口创建请求;
服务进程接收该接口创建请求,解析该请求获得接口标识,查询接口库确定相应的实现类后执行该实现类的实例化创建操作,产生相应的实例对象;
服务进程将实例对象及其对象标识的对应关系存储于接口库中,将该对象标识封装成结果数据返回给客户进程;
客户进程接收所述结果数据,解析出其中的对象标识形成携带该对象标识的代理对象,将之返回给客户进程的业务模块,以供所述业务模块通过调用所述代理对象而实现调用所述实例对象。
进一步,客户进程响应于其业务模块的需求通过调用所述代理对象而实现调用所述实例对象的过程,包括如下具体步骤:
客户进程的业务模块发起所述接口类中方法的接口调用请求;
所述代理对象代理调用服务进程中的实例对象的相应的内建方法,获得该内建方法运行后的结果数据;
所述代理对象将所述结果数据返回给所述的业务模块。
进一步,所述代理对象代理调用服务进程中的实例对象的相应的内建方法,获得该内建方法运行后的结果数据的过程,包括如下具体步骤:
所述代理对象依据注解解析出该方法的方法标识,连同代理对象自身的对象标识及业务模块传入的运行参数形成至少部分属性信息,将所述属性信息封装成请求格式发送给服务进程;
服务进程接收该属性信息后,解析出该属性信息中的对象标识、方法标识以及运行参数,依据对象标识确定实例对象,依据方法标识查询接口库确定实例对象中的内建方法,以所述运行参数为传入参数运行该方法;
服务进程将该方法执行后的结果数据封装成结果格式后回传给代理对象。
较佳的实施例中,所述服务进程由其业务模块负责预先向接口库添加其实现类的接口注册信息,在接口注册信息中实现接口标识与实现类之间的关联,以通过接口标识确定相应的实现类。
较佳的实施例中,所述服务进程由其业务模块在执行实例化后向接口库添加其实例对象的接口注册信息,在接口注册信息中实现实例对象与其对象标识之间的关联,以通过对象标识确定相应的实例对象。
具体的,所述服务进程由其业务模块负责预先向接口库添加其实现类的接口注册信息,在接口注册信息中实现方法标识与相应的实现类方法之间的关联,以通过方法标识确定相应的实例对象中对应的内建方法。
较佳的,所述客户进程与服务进程在其彼此交互过程中,分别采用预协议的请求格式封装和解析所述的接口标识与属性信息,分别采用预协议的结果格式解析和封装所述的对象标识与实例对象内建方法执行结果。
进一步,所述的请求格式与所述的结果格式,均遵守预先规范的协议,使得服务进程与客户进程两者,一方封装的格式可被另一方正确解析。
具体的,所述代理对象基于Java代理技术实现,其被构建为服务进程中的关联于所述接口标识的实现类的实例对象的代理;所述接口标识和方法标识均采用Java注解技术实现,在服务进程和客户进程的源代码中得以预先体现。
进一步,该方法还包括如下步骤:
所述客户进程在其运行后,先与所述服务进程预注册且在运行的服务组件实施绑定,以实现客户进程与服务进程的后续交互。
进一步,在所述客户进程与服务进程解除绑定后,服务进程从接口库中删除因该客户进程产生的实例对象相关的信息。
较佳的,所述服务进程适于按照预设条件启动所述客户进程。
较佳的,一个所述的服务进程并行地与一个或多个所述的客户进程实施本方法的交互,和/或,至少一个所述客户进程与服务进程运行在不同的虚拟机中。
为满足本发明的其他目的,本发明提供的一种终端设备,包括中央处理器和存储器,所述中央处理器用于调用运行存储于所述存储器中的计算机程序以执行如前一目的所述的跨进程接口调用实现方法的步骤,或执行所述的跨进程接口调用执行方法的步骤。
相对于现有技术,本发明具备如下优点:
首先,本发明的各方法,可以采用诸如Java编程注解的方式在程序开发的类定义阶段添加各种标识,包括接口标识和方法标识,在服务侧利用接口库存储和管理应用程序的实现类,在本应用程序运行时预先向接口库中注册其内建的实现类,后供客户进程调用,这一过程中,通过接口标识关联起客户进程的接口类和服务进程的实现类等内存资源之间的关系,对进程与进程之间的调用起到集中调度和管控的作用,使得本应用程序(表现为服务进程)与客户进程之间的接口调用更为灵活高效。对于类的方法层面,接口库也为其配置了接口注册信息管理机制,也可通过编程注解的方式实现客户进程与服务进程之间的协议并为彼此关联方法标识,使得实例对象的内建方法运行所需的相关属性信息均可通过传递方法标识查询接口库实现跨进程互通。由此,客户进程通过其代理对象便可实现对服务进程的实例对象的内建方法进行传参和调用。所以,编程注解相关标识、设置接口库,进一步如结合进程间数据格式协议解析机制的设置,这些手段的运用,使跨进程高效通信成为可能。
其次,跨进程通信效率的提高,体现到开发过程中,尤其是在Android操作系统的开发过程中,便可大大提高程序开发效率。在Android中,本发明各方法的实施,使得不同进程之间调用接口时,可以采取编程注解的方式实现进程间协议,不必基于AIDL每次针对新的接口又执行完全一致的接口配置流程。也就是说,本发明简化了Android系统中新增跨进程通信接口的开发步骤,在本发明的基础上,开发人员只需针对跨进程通信接口,创建API接口类及其实现类即可,而不必重复其他公知步骤,后续运行本发明的方法所实现的程序时,API接口便会被服务进程注册到接口库中,其他公知步骤对应的功能均由本发明的方法以程序进程的方式自动去实现。所以,当实现了本发明的应用程序被升级后,若升级版本中增删了相关的跨进程通信接口,便会体现为接口库的接口注册信息的变动。可见,本发明可大大提升程序开发效率,有助于释放开发能力,从而综合降低项目开发成本。
再者,本发明的服务进程由于配备了服务组件,其接口调用机制便可并行地为多个客户进程提供服务,无论这些客户进程是属于本应用程序还是其他应用程序,这就为一些联合开发的项目例如登录模块、授权模块、支付模块、过滤模块等提供了便利的技术实现基础。无论是本应用程序还是不同应用程序的客户进程,只要其遵守本发明的方法所规范的协议,也就具备与本发明的应用程序实现交互的能力,从而便可实现对本应用程序服务进程的内存资源的调用。这一基础技术,也有利于确保维持服务进程或客户进程在内存中的存活,相互之间通过服务组件进行绑定的机制,调度实现类接口的活动,使进程间互相唤醒成为可能,确保了各进程在内存中的活跃性,而避免各进程在内存清理过程中被结束,甚至可以通过其中一个进程重新启动另一进程,使这些进程始终在系统中运行。
进而,服务进程通过接口库的设置实现了接口集中维护和服务的能力,而客户进程可以简化开发,只要遵守彼此间协议,一个或多个客户进程,无论这些进程是属于同一应用程序还是不同程序,均可由服务进程提供接口服务,这对于集中实现一些核心功能的联合开发项目相关的终端程序而言,更能体现其高效的效果。
此外,本发明在服务进程与客户进程之间针对中间过程数据采用了协议解析机制,具体是在调用层面采用第一格式,在结果层面采用第二格式,两种格式并行不悖,便于由本领域技术人员开发些功能集中的解析模块配置到客户进程和服务进程中,便于对不同格式相对应的解析和封装功能进行模块化开发,进一步在提高开发效率的同时,确保不同进程间通信的安全性。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明据以实现的原理中的客户进程与服务进程实现架构示意图;
图2为本发明一种典型实施例中的跨进程接口调用实现方法的流程示意图;
图3为本发明一种典型实施例中跨进程接口调用执行方法的流程示意图;
图4为本发明的跨进程接口调用执行方法中步骤S24的具体步骤流程示意图;
图5为本发明的跨进程接口调用执行方法中步骤S242的具体步骤流程示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“客户端”、“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,进行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他诸如个人计算机、平板电脑之类的通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(PersonalCommunications Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA(Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global PositioningSystem,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“客户端”、“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“客户端”、“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
本发明所称的“终端设备”、“移动终端”等名称所指向的硬件,本质上是具备个人计算机等效能力的设备,为具有中央处理器(包括运算器和控制器)、存储器、输入设备以及输出设备等冯诺依曼原理所揭示的必要构件的硬件装置,计算机程序存储于其存储器中,中央处理器将存储在外存中的程序调入内存中运行,执行程序中的指令,与输入输出设备交互,借此完成特定的功能。
以下结合附图先揭示本发明的主要实现原理:
本发明的应用程序以计算机程序的形式运行于诸如手机、平板等移动终端之类的终端设备中,该终端设备运行有Android或前向兼容Android(例如华为公司新近开发的“鸿蒙”——Harmony OS)的操作系统。应用程序被中央处理器调度入内存中运行,而实现本发明的相关方法。
请参阅图1,根据Android操作系统固有的机制,每个应用程序将具体运行于系统的一个虚拟机中。当然,操作系统也支持多进程架构,因此,同一应用程序可以包括多个进程,例如在主进程基础上通过注册服务组件运行其提供服务功能的进程。
具体而言,根据Android操作系统的原理,一个应用程序相关的进程将运行于一个独立的虚拟机中,但也允许存在同一应用程序中实现多进程架构,例如本应用程序就可以通过声明服务组件的方式,实现多进程架构。由此,可以理解,客户进程1与服务进程2可以并行地运行在同一虚拟机或不同虚拟机中,当客户进程1不属于本应用程序时,意味着客户进程1与服务进程2属于不同的内存虚拟机,但由于本发明的实现,使得它们之间的接口调用相关的开发变得更为简便。
关于所述的服务组件20,以Android系统为例,本发明的应用程序可以通过在其安装配置文件Androidmanifest.xml文件中声明一个服务组件20,在该服务组件20被系统启动后,本应用程序在内存中发挥服务进程2的作用,可以通过该服务组件20与其他客户进程1实现通信交互。所述的客户进程1既可以是本应用程序的例如服务组件所在的进程,也可以是其他应用程序,特别是一些约定了协议方案的联合开发项目的应用程序运行时所表现的客户进程1。
服务组件20被启动后,客户进程1便可与之绑定。根据本发明的上述原理,客户进程1后续还要负责维护其与该服务组件之间的连接状态,以确定客户进程1与本应用程序之间的稳定连接。在客户进程1与服务进程2实现绑定的基础上,后续方能进一步完成接口调用相关的功能。
当本发明实现的相关方法所在应用程序在内存中运行后,在内存中将允许存在与本发明的相关方法相关联的两类进程,一类作为本应用程序的主体的服务进程2,另一类是属于本应用程序或者属于其他应用程序但可以配合协议和通信绑定关系与该服务进程2交互实现接口调用的客户进程1。
服务进程2与客户进程1之间建立了协议机制,两者预先遵守了相关开发协议,因此,在需要用到数据格式的场景中,包括以特定数据格式封装和解封装(解析),由于两者之间存在这种协议,所以可以互相识别对方封装的数据,从而正确还原对方传输过来的内容。也就是说,客户进程1与服务进程2之间,由一方封装的数据格式,可以被另一方依照预先协议而正确解析。服务进程2与客户进程1之间的协议,定义了两种格式,第一种是请求格式,第二种是结果格式。请求格式用于封装和解封装客户进程1发起的各种请求,涉及的数据主要是客户进程解析接口类注解后获得的接口标识、方法标识(及方法的运行参数、返回值类型等属性信息)、代理对象携带的对象标识等,结果格式则用于封装和解封装服务进程2执行调用产生的各种结果数据,主要是实例化实现类,生成实例对象后为其分配的对象标识、实例对象的内建方法被调用执行后的返回值等。请求格式通常由客户进程1封装而由服务进程2解析,结果数据通常由服务进程2封装而由客户进程1解析。为此,在下文将揭示,客户进程1和服务进程2均将构建专门的功能模块即解析模块13、23用于实施这些数据格式相关的的封装和解封装功能。
所述的服务进程2,负责接口的注册并在后续接收客户进程1的接口创建和调用请求,而为客户进程1提供接口创建和调用服务。服务进程2为了维持其服务功能,需要向系统注册一服务组件20,由此实现后台运行。服务进程2主要包括业务模块21、执行模块22、解析模块23、收发模块24以及所述的服务组件20,并通过启动后执行注册来维护一接口库25,其业务模块21负责接口实现类的所述的注册功能;其服务组件20主要提供给客户进程1进行绑定,以便确保服务进程2和客户进程1之间的通信;其收发模块24一方面负责接收客户进程1的各类请求,另一方面则负责向客户进程1反馈各种结果数据,通过其双向服务功能满足服务进程2与客户进程1之间的通信传输;其解析模块23主要用于解析出客户进程1以第一格式(请求格式)封装的各种请求,以及以第二格式(结果格式)封装各种结果数据以通过其收发模块24发送给客户进程1;其执行模块22主要负责客户进程1请求接口调用时相应实现类的创建及实现类的内建方法的执行功能。
所述的客户进程1,主要负责与服务进程2交互,服务于其业务模块11的接口创建和调用需求,维护接口创建和调用的请求过程。客户进程1在其启动后,便寻求与服务进程2的服务组件20的绑定,并且负责维护绑定后的连接状态。如果服务进程2未启动,客户进程1甚至可以负责调用运行服务进程2的服务组件20以方便自身后续调用相关接口。对应服务进程2,客户进程1除了其自身的业务模块11外,同理也构建有与服务进程2相应的收发模块14和解析模块13,其收发模块14一方面负责接收服务进程2的各类结果数据,另一方面则负责向服务进程2发出自身业务模块11发起的各种请求;其解析模块13主要用于从其业务模块11要调用的接口的编程注解中解析出接口标识并以第一格式将之封装成接口创建请求,以及进一步用于从其业务模块11要调用的实现类内建方法的编程注解中解析出属性信息并以第一格式封装成接口调用请求,以便后续由客户进程1的收发模块14将这些请求发送给服务进程2;解析模块13逆向则解析由所述服务进程2传来的各种结果数据,包括接口创建请求、接口调用请求对应的结果数据,以便反馈给客户进程1的业务模块11。
需要说明的是,在Android及其兼容系统中,自身存在着IPC机制,这一机制允许接口跨进程交互。开发时,定义一个Binder类去实现利用AIDL预先定义的接口类,而在实现类中实现功能逻辑。服务进程2的服务组件20运行后,客户进程1与之连接,在onServiceConnected方法中获取该Binder类的代理对象,通过代理对象调用Binder类的接口方法来获取Binder类提供的功能。同时,客户进程1负责维护其自身与服务组件20之间的连接状态。本发明的实现,也是基于底层的这一机制,而通过本发明的相关步骤来实现对这一机制的有效利用,对此本领域技术人员应可理解。
本发明所述的接口库25,可以通过构造一个接口管理模块来执行服务进程2对所述接口库25的访问。当然,这是逻辑上的要求,实际上,所述接口管理模块的功能一般同样可以由服务进程在其各部分代码中实现,其实现方式是灵活的。接口管理模块所维护的接口库25,在逻辑上主要由服务进程2维护,主要提供给服务进程根据其编程注解和运行过程注册和查询相关接口注册信息。
如前所述,所述的接口库25,主要用于记录接口相关的相关数据,其表现形式可由本领域技术人员灵活实现。接口库25主要用于存储服务进程2注册形成的接口注册信息,以及在服务进程2与客户进程1交互过程中产生的实例对象相关的接口注册信息。例如,接口注册信息可以构造为下列表格:类表、方法表、实例表。
所述的类表,用于存储表达类表信息。类表信息用于表征接口的接口标识与实现类之间对应关系,接口标识在编程阶段便已被注解在实现类中,在运行后的注册阶段被添加进来。通过这种对应关系,服务进程2可以依据解析出的接口标识查询确定相关的实现类,它们之间相互对应,可以唯一性确定。
所述的方法表,用于存储表达方法表信息。方法表信息用于表征各个内建方法的调用运行信息。所述的调用运行信息,则是服务进程2在注册实现类时,从实现类的各个内建方法中,解析出的预定义于编程注解中的相关信息,包括该内建方法的方法标识、该方法运行所需的运行参数以及该方法所定义的返回值类型等,其中返回值类型非必须,但它的缺失不便于服务进程约束内建方法的返回值类型,容易引发进程出错。本领域技术人员可以理解,当客户进程1解析出业务模块11指定的某实现类的内建方法的编程注解中的调用运行信息之后,便可将这些调用运行信息传输给服务进程2,即可由服务进程2执行相关的调用。服务进程2在解析出客户进程1传输过来的调用运行信息之后,获得其中的方法标识,便可依据该方法标识查询接口库25而确定具体的实例对象中的内建方法以便执行之。
所述的实例表,用于存储表达实例表信息。实例表信息用于表征正在为客户进程1提供服务的实现类实例对象相关的信息,具体而言,可以为每个实例对象赋予一个相应的对象标识,同时使代理对象也携带该标识,这样,进一步将实例对象与所述代理对象建立起关联,通过该对象标识也可确定该实例对象从而加以调用。当然,也可赋予其他直接或间接的标识,甚至进一步关联起相关实现类的接口标识,总之,只要足以确保后续通过代理对象对实例对象的唯一性对应的调用即可。相对而言,实例表中的信息主要是服务进程2运行过程中进行维护的。诸如此类,本领域技术人员应可灵活实现。
接口注册信息是指用于实现本方法的接口创建和调用相关的信息,既包括由服务进程2在其启动时通过解析实现类的编程注解而获得的各类信息,也包括服务进程2运行过程中维护的实例信息。服务进程2的业务模块21将提供服务的API接口的实现类,调用注册服务类的方法,进行注册,注册服务类的方法内部调用接口管理模块接收到注册请求后,获取注册的实现类相关信息,解析类是否根据协议使用相关注解标注了实现类的接口标识,在其存在接口标识时将其存储为接口注册信息以供调用。继而,解析该类的相关内建方法是否使用了本发明的协议的注解,在其使用了规范的注解后将该内建方法相关的方法标识、运行参数、返回值类型等调用运行信息作为接口注册信息的一部分存储到所述的方法表中。服务进程2通过这一过程完成了接口的注册,形成所述的接口注册信息的基础数据,为后续跨进程接口调用提供了关键基础。
在接口注册信息的基础上,客户进程1在实际调用实例对象的内建方法时,是通过该实例对象的代理对象来实现的,因此,客户进程1的代理对象需要调用客户进程1的解析机制,解析出接口类中以编程注解的方式记载的该内建方法对应的调用运行信息,具体包括方法标识、运行参数以及返回值类型等。代理对象将其自身所携带的对象标识连同欲调用的内建方法的调用运行信息一道构成运行该内建方法所需的属性信息,调用解析机制封装后提供给服务进程2。服务进程逆向解析该属性信息后即可利用之,这些属性信息确保该实例对象的内建方法能被服务进程2有效调用执行。
此处所称的代理对象,是利用Java代理技术实现的,本领域技术人员通过Java代理技术可以将服务进程2响应于接口创建请求而创建的相应实现类的所述实例对象在客户进程处映射出相应的代理对象,代理对象是因接口创建请求的响应而产生的,服务进程2在实例对象产生后分配相应的对象标识,将该对象标识提供给客户进程生成代理对象,代理对象也便携带该对象标识。
对应于接口创建请求的环节,客户进程1的业务模块11发起对某接口类的请求服务,客户进程1以一请求服务的方法响应之。该请求服务的方法利用解析机制从该接口类的编程注解中解析出其中的接口标识,将之封装成请求格式数据,传输给服务进程2。服务进程2收到该请求格式数据后进行解析,并利用解析出的接口标识查询接口库25中的接口注册信息,具体是查询其中的类表信息,确定相应的实现类。服务进程继而实例化创建该实现类的实例对象,同时为该对象生成唯一的对象标识,将对象标识与该对象的对应关系存储为实例表信息,由此后续客户进程1产生的代理对象也自然应携带该对象标识,以便后续代理对象只要将其对象标识传递给服务进程2,服务进程2即可据之唯一性确定相应的实例对象。而客户进程1产生代理对象后,便将该代理对象返回给客户进程1的业务模块11做进一步的方法调用。
对应于接口调用请求的环节,客户进程1的业务模块11拿到与其接口创建请求相对应的代理对象后,进一步发起调用代理对象所指向的实例对象的相关内建方法的接口调用请求。客户进程1响应于该接口调用请求,调用解析机制获得内建方法相关的方法标识、运行参数、返回值类型以及对象标识,以这些信息构成属性信息,进行格式封装后发送给服务进程2。服务进程2调用解析机制解析出属性信息中的各项具体信息,服务进程于是调用执行该内建方法,根据其中的对象标识可以确定要调用的实例对象,根据其中的方法标识可以确定具体的内建方法,然后将相关的运行参数传递给该内建方法,作为其传递参数进行运行,在该内建方法运行后获取符合所述返回值类型的结果。继而,服务进程2便可将相关的结果数据进行第二格式的封装后,返回给客户进程1。客户进程1中的代理对象获得到数据调用解析机制对应解析后即返回给客户进程1的业务模块11,完成对其接口调用请求的响应。
通常,当客户进程1与服务进程2的服务组件20解除绑定后,还可以执行一个清理内存的步骤,通过执行该步骤,由服务进程2(具体可以是一个接口管理模块)将接口库25的实例表中的相关对象清理掉。另一方面,出于程序保活的目的,客户进程1与服务进程2之间也可依照预设规则,如定时、根据触发条件等,单向或者相互地启动或者唤醒对方,使双方均能够存活于内存中,避免被操作系统或第三方安全软件的内存清理程序清理掉。
由以上对本发明的原理的揭示可知,通过客户进程1与服务进程2之间的协议及为其建构的解析机制,将AIDL定义跨进程接口的步骤实现复用,可以大幅降低涉及跨进程接口开发的重复开发率,为跨进程通信的高阶应用提供坚实的技术基础。
体现在简化开发过程提升开发效率方面,在运用了本发明的原理的应用程序的开发过程中,如果需要扩展跨进程通信接口,只需创建接口类及其对应的实现类即可,为接口类及其对应的实现类重复做底层通信开发。这一变化体现到应用程序的不同应用版本中时,可以知晓,更新后的新版本应用程序,其服务进程2的业务模块21向接口库25重新注册所有实现类后,接口库25中的接口总数会对应出现增加或减少。如开发人员扩展增加了接口,对应增加了接口类及其实现类,接口库25中的接口总数便相应增加,如果开发人员删除了接口,对应减少了接口类及其实现类,那么,接口库25中的接口总数也就相应减少。总之,无需再利用AIDL做更多重复开发,也体现为避免产生一些不必要的AIDL定义文件。
在理解上述本发明的实现原理的基础上,以下将从本发明实现原理的不同角度考察本发明的各种表现。
请结合图2,在由本发明的原理所表现的应用程序层面,体现为本发明的一种典型实施例。该实施例中,本发明的跨进程接口调用实现方法,以计算机程序的形式实现,而提供本发明的应用程序,该应用程序在操作系统中安装运行后,执行包括如下的步骤:
步骤S11,应用程序中,跨进程通信的服务进程与客户进程以编程注解的方式共同协议分别定义同一接口的实现类和接口类,约定该接口的接口标识。
如前所述,在本发明的应用程序的开发阶段,开发人员将预先运用本发明的协议机制,约定客户进程1与服务进程2之间的各项接口和数据协议。以Android为例,采用Java语言进行应用程序开发,Java语言支持对接口进行编程注解,借助这一功能,可以将一些协议机制融入其中。
本发明中,跨进程通信的服务进程2和客户进程1之间,遵守彼此约定的协议,客户进程1在其定义接口类时,便为接口类分配注解约定的接口标识,为接口类的各个内建方法分配注解约定的方法标识;同理,服务进程2在其定义实现类时,便为实现类分配注解约定的接口标识,为接口类的各个内建方法分配注解约定的方法标识。由于彼此遵守协议,相对应的接口类和实现类之间,对于同一个接口,相应的接口类和实现类均注解相同的接口标识,对于同一内建方法,相应中的接口类内建方法和实现类内建方法上,均注解相同的方法标识。显然,客户进程1和服务进程2通过这种协议机制,约定相同的接口标识和方法标识,便实现了接口类和实现类之间的互相对应。
步骤S12,在应用程序安装运行后,服务进程将其实现类中注解的接口注册信息注册到接口库,允许客户进程与自身基于操作系统进程通信机制进行绑定通信。
如前所述,本发明的应用程序在其被安装后其服务进程2运行之后,便查询其自身的各个实现类,将各个实现类预先进行了编程注解的相关信息解析出,包括各个实现类的接口标识、各个实现类的内建方法的包含方法标识、运行参数、返回值类型在内的调用运行信息等。将这些信息作为接口注册信息注册添加到接口库25中,具体例如将方法标识与实现类的对应关系存储到接口库25中的类表中,将调用运行信息注册添加到接口库的方法表中。
同时,服务进程2启动时,由于其自身声明了服务组件,因此也将被操作系统视为后台运行程序,使其常驻后台,可供客户进程1与之绑定通信,客户进程1启动后依据本发明架构实现的需要与其保持绑定和连接。
步骤S13,当客户进程创建某个接口时,解析该接口的注解获得接口标识,驱动服务进程查询接口库中的接口注册信息确定与该接口标识相应的实现类,实例化该实现类生成实例对象,返回该实例对象的对象标识。
当客户进程需要使用某个接口时,在客户进程1内部,其业务模块11运行到定义或者调用相关接口类的指令时,会发生接口调用,在此处业务模块11首先需要系统为之创建相关接口。客户进程1于是根据预协议的解析机制,也即调用其解析模块13,根据欲使用的接口的接口类中的编程注解解析出其中的接口标识,然后采用第一格式对接口标识进行封装,封装成请求格式数据,经其收发模块14发送给服务进程2。
因此,本应用程序的服务进程2的收发模块24会接收到该请求并交给解析模块23进行解析,解析模块23得以解封装该请求格式数据获得接口标识,然后调用其执行模块22,执行模块22依据所述接口标识从接口库25的类表信息中确定对应的实现类后,执行实例化以创建该实现类的实例对象。如前所述,本应用程序已经预先向接口库25中注册了与该实现类相关的接口注册信息,依据实现类与接口标识之间的对应关系,执行模块22可以确定唯一对应的实现类,避免错误调用实现类。
实例对象被创建后,被赋予具有唯一性特征的对象标识,对象标识与实例对象的这种一一对应关系,也会被服务进程2更新到接口库25的实例表中,并且该对象标识也会被作为结果数据,经由服务进程2的解析模块23以第二格式封装成结果格式数据,然后经收发模块24反馈给客户进程1。
由此,客户进程完成驱动服务进程查询接口库中的接口注册信息确定与该接口标识相应的实现类,实例化该实现类生成实例对象,返回该实例对象的对象标识的全过程。
客户进程1的收发模块14收到该结果格式数据后,交给客户进程1的解析模块13解析出对象标识,然后利用Java代理技术创建所述实例对象的代理对象,该代理对象自然携带该对象标识。由此,当客户进程1的业务模块11要通过代理对象发起对实例对象的调用时,代理对象便可凭其自身的对象标识与服务进程2沟通,使得服务进程2能够正确调用相关实例对象。
如前所述,实例对象被创建后,其相关信息被存储到接口库25的实例表中作为实例表信息而提供服务。如果客户进程1与服务进程2的服务组件20解除绑定,这些实例表信息便会成为残存的冗余信息,因此,可以设置一个并行的步骤,来实施对这些冗余信息的清理,具体是在客户进程1与服务进程2解除绑定后,删除接口库25中的这些接口注册信息中的冗余信息,通常是实例表中的相应数据记录。
在成功创造所述实例对象的基础上,服务进程2便可进一步为客户进程1提供对该实例对象的内建方法的调用服务。
步骤S14,当客户进程调用其已创建的接口的方法时,通过调用携带所述对象标识的代理对象,间接调用服务进程中相应的实现类对象,执行其中的内建方法,获取返回的结果数据。
客户进程1成功建立所述实例对象的代理对象后,即完成客户进程1欲调用的接口的创建,客户进程1便将代理对象返回给其业务模块11做进一步的调用。客户进程1的业务模块11继而将通过该代理对象发起对所述实例对象的某个内建方法的接口调用请求。
参照前述关于本发明的原理的揭示,一旦业务模块11发起这样的请求,代理对象便可结合调用解析机制,从接口对应的接口类的方法的编程注解中,解析出相关调用运行信息,将其自身携带的对象标识、欲调用的内建方法的方法标识、业务模块11传递的该内建方法的运行参数(数据),以及该内建方法的返回值类型等构成属性信息,调用解析模块13封装成请求格式的接口调用请求后,经收发模块14发送给所述的服务进程2。
服务进程2的收发模块24收到代理对象传输的接口调用请求,调用解析模块23解析出其中的属性信息后,调用执行模块22执行对内建方法的调用。执行模块22查询接口库25,依据属性信息中的对象标识可以从实例表中确定对应的实例对象,而依据所述的方法标识则可以从方法表中确定对应的实例对象的内建方法,然后将属性信息中的运行参数数据传参给目标实例对象中的目标内建方法,调用执行之,使目标内建方法返回符合所述返回值类型规范的结果数据。
运行该内建方法获得的结果数据被服务进程2的解析模块23封装成结果格式后经收发模块24回传给客户进程1的代理对象,代理对象则将之逆向解析出结果数据后,返回给业务模块11,业务模块11于是获得了调用接口类对应的实现类所生成的实例对象的内建方法的调用运行结果,完成接口调用全过程。
在某些实施例中,所述返回值类型不必作为属性信息加入,一方面可以考虑不必在接口库25的方法表信息中记录该项,另一方面则不必在客户进程1、服务进程2交互过程中使用该项,本领域技术人员应当知晓此一变通。
在某些实施例中,如前所述,本应用程序可以独立构建一接口管理模块来集中管理对所述接口库25的访问,向需要访问接口库25的模块提供调用接口供调用执行即可,如此可提升内存效率。
回顾本实施例的各步骤执行过程,可以总结出如下技术手段:
关于服务进程2在运行过程中对接口库25中实例表的维护:服务进程2在实例化接口创建请求中指向的实现类时,在实例类被实例化形成实例对象时,为该实现类的实例对象分配对象标识,将对象标识与实例对象的对应关系存储到接口库25的接口注册信息中,具体是存储到其中的实例表,然后将该对象标识提供给客户进程1创建代理对象,而当代理对象发生代理调用时,也即客户进程1需要调用具体内建方法时,由代理对象提供该对象标识给服务进程2,以供服务进2程查询接口库的接口注册信息而确定要调用的具体实例对象。
关于编程注解的协议关系:应用程序中服务进程2的接口类和客户进程1的实现类均协议定义了接口的内建方法的方法标识,这个方法标识是开发人员在编程阶段便已经编排好的协议产物,该方法标识在应用程序运行后被服务进程2作为接口注册信息注册到所述接口库25,且在客户进程1通过代理对象调用该内建方法时,被客户进程1传输给服务进程2,以供服务进程2依据该对象标识查询接口库25中的接口注册信息,具体是查询其中的实例表,而确定相应的实例对象中的内建方法。
关于数据封装的关系:客户进程1向服务进程2提供的接口标识被以第一格式封装,第一格式也即封装成本发明所称的请求格式,而在服务进程2按照相应的格式协议予以解析提取;服务进程2向客户进程1提供的方法标识和对象标识被以第二格式封装,第二格式也即本发明所称的数据格式,而客户进程按照相应的格式协议予以解析提取。
本典型实施例的实施,简化了通信接口的开发步骤,在此基础上扩展出跨进程通信更为丰富的功能和效果。
进一步将这一典型实施例所体现的应用程序安装于移动终端、平板之类的移动设备后,可体现为本发明的另一实施例,该实施例体现为本发明提供的一种终端设备,包括中央处理器和存储器,所述中央处理器用于调用运行存储于所述存储器中的计算机程序以执行如前所述的跨进程接口调用实现方法的各个具体步骤。
请结合图3,在由本发明的原理所表现的进程层面,体现为本发明的另一种典型实施例。在该实施例中,本发明的一种跨进程接口调用执行方法,包括如下步骤:
步骤S21,客户进程根据其业务模块中的接口类,调用其解析模块解析出该接口类预先注解的接口标识,将其封装成请求格式,向服务进程发起接口创建请求。
如本发明的原理及其他实施例所述,客户进程1和服务进程2已按照本发明的原理实现了其各自内部的各个功能模块;且在客户进程1一侧,可以从接口类的运用了Java注解技术的编程注解中解析出相关的接口标识和方法标识。接口库25也已按照本发明的原理被服务进程预先注册了各实现类的接口注册信息,在接口注册信息中存在接口标识与实现类之间的关联关系,方便通过接口标识确定相应的实现类;在接口注册信息中也存在方法标识与其实现类之间的关系,方便通过方法标识确定相应的实现类内建方法。
客户进程1的业务模块11发起针对某个特定接口类的创建,客户进程1根据对该接口类的创建请求,由其解析模块13解析该接口类的编程注解,解析获得与该接口类相对应的接口标识。然后,解析模块13遵守与服务进程2的协议,将接口标识封装为请求格式的接口创建请求,经客户进程1的收发模块14发送给服务进程2。
步骤S22,服务进程2接收该接口创建请求,解析该请求,查询接口库确定相应的实现类后执行该实现类的实例化创建操作,产生相应的实例对象。
服务进程2经其收发模块24接收到该接口创建请求后,由其解析模块23解析出其中的接口标识,然后,由其执行模块22向接口库25查询确定与该接口标识相对应的实现类之后,执行创建该实现类的实例对象的动作。
步骤S23,服务进程将实例对象及其对象标识的对应关系存储于接口库中,将该对象标识封装成结果数据返回给客户进程。
服务进程2创建该实现对象时,会为该实例对象分配一对象标识,该对象标识与接口标识和方法标识同理都具有唯一特征性,这样,对象标识与实例对象之间便具有一一对应性。服务进程将实例对象与其对象标识的这种对应关系作为接口注册信息的动态生成部分存储到所述的接口库25中,以便后续发生代理调用时供执行模块22查询使用。
服务进程2完成上述动作之后,便调用解析模块23将该实例对象的对象标识按照预协议的第二格式封装成结果数据,通过其收发模块24返回给客户进程1。
步骤S24,客户进程1接收所述结果数据,解析出其中的对象标识形成携带该对象标识的代理对象,将之返回给客户进程1的业务模块11,以供所述业务模块11通过调用所述代理对象而实现调用所述实例对象。
客户进程1经其收发模块14接收到所述的结果数据之后,便交由其解析模块13解析出其中的对象标识,Java代理调用的结果会构建出该对象标识所指向的实例对象的代理对象,该代理对象自然携带该对象标识。客户进程1进而将该代理对象返回给其业务模块11做下一步的方法调用,业务模块11通过调用所述的代理对象,便可实现对所述实例对象的调用。
请结合图4,除遵照本领域技术人员可以理解的方式,实现业务模块11利用代理对象实现对其相应的实例对象的调用外,在进一步优化的实施例中,客户进程1可以按照如下具体步骤与服务进程2配合调用代理对象,进一步实现对其所指向的实例对象的内建方法的调用:
步骤S241,客户进程的业务模块发起所述接口类中方法的接口调用请求。
客户进程1的业务模块11需要调用其已经获得对应的代理对象的接口类的内建方法时,便发起所述的接口调用请求,通过调用所述的代理对象,来期待返回的结果,该结果的获取,由代理对象来负责中间过程的执行。
步骤S242,所述代理对象代理调用服务进程中的实例对象的相应的内建方法,获得该内建方法运行后的结果数据。本步骤按照如下具体步骤执行:
步骤S2421,所述代理对象依据注解解析出该方法的方法标识,连同代理对象自身的对象标识及业务模块传入的运行参数形成至少部分属性信息,将所述属性信息封装成请求格式发送给服务进程。
如前所述,代理对象可以调用解析机制,依据客户进程1要调用的接口的接口类定义中的注解,从中解析出要调用的方法的调用运行信息,而其自由又持有表征其身份的对象标识,因此,可以构造出提供给服务进程2进行方法调用的属性信息。该属性信息包括代理对象自身携带的对象标识、要调用的内建方法的方法标识、业务模块11传递的该内建方法的运行参数(数据),以及该内建方法的返回值类型等。进一步,代理对象调用解析模块13将这些属性信息封装成请求格式的接口调用请求后,经收发模块14发送给服务进程2。
步骤S2422,服务进程接收该属性信息后,解析出该属性信息中的对象标识、方法标识以及运行参数,依据对象标识确定实例对象,依据方法标识查询接口库确定实例对象中的内建方法,以所述运行参数为传入参数运行该方法;
服务进程2的收发模块24收到代理对象传输的接口调用请求,调用解析模块23解析出其中的属性信息获得对象标识、方法标识、运行参数以及返回值类型后,调用执行模块22执行对目标方法的调用。执行模块22查询接口库25,依据属性信息中的对象标识可以从实例表中确定对应的实例对象,而依据所述的方法标识则可以从方法表中确定对应的实例对象的内建方法,然后将属性信息中的运行参数数据传参给目标实例对象中的目标内建方法,调用执行之,使目标方法返回符合所述返回值类型规范的结果数据。
步骤S2423,服务进程将该方法执行后的结果数据封装成结果格式后回传给代理对象。
服务进程2调用运行目标方法获得的结果数据被服务进程2的解析模块23封装成结果格式后,经由服务进程2的收发模块24回传给客户进程1的代理对象,以供客户进程1内部传递给其业务模块11使用。
步骤S243,所述代理对象将所述结果数据返回给所述的业务模块。
客户进程1通过其收发模块14接收到服务进程2返回给代理对象的结果数据后,由代理对象调用解析模块13,将之逆向解析出内建方法执行后产生的结果数据,把解析出的结果数据直接返回给业务模块11,业务模块11于是获得了调用接口类对应的实现类所生成的实例对象的内建方法的调用运行结果,完成接口调用全过程。
在这一步骤中,代理对象可以利用返回值类型对结果数据进行返回值校验,同理,在某些实施例中,所述返回值类型不必作为属性信息加入,一方面可以考虑不必在接口库25的方法表信息中记录该项,另一方面则不必在客户进程1、服务进程2交互过程中使用该项,本领域技术人员应当知晓此一变通。
同理,服务进程2负责向系统注册一服务组件,以便常驻后台,供客户进程1与之进行绑定通信并维持双方连接,在客户进程1与服务进程2解除绑定后,可由服务进程2清理掉接口库25中因客户进程1调用产生的实例对象相关的接口注册信息。由于这一后台机制,服务进程可以通过定时或者利用某些事件来启动所述客户进程,进一步达致进程保活的效果。
服从于本发明的实现原理,本实施例的客户进程1与服务进程2可以分属不同应用程序而在运行时分属不同虚拟机,也可存在于同一应用程序中,均不影响本实施例的功能实现。
本典型实施例的实现,提供了跨进程通信的底层实现方案,使得本发明的原理能够其底层应用,解决了跨进程通信存在的技术障碍。
同理,进一步将这一典型实施例所体现的应用程序安装于移动终端、平板之类的移动设备后,可体现为本发明的另一实施例,该实施例体现为本发明提供的一种终端设备,包括中央处理器和存储器,所述中央处理器用于调用运行存储于所述存储器中的计算机程序以执行如前所述的跨进程接口调用执行方法的步骤。
综上所述,本发明简化了应用程序开发过程中涉及通信接口实现的开发步骤,为联合开发的程序项目提供了更为简便高效的跨进程通信解决方案。
本技术领域技术人员可以理解,本发明包括涉及用于执行本发明中所述操作、方法中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其存储器之内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随即存储器)、EPROM(ErasableProgrammable Read-Only Memory,可擦写可编程只读存储器)、EEPROM(ElectricallyErasable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (20)
1.一种跨进程接口调用实现方法,其特征在于,该方法包括如下步骤:
应用程序中,跨进程通信的服务进程与客户进程以编程注解的方式共同协议分别定义同一接口的实现类和接口类,约定该接口的接口标识;
在应用程序安装运行后,服务进程将其实现类中注解的接口注册信息注册到接口库,允许客户进程与自身基于操作系统进程通信机制进行绑定通信;
当客户进程创建某个接口时,解析该接口的注解获得接口标识,驱动服务进程查询接口库中的接口注册信息确定与该接口标识相应的实现类,实例化该实现类生成实例对象,返回该实例对象的对象标识;
当客户进程调用其已创建的接口的方法时,通过调用携带所述对象标识的代理对象,间接调用服务进程中相应的实现类对象,执行其中的内建方法,获取返回的结果数据。
2.根据权利要求1所述的方法,其特征在于:
服务进程在实例化实现类时,为该实现类的实例对象分配对象标识,将对象标识与实例对象的对应关系存储到接口库的接口注册信息中,将该对象标识提供给客户进程创建代理对象,代理对象发生代理调用时,提供该对象标识给服务进程,以供服务进程查询接口库的接口注册信息而确定要调用的具体实例对象。
3.根据权利要求1所述的方法,其特征在于:
应用程序中服务进程的接口类和客户进程实现类均协议定义了接口的内建方法的方法标识,该方法标识在应用程序运行后被作为接口注册信息注册到所述接口库,且在客户进程通过代理对象调用该内建方法时,被客户进程传输给服务进程,以供服务进程查询接口库中的接口注册信息而确定相应的实例对象中的内建方法。
4.根据权利要求1至3中任意一项所述的方法,其特征在于:
客户进程向服务进程提供的接口标识被以第一格式封装,而在服务进程按照相应的格式协议予以解析提取;服务进程向客户进程提供的方法标识和对象标识被以第二格式封装,而客户进程按照相应的格式协议予以解析提取。
5.根据权利要求1所述的方法,其特征在于:所述的注解按照Java注解技术实现,所述代理对象按照Java代理技术实现。
6.根据权利要求1所述的方法,其特征在于:服务进程负责向操作系统注册服务组件,供客户进程与之绑定通信,在其彼此解除绑定后,服务进程删除因客户进程产生的所述接口库中的接口注册信息。
7.一种跨进程接口调用执行方法,其特征在于,该方法包括如下步骤:
客户进程根据其业务模块中的接口类,调用其解析模块解析出该接口类预先注解的接口标识,将其封装成请求格式,向服务进程发起接口创建请求;
服务进程接收该接口创建请求,解析该请求获得接口标识,查询接口库确定相应的实现类后执行该实现类的实例化创建操作,产生相应的实例对象;
服务进程将实例对象及其对象标识的对应关系存储于接口库中,将该对象标识封装成结果数据返回给客户进程;
客户进程接收所述结果数据,解析出其中的对象标识形成携带该对象标识的代理对象,将之返回给客户进程的业务模块,以供所述业务模块通过调用所述代理对象而实现调用所述实例对象。
8.根据权利要求7所述的方法,其特征在于,客户进程响应于其业务模块的需求通过调用所述代理对象而实现调用所述实例对象的过程,包括如下具体步骤:
客户进程的业务模块发起所述接口类中方法的接口调用请求;
所述代理对象代理调用服务进程中的实例对象的相应的内建方法,获得该内建方法运行后的结果数据;
所述代理对象将所述结果数据返回给所述的业务模块。
9.根据权利要求8所述的方法,其特征在于,所述代理对象代理调用服务进程中的实例对象的相应的内建方法,获得该内建方法运行后的结果数据的过程,包括如下具体步骤:
所述代理对象依据注解解析出该方法的方法标识,连同代理对象自身的对象标识及业务模块传入的运行参数形成至少部分属性信息,将所述属性信息封装成请求格式发送给服务进程;
服务进程接收该属性信息后,解析出该属性信息中的对象标识、方法标识以及运行参数,依据对象标识确定实例对象,依据方法标识查询接口库确定实例对象中的内建方法,以所述运行参数为传入参数运行该方法;
服务进程将该方法执行后的结果数据封装成结果格式后回传给代理对象。
10.根据权利要求9所述的方法,其特征在于:
所述服务进程由其业务模块负责预先向接口库添加其实现类的接口注册信息,在接口注册信息中实现接口标识与实现类之间的关联,以通过接口标识确定相应的实现类。
11.根据权利要求9所述的方法,其特征在于:
所述服务进程由其业务模块在执行实例化后向接口库添加其实例对象的接口注册信息,在接口注册信息中实现实例对象与其对象标识之间的关联,以通过对象标识确定相应的实例对象。
12.根据权利要求9所述的方法,其特征在于:
所述服务进程由其业务模块负责预先向接口库添加其实现类的接口注册信息,在接口注册信息中实现方法标识与相应的实现类方法之间的关联,以通过方法标识确定相应的实例对象中对应的内建方法。
13.根据权利要求7至12任意一项所述的方法,其特征在于:所述客户进程与服务进程在其彼此交互过程中,分别采用预协议的请求格式封装和解析所述的接口标识与属性信息,分别采用预协议的结果格式解析和封装所述的对象标识与实例对象内建方法执行结果。
14.根据权利要求13所述的方法,其特征在于,所述的请求格式与所述的结果格式,均遵守预先规范的协议,使得服务进程与客户进程两者,一方封装的格式可被另一方正确解析。
15.根据权利要求7至12任意一项所述的方法,其特征在于,所述代理对象基于Java代理技术实现,其被构建为服务进程中的关联于所述接口标识的实现类的实例对象的代理;所述接口标识和方法标识均采用Java注解技术实现,在服务进程和客户进程的源代码中得以预先体现。
16.根据权利要求7至12中任意一项所述的方法,其特征在于,该方法还包括如下步骤:
所述客户进程在其运行后,先与所述服务进程预注册且在运行的服务组件实施绑定,以实现客户进程与服务进程的后续交互。
17.根据权利要求16所述的方法,其特征在于,在所述客户进程与服务进程解除绑定后,服务进程从接口库中删除因该客户进程产生的实例对象相关的信息。
18.根据权利要求7至12中任意一项所述的方法,其特征在于,所述服务进程适于按照预设条件启动所述客户进程。
19.根据权利要求7至12任意一项所述的方法,其特征在于,一个所述的服务进程并行地与一个或多个所述的客户进程实施本方法的交互,和/或,至少一个所述客户进程与服务进程运行在不同的虚拟机中。
20.一种终端设备,包括中央处理器和存储器,其特征在于:所述中央处理器用于调用运行存储于所述存储器中的计算机程序以执行如权利要求1至6中任意一项所述的跨进程接口调用实现方法的步骤,或执行如权利要求7至19中任意一项所述的跨进程接口调用执行方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010212437.7A CN111400070B (zh) | 2020-03-24 | 2020-03-24 | 终端设备及其跨进程接口调用实现和执行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010212437.7A CN111400070B (zh) | 2020-03-24 | 2020-03-24 | 终端设备及其跨进程接口调用实现和执行方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111400070A true CN111400070A (zh) | 2020-07-10 |
CN111400070B CN111400070B (zh) | 2023-05-19 |
Family
ID=71431206
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010212437.7A Active CN111400070B (zh) | 2020-03-24 | 2020-03-24 | 终端设备及其跨进程接口调用实现和执行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400070B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111880866A (zh) * | 2020-07-30 | 2020-11-03 | 广州华多网络科技有限公司 | 跨进程回调执行方法、装置、设备及存储介质 |
CN112090079A (zh) * | 2020-08-27 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 游戏任务运行方法、装置、计算机设备和存储介质 |
CN112256249A (zh) * | 2020-10-15 | 2021-01-22 | 深圳Tcl新技术有限公司 | 扩展Android系统功能的方法、设备及计算机存储介质 |
CN112398870A (zh) * | 2020-11-30 | 2021-02-23 | 深圳市六度人和科技有限公司 | 跨平台协议生成方法、装置、系统、设备及存储介质 |
CN112764946A (zh) * | 2021-01-08 | 2021-05-07 | 重庆创通联智物联网有限公司 | 跨进程数据传输方法、装置、电子设备和存储介质 |
CN113032393A (zh) * | 2021-01-26 | 2021-06-25 | 苏州帝博信息技术有限公司 | 一种绑定关联对象的方法和装置 |
WO2021190469A1 (zh) * | 2020-03-24 | 2021-09-30 | 广州华多网络科技有限公司 | 终端设备及其应用程序接口调用控制方法 |
CN113590213A (zh) * | 2021-06-24 | 2021-11-02 | 深圳开源互联网安全技术有限公司 | 组件维护方法、电子设备及存储介质 |
WO2022012382A1 (en) * | 2020-07-14 | 2022-01-20 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | Method for enabling interaction between binder application and http application and related products |
CN117056317A (zh) * | 2023-10-11 | 2023-11-14 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5802367A (en) * | 1995-07-07 | 1998-09-01 | Microsoft Corporation | Method and system for transparently executing code using a surrogate process |
CN109729149A (zh) * | 2018-12-03 | 2019-05-07 | 国云科技股份有限公司 | 一种基于注解的微服务框架实现方法 |
CN109933443A (zh) * | 2019-03-07 | 2019-06-25 | 腾讯科技(深圳)有限公司 | 进程间通信方法、装置、计算机设备及可读存储介质 |
CN110381135A (zh) * | 2019-07-18 | 2019-10-25 | 北京奇艺世纪科技有限公司 | 接口创建方法、服务请求方法、装置、计算机设备和介质 |
-
2020
- 2020-03-24 CN CN202010212437.7A patent/CN111400070B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5802367A (en) * | 1995-07-07 | 1998-09-01 | Microsoft Corporation | Method and system for transparently executing code using a surrogate process |
CN109729149A (zh) * | 2018-12-03 | 2019-05-07 | 国云科技股份有限公司 | 一种基于注解的微服务框架实现方法 |
CN109933443A (zh) * | 2019-03-07 | 2019-06-25 | 腾讯科技(深圳)有限公司 | 进程间通信方法、装置、计算机设备及可读存储介质 |
CN110381135A (zh) * | 2019-07-18 | 2019-10-25 | 北京奇艺世纪科技有限公司 | 接口创建方法、服务请求方法、装置、计算机设备和介质 |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021190469A1 (zh) * | 2020-03-24 | 2021-09-30 | 广州华多网络科技有限公司 | 终端设备及其应用程序接口调用控制方法 |
WO2022012382A1 (en) * | 2020-07-14 | 2022-01-20 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | Method for enabling interaction between binder application and http application and related products |
CN111880866A (zh) * | 2020-07-30 | 2020-11-03 | 广州华多网络科技有限公司 | 跨进程回调执行方法、装置、设备及存储介质 |
CN111880866B (zh) * | 2020-07-30 | 2024-03-12 | 广州方硅信息技术有限公司 | 跨进程回调执行方法、装置、设备及存储介质 |
CN112090079A (zh) * | 2020-08-27 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 游戏任务运行方法、装置、计算机设备和存储介质 |
CN112256249A (zh) * | 2020-10-15 | 2021-01-22 | 深圳Tcl新技术有限公司 | 扩展Android系统功能的方法、设备及计算机存储介质 |
CN112398870A (zh) * | 2020-11-30 | 2021-02-23 | 深圳市六度人和科技有限公司 | 跨平台协议生成方法、装置、系统、设备及存储介质 |
CN112398870B (zh) * | 2020-11-30 | 2022-09-13 | 深圳市六度人和科技有限公司 | 跨平台协议生成方法、装置、系统、设备及存储介质 |
CN112764946A (zh) * | 2021-01-08 | 2021-05-07 | 重庆创通联智物联网有限公司 | 跨进程数据传输方法、装置、电子设备和存储介质 |
CN112764946B (zh) * | 2021-01-08 | 2024-02-02 | 重庆创通联智物联网有限公司 | 跨进程数据传输方法、装置、电子设备和存储介质 |
CN113032393B (zh) * | 2021-01-26 | 2024-01-02 | 苏州帝博信息技术有限公司 | 一种绑定关联对象的方法和装置 |
CN113032393A (zh) * | 2021-01-26 | 2021-06-25 | 苏州帝博信息技术有限公司 | 一种绑定关联对象的方法和装置 |
CN113590213A (zh) * | 2021-06-24 | 2021-11-02 | 深圳开源互联网安全技术有限公司 | 组件维护方法、电子设备及存储介质 |
CN113590213B (zh) * | 2021-06-24 | 2023-04-25 | 深圳开源互联网安全技术有限公司 | 组件维护方法、电子设备及存储介质 |
CN117056317A (zh) * | 2023-10-11 | 2023-11-14 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
CN117056317B (zh) * | 2023-10-11 | 2024-01-26 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111400070B (zh) | 2023-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111338828B (zh) | 终端设备及其应用程序接口调用控制方法 | |
CN111400070B (zh) | 终端设备及其跨进程接口调用实现和执行方法 | |
CN111443961B (zh) | 终端设备及其跨进程通信方法 | |
CN111880866B (zh) | 跨进程回调执行方法、装置、设备及存储介质 | |
US7752598B2 (en) | Generating executable objects implementing methods for an information model | |
US8850460B1 (en) | Techniques for performing a remote procedure call using remote procedure call configuration information | |
CN105094922A (zh) | 应用程序免安装运行控制方法及其装置 | |
US8752057B1 (en) | Techniques for synchronizing processing of at least two code threads | |
US8484616B1 (en) | Universal module model | |
CN111427557A (zh) | 应用微服务化方法、装置、电子设备及可读存储介质 | |
US12039302B2 (en) | Building base applications with user interface micro frontends | |
US7562369B1 (en) | Method and system for dynamic configuration of activators in a client-server environment | |
CN110427260B (zh) | 主机作业调度方法、装置及系统 | |
CN108496157B (zh) | 使用扩展接口提供运行时跟踪的系统和方法 | |
CN109729121A (zh) | 一种云存储系统及用于云存储系统中实现自定义数据处理的方法 | |
CN113986466A (zh) | 一种面向云计算的gpu虚拟化系统和方法 | |
US7941454B2 (en) | Apparatus, methods and computer programs for monitoring processing in a data processing system or network | |
US7802253B2 (en) | System for session management of resources and tasks having records in the lookup table for the session | |
US9058225B2 (en) | Secure and reliable mechanism to provide a single object instance in a clustered system | |
Guillen-Scholten et al. | A channel-based coordination model for components | |
Arnold et al. | Hector: Distributed objects in python | |
US7472174B2 (en) | Abstract mechanism for constructing commands for the command pattern | |
US20110125932A1 (en) | Port setting method of application system | |
CN113326067B (zh) | 命令执行方法、系统、计算机设备和存储介质 | |
US6745249B1 (en) | Enabling life cycle semantics via naming interfaces |
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 | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20200710 Assignee: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd. Assignor: GUANGZHOU HUADUO NETWORK TECHNOLOGY Co.,Ltd. Contract record no.: X2021440000030 Denomination of invention: Implementation and execution of terminal device and its cross process interface call License type: Common License Record date: 20210125 |
|
GR01 | Patent grant | ||
GR01 | Patent grant |