CN111880866B - 跨进程回调执行方法、装置、设备及存储介质 - Google Patents
跨进程回调执行方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111880866B CN111880866B CN202010752168.3A CN202010752168A CN111880866B CN 111880866 B CN111880866 B CN 111880866B CN 202010752168 A CN202010752168 A CN 202010752168A CN 111880866 B CN111880866 B CN 111880866B
- Authority
- CN
- China
- Prior art keywords
- callback
- interface
- proxy object
- client process
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 466
- 230000008569 process Effects 0.000 claims abstract description 252
- 238000004891 communication Methods 0.000 claims abstract description 26
- 230000015654 memory Effects 0.000 claims description 32
- 238000004590 computer program Methods 0.000 claims description 15
- 230000007246 mechanism Effects 0.000 claims description 11
- 238000005516 engineering process Methods 0.000 claims description 10
- 230000004044 response Effects 0.000 claims description 7
- 238000010276 construction Methods 0.000 claims description 5
- 230000009286 beneficial effect Effects 0.000 abstract description 5
- 238000011161 development Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 8
- 239000011230 binding agent Substances 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000006872 improvement Effects 0.000 description 3
- 238000004806 packaging method and process Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000007306 functionalization reaction Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000008092 positive effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
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
本申请公开一种跨进程回调执行方法、装置、设备及存储介质,该方法包括:响应于接口调用请求,识别出其中经编程注解相应携带的表征包含回调方法的参数;基于所述参数为回调方法构造回调代理对象,生成回调特征信息;通过调用服务进程预构造的接口代理对象发起接口调用,将接口代理对象运行所需的调用运行信息以及回调特征信息传输给服务进程,以供服务进程在运行所述接口代理对象的实例对象时,通过回调特征信息调用回调代理对象,执行回调;根据服务进程运行实例对象后返回的结果数据响应所述的接口调用请求。本申请解决了跨进程通信中关于回调方法的有效和高效调用的问题,有助于跨进程回调时硬件运行效率,也有助于相关的程序开发效率。
Description
技术领域
本申请涉及Android操作系统的应用程序开发技术,尤其涉及一种跨进程回调执行方法,还涉及与该方法相应的装置、电子设备以及非易失性存储介质。
背景技术
针对Android操作系统实现跨进程接口创建和调用的问题,本申请人在2020年7月10日公开的CN111400070A号专利公告中提出一种跨进程接口调用实现。
所述的调用实现方法包括如下步骤:应用程序中,跨进程通信的服务进程与客户进程以编程注解的方式共同协议分别定义同一接口的实现类和接口类,约定该接口的接口标识;在应用程序安装运行后,服务进程将其实现类中注解的接口注册信息注册到接口库,允许客户进程与自身基于操作系统进程通信机制进行绑定通信;当客户进程创建某个接口时,解析该接口的注解获得接口标识,驱动服务进程查询接口库中的接口注册信息确定与该接口标识相应的实现类,实例化该实现类生成实例对象,返回该实例对象的对象标识;当客户进程调用其已创建的接口的方法时,通过调用携带所述对象标识的代理对象,间接调用服务进程中相应的实现类对象,执行其中的内建方法,获取返回的结果数据。
通过所述的调用实现方法,可以更为高效地实现所述的服务进程与所述客户进程之间的跨进程通信,程序开发人员不必针对需要跨进程通信的接口类进行重复的定义操作,大大简化了程序开发效率,而且,当其运行时,对于实现跨进程的内存共享,实现对跨进行调用的集中管控,具有非常明显的积极效果。
另一方面,在Android应用的开发中,UI线程中的调用都需要在规定的时间内完成,否则就会出现ANR即程序不响应的问题。所以,一个阻塞式(不支持回调)的方法的调用,如果其内部程序代码的执行耗时较长甚至无法确定,那么,在调用该方法时,必须将方法的调用部分的相应代码另外放在子线程中调用,候其执行完成后再切换回Android的UI线程做更新界面数据的操作。
随着申请人实践的深化,发现CN111400070A号专利公告中提出的解决方案在解决回调函数的问题上是欠考虑的。根据该方案,涉及跨进程方法函数的调用都是同步的,也可以理解为是阻塞的——调用方发起跨进程调用相关请求后,调用方法的线程会被阻塞。如果代码停止在调用处等待服务进程收到请求并执行完请求后,才返回结果给调用方,调用方获取到返回的结果后再继续往下执行,这种情况下,调用方在获得执行结果之前均处于等待状态,什么都做不了,导致空耗运算资源。
为此,如果结合现有技术,适应该解决方案而提供为方法调用而创建独立子线程的操作来解决ANR的问题,貌似可以起到一定的作用。然而,仔细分析可知,这种操作也存在如下的不足:
首先是主线程与子线程之间的多线程关系本身存在创建线程和切换线程的效率问题,因此各种线程都需要占用终端电子设备有限的CPU、内存等资源,影响这些资源的使用效率。
其次是对于程序实现时,代码的可维护性和可扩展性较差,与上述解决方案提升开发效率的初衷不相符。
此外由于需要考虑处理各线程之间的关系,显然也增加了程序开发人员的开发难度。
发明内容
本申请的首要目的在于为提升应用程序开发效率和运行效率而提供一种跨进程回调执行方法。
作为本申请的其他目的,也基于前述各目的的方法而提供与之相适应的一种跨进程回调实现装置,以及一种电子设备和一种非易性存储介质。
为满足本申请的首要目的,本申请提供一种跨进程回调执行方法,其包括如下步骤:
客户进程响应于接口调用请求,识别出其中经编程注解相应携带的表征包含回调方法的参数;
客户进程基于所述包含回调方法的参数为所述回调方法构造回调代理对象,生成该回调代理对象的回调特征信息;
客户进程通过调用服务进程预构造的接口代理对象发起针对所述接口的调用,相应将所述的接口代理对象运行所需的调用运行信息以及所述的回调特征信息传输给所述的服务进程,以供服务进程在运行所述接口代理对象相对应的实例对象时,通过所述的回调特征信息调用所述的回调代理对象,从而执行对所述回调方法的回调;
客户进程根据服务进程运行所述实例对象后返回的结果数据响应所述的接口调用请求。
较佳的实施例中,所述回调代理对象与所述的接口代理对象分别在客户进程和服务进程中创建,均响应于对方调用而在其自身所属进程中运行其相对应的实例对象,向对方返回运行所得的结果数据。
进一步的实施例中,所述接口代理对象与回调代理对象均基于Java代理技术实现,分别被构建为服务进程和客户进程中对应的实例对象的代理。
较佳的实施例中,所述回调特征信息为具有唯一性特征的回调标识,所述客户进程也通过所述接口代理对象的具有唯一性特征的回调标识对所述的接口代理对象进行调用。
进一步的实施例中,所述客户进程维护一个用于存储所述包含回调方法的参数、回调方法的实例对象与相应的回调标识之间映射关系的数据表,当该数据表中存在与所述参数相对应的回调方法相关的数据记录时,当二次发起包含对所述回调方法的引用的接口调用请求时,复用该数据记录指向的实例对象,而不再重复执行所述客户进程基于所述包含回调方法的参数为所述回调方法构造回调代理对象,生成该回调代理对象的回调特征信息的步骤。
较佳的实施例中,所述客户进程与所述服务进程遵守Android操作系统的IPC机制的规范维持通信绑定关系,由所述服务进程向操作系统注册供实现绑定的服务组件,通过所述的服务组件实现客户进程和服务进程的跨进程通信。
进一步的实施例中,所述客户进程在与所述服务进程解除绑定时,从内存中清除其已创建的所述回调代理对象。
较佳的实施例中,所述客户进程中,其为所述回调方法创建的实例对象为独立的线程,所述服务进程仅通过调用所述回调代理对象经客户进程间接驱动该线程的运行而获得运行后的结果数据。
适应本申请的其他目的而提供的一种跨进程回调执行装置,其包括:
识别模块,被配置为响应于接口调用请求,识别出其中经编程注解相应携带的表征包含回调方法的参数;
构造模块,被配置为基于所述包含回调方法的参数为所述回调方法构造回调代理对象,生成该回调代理对象的回调特征信息;
调用模块,被配置为通过调用服务进程预构造的接口代理对象发起针对所述接口的调用,相应将所述的接口代理对象运行所需的调用运行信息以及所述的回调特征信息传输给所述的服务进程,以供服务进程在运行所述接口代理对象相对应的实例对象时,通过所述的回调特征信息调用所述的回调代理对象,从而完成对所述回调方法的回调;
响应模块,被配置为根据服务进程运行所述实例对象后返回的结果数据响应所述的接口调用请求。
适应本申请的其他目的而提供的一种电子设备,包括中央处理器和存储器,所述中央处理器用于调用运行存储于所述存储器中的计算机程序以执行如前所述的跨进程回调执行方法在各个实施例中的步骤。
适应本申请的其他目的而提供的一种非易失性存储介质,其存储有如前所述的跨进程回调执行方法的各实施例所实现的计算机程序,该计算机程序被计算机调用运行时,执行该方法所包括的步骤。
相对于现有技术,本申请具备如下优点:
首先,本申请基于CN111400070A号专利公告公开的Android操作系统中集中管控跨进程通信的解决方案,提出涉及回调方法的技术方案,实现对在先的解决方案的技术完善,使Android操作系统在集中管控跨进程通信的技术中,具备处理跨进程回调函数的技术能力。
其次,本申请的实施,有助于提升跨进程调用回调函数时的运行效率。
具体而言,客户进程可以依据编程注解识别接口调用请求中的特定参数而识别出该接口包含对回调方法的调用,而在本客户进程中为该回调方法创建相应的实例对象,然后,为该实例对象生成相应的回调特征信息,最后将该回调特征信息连同所述接口相对应的服务进程的接口代理对象所需的调用运行信息一起,传输给所述的服务进程,服务进程于是实际上获得了与所述回调特征信息相对应的回调代理对象,并且可以根据所述调用运行信息运行所述接口代理对象的实例对象,在涉及需要调用所述的回调方法时,服务进程可以利用所述的回调特征信息调用所述回调代理对象,来实现间接调用客户进程中相对应的回调方法的实例对象,获得相应的结果数据,最终将接口代理对象的实例对象执行后的结果数据返回给客户进程,客户进程据此响应所述的接口调用请求。
这一过程中,服务进程无需利用回调方法相关的代码自行创建所述回调方法的独立线程,也就不必涉及重复创建线程和切换线程的问题,同样不会遭遇ANR的问题,对于节省手机之类电子设备的CPU、内存等运行资源,提升其运行效率,有较优的改进效果。
此外,本申请对于客户进程识别回调方法的处理,允许采用编程注解的方式来实现,而基于CN111400070A号专利公告公开的Android操作系统中集中管控跨进程通信的解决方案所搭建的架构,通过在客户进程中维护一个数据表来实现对已经创建了实例对象的回调方式的维护,同理起到了对回调方式跨进程调用的集中管控的效果,可以通过该数据表查询得到相同的回调方式的实例对象,由此可以实现对该类实例对象的复用,程序开发人员在本申请的技术方案的基础上编写客户进程的代码时,对于回调方法的调用所需的代码,既不必考虑线程维护所需部分,也不必针对多次出现的相同回调方式每次都编写相同或相近的代码,因此,将大大简化开发过程中的代码编写工作,从而提升程序开发效率。
本申请附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本申请一种典型实施例中的跨进程回调执行方法的流程示意图;
图2为本申请一种典型实施例中的跨进程回调执行装置的原理示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“客户端”、“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,进行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他诸如个人计算机、平板电脑之类的通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(PersonalCommunications Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA(Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global PositioningSystem,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“客户端”、“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“客户端”、“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
本申请所称的“终端设备”、“移动终端”等名称所指向的硬件,本质上是具备个人计算机等效能力的设备,为具有中央处理器(包括运算器和控制器)、存储器、输入设备以及输出设备等冯诺依曼原理所揭示的必要构件的硬件装置,计算机程序存储于其存储器中,中央处理器将存储在外存中的程序调入内存中运行,执行程序中的指令,与输入输出设备交互,借此完成特定的功能。
以下为便于理解本申请的实施例的目的,先揭示本申请与其所依据的在先专利公告的关系以及本申请所建基相关技术原理:
本申请是基于本申请人在2020年7月10日公开的CN111400070A号专利公告中涉及的解决方案(下称“在先专利公告”)而提出的进一步完善的解决方案,因此,在先方案可以整体作为本申请说明的基础,而用于辅助理解本申请所实现的技术方案。
本申请的应用程序以计算机程序的形式运行于诸如手机、平板等移动终端之类的终端设备中,该终端设备运行有Android或前向兼容Android(例如华为公司新近开发的“鸿蒙”——Harmony OS)的操作系统。应用程序被中央处理器调度入内存中运行,而实现本申请的相关方法。
根据Android操作系统固有的机制,每个应用程序将具体运行于系统的一个虚拟机中。当然,操作系统也支持多进程架构,因此,同一应用程序可以包括多个进程,例如在主进程基础上通过注册服务组件运行其提供服务功能的进程。
具体而言,根据Android操作系统的原理,一个应用程序相关的进程将运行于一个独立的虚拟机中,但也允许存在同一应用程序中实现多进程架构,例如本申请涉及的应用程序就可以通过声明服务组件的方式,实现多进程架构。由此,可以理解,本申请涉及的客户进程与服务进程可以并行地运行在同一虚拟机或不同虚拟机中,当客户进程与服务进程不属于同一应用程序时,意味着客户进程与服务进程属于不同的内存虚拟机,但由于本申请的实现,使得它们之间的接口调用相关的开发变得更为简便。
关于所述的服务组件,以Android系统为例,可以通过在其相应的应用程序安装包的安装配置文件Androidmanifest.xml文件中声明一个服务组件,在该服务组件被系统启动后,应用程序在内存中发挥服务进程的作用,可以通过该服务组件与其他客户进程实现通信交互。所述的客户进程既可以是本应用程序的例如服务组件所在的进程,也可以是属于不同的应用程序,特别是一些约定了协议方案的联合开发项目的应用程序运行时所表现的客户进程。
服务组件被启动后,客户进程便可与之绑定。根据本申请的上述原理,客户进程后续还要负责维护其与该服务组件之间的连接状态,以确定客户进程与本应用程序之间的稳定连接。在客户进程与服务进程实现绑定的基础上,后续方能进一步完成接口调用相关的功能。
当本申请实现时,相关应用程序在内存中运行后,在内存中将允许存在与本申请的相关方法相关联的两类进程,一类是所述的服务进程,另一类是可以配合协议和通信绑定关系与该服务进程交互实现接口调用的客户进程。两种进程或者属于相同应用程序,或者属于不同应用程序。
在CN111400070A号专利公告中,服务进程与客户进程之间建立了协议机制,两者预先遵守了相关开发协议,因此,在需要用到数据格式的场景中,包括以特定数据格式封装和解封装(解析),由于两者之间存在这种协议,所以可以互相识别对方封装的数据,从而正确还原对方传输过来的内容。也就是说,客户进程与服务进程之间,由一方封装的数据格式,可以被另一方依照预先协议而正确解析。服务进程与客户进程之间的协议,定义了两种格式,第一种是请求格式,第二种是结果格式。请求格式用于封装和解封装客户进程发起的各种请求,涉及的数据主要是客户进程解析接口类注解后获得的接口标识、方法标识(及方法的运行参数、返回值类型等属性信息)、代理对象携带的对象标识等,结果格式则用于封装和解封装服务进程执行调用产生的各种结果数据,主要是实例化实现类,生成实例对象后为其分配的对象标识、实例对象的内建方法被调用执行后的返回值等。请求格式通常由客户进程封装而由服务进程解析,结果格式通常由服务进程封装而由客户进程解析。
而在本申请中,与此同理,所述的请求格式也可以被用于封装和解封装所述服务进程发起的回调请求,涉及的数据主要是实施对本申请的回调代理对象进行调用时,关于回调方法所需的回调标识,以及该回调方法相关的各种运行参数、返回值之类的本领域技术人员可以按需确定的属性信息;所述的结果格式同理也可以被用于封装和解封装客户进程执行回调方法的实例对象产生的各种结果数据,一方面主要是客户进程为服务进程创建回调方法的回调代理对象并生成回调标识时,另一方面是客户进程在响应服务进程调用回调代理对象而执行相对应的实例对象产生了相应的结果数据需要返回给服务进程时。由此可见,本申请中,关于请求格式和结果格式对于客户进程和服务进程而言均可以是双向的应用,以便实现任何一方可以将由另一方封装的格式进行相对应的解封装,并且任何一方均可按需实施任何一种格式的封装并被另一方正确解析。
此外需要加以提前说明以助于理解的是,在Android及其兼容系统中,自身存在着IPC机制,这一机制允许接口跨进程交互。开发时,定义一个Binder类去实现利用AIDL预先定义的接口类,而在实现类中实现功能逻辑。服务进程的服务组件运行后,客户进程与之连接,在onServiceConnected方法中获取该Binder类的代理对象,通过代理对象调用Binder类的接口方法来获取Binder类提供的功能。同时,客户进程负责维护其自身与服务组件之间的连接状态。本申请的实现,也是基于底层的这一机制,而通过本申请的相关步骤来实现对这一机制的有效利用,对此本领域技术人员应可理解。
本申请所称的代理对象,包括接口代理对象和回调代理对象,均是利用Java代理技术实现的,如CN111400070A号专利公告所述,本领域技术人员通过Java代理技术可以将服务进程响应于接口创建请求而创建的相应实现类的所述实例对象在客户进程处映射出相应的代理对象(接口代理对象),(接口)代理对象是因接口创建请求的响应而产生的,服务进程在实例对象产生后分配相应的对象标识,将该对象标识提供给客户进程生成代理对象,代理对象也便携带该对象标识;参照这一原理,本申请的回调代理对象,同样是通过Java代理技术将客户进程为回调方法创建的关于该回调方法的实例对象在服务进程处映射出相应的回调代理对象,服务进程将获得客户进程传递过来的该回调代理对象的回调标识,据此调用该回调代理对象,从而驱动客户进行运行与其相应的实例对象,返回运行结果数据。
概而言之,本申请的实施完全基于CN111400070A号专利公告(下称“在先专利公告”)所揭示的解决方案,因而,相关概念及原理均可由该解决方案习得且在本申请中沿用,余者恕不赘述。
此外,也应当理解,以上揭示原理时涉及的相关技术手段,可以在必要时被用于与本申请的相关实施例相结合以更全面地呈现本申请的创造精神。
在理解上述本申请的实现原理的基础上,请结合图1,本申请的一种典型实施例中,本申请的跨进程回调执行方法,以计算机程序的形式实现,执行包括如下的步骤:
步骤S11,客户进程响应于接口调用请求,识别出其中经编程注解相应携带的表征包含回调方法的参数:
在本典型实施例中,以客户进程与服务进程由同一应用程序构建示例进行说明,在该应用程序安装到操作系统并运行之后,该应用程序通过其安装配置文件的声明,向操作系统声明所述服务进程的服务组件,客户进程随之通过该服务组件绑定实现与服务进程的基于系统IPC机制的通信。
应用程序的业务相关的代码在执行过程中,遇针对某接口进行调用时,便会执行与调用相关的指令,起到发起接口调用请求的作用。
结合在先专利公告,客户进程会预先对接口类进行声明,而服务进程则构造了实现类,两者之间以Java注解技术,在编程时便实现了对相关参数的注解,这些注解在应用程序运行时可以被相应的进程直接解析。因此,当客户进程收到所述的接口调用请求后,响应于这一请求,首先需要识别出跨进程调用所需的各种参数,包括实现接口类与实现类之间的唯一性关联和对象标识、涉及待调用的方法的方法标识、传递给待调用的方法的参数等。由于本申请重在解决回调方法相关的问题,因此需要从这些参数中识别出某一待调用的方法为回调方法,在这种情况下,需要解析所述的接口调用请求识别出指代回调方法的相应参数。
本领域技术人员可以按一般程序开发规则,在编程注解时为回调方法的调用区别标示出相应的参数,例如,可以统一使用的某一标识符来表示,也可使回调方法的方法标识携带表征可回调的指针符合来表示。概而言之,任何适于表示该接口调用请求中包含的待调用的方法为回调方法的表达形式,均可视为本申请中表征包含回调方法的参数,从而可被客户进程解析,识别出接口调用请求中携带该参数,从而进一步可以确定接口调用请求涉及的待调用的回调方法。
步骤S12,客户进程基于所述包含回调方法的参数为所述回调方法构造回调代理对象,生成该回调代理对象的回调特征信息:
对于所述的接口调用请求而言,客户进程将通过为其接口预先构建的接口代理对象来执行,客户进程通过向服务进程调用该接口代理对象的对象标识、方法标识、方法参数、返回值类型等参数,由服务进程依据对象标识查找到与该接口相对应的实现类的实例对象执行之(首次调用时会预先创造该实例对象)。
但是,因为客户进程已经识别出所述的包含回调方法的参数,知晓服务进程在执行所述的接口代理对象的实例对象时,可能涉及对该回调方法的回调,因此,按照本申请的实现逻辑,便可为该回调方法构造相应的回调代理对象,使服务进程通过该回调代理对象实现对该回调方法的代理调用。
客户进程构造回调方法的回调代理对象时,参照服务进程构造接口的实现类的实例对象的方式,先将该回调方法实例化成实例对象,生成该实例对象的回调标识,该回调标识实质上便是具有唯一性特征的回调特征信息,以此便可将其传递给服务进程,后续服务进程可以利用该回调标识调用该回调代理对象,实现回调。
为了有效管理回调方法的实例对象,进一步的实施例中,客户进程可以维护一个数据表,用于存储所述的作为回调特征信息的回调标识与其相应的回调方法以及所述的表征回调方法的参数之间的对应映射关系,由此,客户进程可以通过所述的回调标识或所述的参数查询该数据表,查找到在先已经为某一回调方法创建的实例对象。从而,一方面,对于响应所述的接口调用请求而言,客户进程可以依据所述的参数查询该数据表来确定是否已经在先创建了相应的实例对象,当该实例对象已存在时,便不再需要重复构造相同回调方法的实例对象,只需复用其对应的回调标识即可。另一方面,后续服务进程多次回调同一回调方法时,也只需凭所述的回调标识请求客户进程执行与之相应的实例对象即可实现回调。
如前所述,所述表征回调方法的参数可以是某种统一的标识符,如果这种标识符本身便是回调方法的方法名称,这种情况下,在所述的数据表中,可以实现所述的参数与所述的实例对象的统一命名,而将两者合并为同一字段,以便精简该数据表。
所述的数据表还可以进一步预备一用于表征实例对象的使用状态的字段,用于表征其处于被调用或处于空闲的不同状态,由此,当发生针对同一回调方法的实例对象的并发调用时,客户进程可以按照先后顺序响应不同的调用,在回调方法的实例对象正在被调用时暂不响应新的调用,当回调方法的实例对象处于空闲状态时,才运行该实例对象响应调用。
所述客户进程还可以运用内存管理机制,借助所述的数据表来实现对多个回调方法的实例对象的管理。具体而言,所述数据表中可以设置一个用于表征回调方法的实例对象的生命周期的字段,该字段可以存储每个实例对象可存活的时间长度,当某实例对象存活达到其生命周期限定的时间长度之后且处于空间状态时,客户进程可以清除其相应的数据记录,并且从内存中将相应的实例对象予以清除,由此,可以释放相应的内存空间。
可以理解,在本步骤中,客户进程可以基于所述的包含回调方法的参数为相应的回调方法构造回调代理对象,并生成其回调特征信息,即所述的回调标识,这一回调标识会被客户进程发送给服务进程,以供服务进程调用。客户进程发送回调标识的时间,可以是随同所述接口代理对象的调用而发送,也可以是在其后发送,以满足服务进程调用所需即可。
步骤S13,客户进程通过调用服务进程预构造的接口代理对象发起针对所述接口的调用,相应将所述的接口代理对象运行所需的调用运行信息以及所述的回调特征信息传输给所述的服务进程,以供服务进程在运行所述接口代理对象相对应的实例对象时,通过所述的回调特征信息调用所述的回调代理对象,从而执行对所述回调方法的回调:
当完成了所述的回调方法的实例对象的构造或确定之后,客户进程便可发起对接口代理对象的调用。如前所述,在这一步骤中,客户进程会向服务进程传输调用接口代理对象所需的相关调用运行信息,包括该接口代理对象的对象标识、方法标识、方法所需的参数,甚至包括方法返回值约束条件等。在本申请中,由于所涉及的回调方法已经被实例化并且生成了相应的回调特征信息(回调标识),因此,便可在本步骤中一并将该回调特征信息传输给所述的服务进程,服务进程凭借回调标识,实际上便获得了回调代理对象,便可凭回调标识调用所述的回调代理对象,实现驱动其相应的实例对象在客户进程中的运行。当然,所述的回调特征信息本质上也是所述调用运行信息的一部分,与所述的方法标识有类似的性质,但这样的差异只是概念上的变化,不应以其限制本申请的实施灵活性。
如前所述,接口代理对象已经由服务进程按照在先专利公告的解决方案所实现,因此,客户进程对接口代理对象的调用,实际上也是驱动服务进程运行与该接口代理对象相对应的实例对象。
所述服务进程接收到所述调用运行信息及所述的回调特征信息之后,当其依据调用运行信息调用运行所述接口代理对象的实例对象的过程中,如遇对所述回调方法的调用,实际上便是依据该回调方法的回调标识执行调用,这时,服务进程便将回调标识甚至将与回调方法执行所需的参数等,发送给所述的客户进程。
客户进程收到服务进程的所述的回调标识,理解服务进程发起了针对与该回调标识相对应的回调方法实例对象的调用,通过所述的数据表可以查询确定所述的实例对象,然后运行该实例对象,获得运行结果数据。
客户进程运行回调方法的实例对象后形成结果数据,进一步被客户进程返回给服务进程,服务进程于是利用该结果数据继续执行其他代码指令,以便完成对所述接口代理对象的实例对象的运行,最终向客户进程返回该接口代理对象的实例对象运行所得的结果数据。
步骤S14,客户进程根据服务进程运行所述实例对象后返回的结果数据响应所述的接口调用请求:
服务进程运行所述接口代理对象相对应的实例对象后返回的结果数据被客户进程接收后,客户进程按照在先专利公告中揭示相同技术处理所述的结果数据,完成对应用程序发起所述的接口调用请求的响应即可。
根据以上的揭示,可以看出,所述回调代理对象与所述的接口代理对象分别在客户进程和服务进程中创建,均响应于对方调用而在其自身所属进程中运行其相对应的实例对象,向对方返回运行所得的结果数据。
同理可以知晓,所述回调特征信息为具有唯一性特征的回调标识,所述客户进程也通过所述接口代理对象的具有唯一性特征的回调标识对所述的接口代理对象进行调用。
同理也可以理解,所述客户进程中,其为所述回调方法创建的实例对象为独立的线程,所述服务进程仅通过调用所述回调代理对象经客户进程间接驱动该线程的运行而获得运行后的结果数据。
进一步,客户进程除了可以依据回调方法的生命周期实施内存管理之外,当客户进程与服务进程的服务组件解除绑定后,还可以执行一个清理内存的步骤,通过执行该步骤,由客户进程将其数据表中的相关数据记录和该些数据记录相对应的回调调用的实例对象从内存中清理掉。
此外,由以上对本申请的实现原理、本申请与其所依据的在先专利公告的解决方案之间的关系,以及本申请各种实施例的阐述可知,客户进程与服务进程之间通过对请求格式、结果格式进行协议且彼此均建构了针对这一协议的解析机制,可以确保双方之间的各种指令和数据的正确传输和理解,彼此之间的这种基于协议的协作,将AIDL定义跨进程接口和方法回调的步骤实现复用,可以大幅降低涉及跨进程接口开发的重复开发率,提升其运行效率,为跨进程通信的高阶应用提供坚实的技术基础。
进一步,可以通过将上述各实施例所揭示的方法中的各个步骤进行功能化,构造出本申请的一种跨进程回调执行装置,按照这一思路,请参阅图2,其中的一个典型实施例中,该装置包括:
识别模块11,被配置为响应于接口调用请求,识别出其中经编程注解相应携带的表征包含回调方法的参数;
构造模块12,被配置为基于所述包含回调方法的参数为所述回调方法构造回调代理对象,生成该回调代理对象的回调特征信息;
调用模块13,被配置为通过调用服务进程预构造的接口代理对象发起针对所述接口的调用,相应将所述的接口代理对象运行所需的调用运行信息以及所述的回调特征信息传输给所述的服务进程,以供服务进程在运行所述接口代理对象相对应的实例对象时,通过所述的回调特征信息调用所述的回调代理对象,从而完成对所述回调方法的回调;
响应模块14,被配置为根据服务进程运行所述实例对象后返回的结果数据响应所述的接口调用请求。
进一步,为便于本申请的执行,本申请提供一种电子设备,包括中央处理器和存储器,所述中央处理器用于调用运行存储于所述存储器中的计算机程序以执行如前所述的各实施例中所述跨进程回调执行方法的步骤。
可以看出,存储器适宜采用非易失性存储介质,通过将前述的方法实现为计算机程序,安装到手机之类电子设备中,相关程序代码和数据便被存储到电子设备的非易失性存储介质中,进一步通过电子设备的中央处理器运行该程序,将其从非易性存储介质中调入内存中运行,便可实现本申请所期望的目的。因此,可以理解,本申请的一个实施例中,还可提供一种非易失性存储介质,其中存储有依据所述的跨进程回调执行方法各个实施例所实现的计算机程序,该计算机程序被计算机调用运行时,执行该方法所包括的步骤。
综上所述,本申请解决了跨进程通信中关于回调方法的有效和高效调用的问题,有助于提升电子设备跨进程回调时硬件运行效率,也有助于提升跨进度回调相关的程序开发效率。
本技术领域技术人员可以理解,本申请包括涉及用于执行本申请中所述操作、方法中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其存储器之内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随即存储器)、EPROM(ErasableProgrammable Read-Only Memory,可擦写可编程只读存储器)、EEPROM(ElectricallyErasable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本申请公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本申请中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本申请中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本申请中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种跨进程回调执行方法,其特征在于,其包括如下步骤:
客户进程响应于接口调用请求,识别出其中经编程注解相应携带的表征包含回调方法的参数;
客户进程基于所述包含回调方法的参数为所述回调方法构造回调代理对象,生成该回调代理对象的回调特征信息;
客户进程通过调用服务进程预构造的接口代理对象发起针对所述接口的调用,相应将所述的接口代理对象运行所需的调用运行信息以及所述的回调特征信息传输给所述的服务进程,以供服务进程在运行所述接口代理对象相对应的实例对象时,通过所述的回调特征信息调用所述的回调代理对象,从而执行对所述回调方法的回调;其中,所述客户进程中,其为所述回调方法创建的实例对象为独立的线程,所述服务进程仅通过调用所述回调代理对象经客户进程间接驱动该线程的运行而获得运行后的结果数据;
客户进程根据服务进程运行所述实例对象后返回的结果数据响应所述的接口调用请求。
2.根据权利要求1所述的方法,其特征在于:所述回调代理对象与所述的接口代理对象分别在客户进程和服务进程中创建,均响应于对方调用而在其自身所属进程中运行其相对应的实例对象,向对方返回运行所得的结果数据。
3.根据权利要求2所述的方法,其特征在于,所述接口代理对象与回调代理对象均基于Java代理技术实现,分别被构建为服务进程和客户进程中对应的实例对象的代理。
4.根据权利要求1所述的方法,其特征在于:所述回调特征信息为具有唯一性特征的回调标识,所述客户进程也通过所述接口代理对象的具有唯一性特征的回调标识对所述的接口代理对象进行调用。
5.根据权利要求1所述的方法,其特征在于:所述客户进程维护一个用于存储所述包含回调方法的参数、回调方法的实例对象与相应的回调标识之间映射关系的数据表,当该数据表中存在与所述参数相对应的回调方法相关的数据记录时,当二次发起包含对所述回调方法的引用的接口调用请求时,复用该数据记录指向的实例对象,而不再重复执行所述客户进程基于所述包含回调方法的参数为所述回调方法构造回调代理对象,生成该回调代理对象的回调特征信息的步骤。
6.根据权利要求1所述的方法,其特征在于:所述客户进程与所述服务进程遵守Android操作系统的IPC机制的规范维持通信绑定关系,由所述服务进程向操作系统注册供实现绑定的服务组件,通过所述的服务组件实现客户进程和服务进程的跨进程通信。
7.根据权利要求6中所述的方法,其特征在于,所述客户进程在与所述服务进程解除绑定时,从内存中清除其已创建的所述回调代理对象。
8.一种跨进程回调执行装置,其特征在于,其包括:
识别模块,被配置为客户进程响应于接口调用请求,识别出其中经编程注解相应携带的表征包含回调方法的参数;
构造模块,被配置为客户进程基于所述包含回调方法的参数为所述回调方法构造回调代理对象,生成该回调代理对象的回调特征信息;
调用模块,被配置为客户进程通过调用服务进程预构造的接口代理对象发起针对所述接口的调用,相应将所述的接口代理对象运行所需的调用运行信息以及所述的回调特征信息传输给所述的服务进程,以供服务进程在运行所述接口代理对象相对应的实例对象时,通过所述的回调特征信息调用所述的回调代理对象,从而完成对所述回调方法的回调;其中,所述客户进程中,其为所述回调方法创建的实例对象为独立的线程,所述服务进程仅通过调用所述回调代理对象经客户进程间接驱动该线程的运行而获得运行后的结果数据;
响应模块,被配置为客户进程根据服务进程运行所述实例对象后返回的结果数据响应所述的接口调用请求。
9.一种电子设备,包括中央处理器和存储器,其特征在于,所述中央处理器用于调用运行存储于所述存储器中的计算机程序以执行如权利要求1至7中任意一项所述的跨进程回调执行方法的步骤。
10.一种非易失性存储介质,其特征在于,其存储有依据权利要求1至7中任意一项所述的跨进程回调执行方法所实现的计算机程序,该计算机程序被计算机调用运行时,执行该方法所包括的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010752168.3A CN111880866B (zh) | 2020-07-30 | 2020-07-30 | 跨进程回调执行方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010752168.3A CN111880866B (zh) | 2020-07-30 | 2020-07-30 | 跨进程回调执行方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111880866A CN111880866A (zh) | 2020-11-03 |
CN111880866B true CN111880866B (zh) | 2024-03-12 |
Family
ID=73204623
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010752168.3A Active CN111880866B (zh) | 2020-07-30 | 2020-07-30 | 跨进程回调执行方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111880866B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111338828B (zh) * | 2020-03-24 | 2022-04-08 | 广州方硅信息技术有限公司 | 终端设备及其应用程序接口调用控制方法 |
CN112835727B (zh) * | 2021-01-29 | 2023-05-30 | 宝宝巴士股份有限公司 | 一种基于aop的跨进程通信的方法及装置 |
CN113238915B (zh) * | 2021-05-14 | 2022-07-08 | 北京百度网讯科技有限公司 | 调用信息的处理方法、装置、设备、存储介质及程序 |
CN115733884B (zh) * | 2021-08-25 | 2023-10-24 | 荣耀终端有限公司 | 请求的处理方法及相关装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309730A (zh) * | 2012-03-15 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 跨进程回调的方法及装置 |
CN109933443A (zh) * | 2019-03-07 | 2019-06-25 | 腾讯科技(深圳)有限公司 | 进程间通信方法、装置、计算机设备及可读存储介质 |
US10425497B1 (en) * | 2018-09-28 | 2019-09-24 | Hint, Inc. | Proxy to handle webhook calls |
CN110275790A (zh) * | 2019-06-26 | 2019-09-24 | 北京金山安全软件有限公司 | 应用程序中的进程间通信同步回调方法、系统及相关设备 |
CN111338828A (zh) * | 2020-03-24 | 2020-06-26 | 广州华多网络科技有限公司 | 终端设备及其应用程序接口调用控制方法 |
CN111400070A (zh) * | 2020-03-24 | 2020-07-10 | 广州华多网络科技有限公司 | 终端设备及其跨进程接口调用实现和执行方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040154027A1 (en) * | 1998-10-14 | 2004-08-05 | Jean-Jacques Vandewalle | Method and means for managing communications between local and remote objects in an object oriented client server system in which a client application invokes a local object as a proxy for a remote object on the server |
-
2020
- 2020-07-30 CN CN202010752168.3A patent/CN111880866B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309730A (zh) * | 2012-03-15 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 跨进程回调的方法及装置 |
US10425497B1 (en) * | 2018-09-28 | 2019-09-24 | Hint, Inc. | Proxy to handle webhook calls |
CN109933443A (zh) * | 2019-03-07 | 2019-06-25 | 腾讯科技(深圳)有限公司 | 进程间通信方法、装置、计算机设备及可读存储介质 |
CN110275790A (zh) * | 2019-06-26 | 2019-09-24 | 北京金山安全软件有限公司 | 应用程序中的进程间通信同步回调方法、系统及相关设备 |
CN111338828A (zh) * | 2020-03-24 | 2020-06-26 | 广州华多网络科技有限公司 | 终端设备及其应用程序接口调用控制方法 |
CN111400070A (zh) * | 2020-03-24 | 2020-07-10 | 广州华多网络科技有限公司 | 终端设备及其跨进程接口调用实现和执行方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111880866A (zh) | 2020-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111880866B (zh) | 跨进程回调执行方法、装置、设备及存储介质 | |
WO2021190469A1 (zh) | 终端设备及其应用程序接口调用控制方法 | |
CN111400070B (zh) | 终端设备及其跨进程接口调用实现和执行方法 | |
US9235380B2 (en) | Software modeling framework | |
Schmidt et al. | C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks | |
US7080386B2 (en) | Architecture with digital signal processor plug-ins for general purpose processor media frameworks | |
US8181151B2 (en) | Modeling and managing heterogeneous applications | |
US6622175B1 (en) | System and method for communications in a distributed processing environment | |
RU2419837C2 (ru) | Рабочие потоки, ориентированные на данные | |
CN111443961B (zh) | 终端设备及其跨进程通信方法 | |
US8752057B1 (en) | Techniques for synchronizing processing of at least two code threads | |
WO2002001349A2 (en) | System and method for coordination-centric design of software systems | |
US20080216102A1 (en) | Cross application domain late binding to non-local types | |
CN111427557A (zh) | 应用微服务化方法、装置、电子设备及可读存储介质 | |
Medvidovic et al. | A family of software architecture implementation frameworks | |
US7802257B1 (en) | Mechanism for bridging a thread-oriented computing paradigm and a job-oriented computing paradigm | |
CN112035270A (zh) | 接口适配方法、系统、装置、计算机可读介质及电子设备 | |
CN116680209A (zh) | 基于wasm的多智能合约实例管理方法 | |
CN114610381A (zh) | 一种方法服务的调用方法、装置、设备及存储介质 | |
CN113986466A (zh) | 一种面向云计算的gpu虚拟化系统和方法 | |
WO2021203591A1 (zh) | 异构云存储系统的数据处理方法及其可读介质和系统 | |
US8181188B2 (en) | Version resiliency for a host application and managed code | |
Arnold et al. | Hector: Distributed objects in python | |
Guillen-Scholten et al. | A channel-based coordination model for components | |
US20070174813A1 (en) | External configuration of processing content for script |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20210112 Address after: 511442 3108, 79 Wanbo 2nd Road, Nancun Town, Panyu District, Guangzhou City, Guangdong Province Applicant after: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd. Address before: 29th floor, building B-1, Wanda Plaza, Nancun Town, Panyu District, Guangzhou City, Guangdong Province Applicant before: GUANGZHOU HUADUO NETWORK TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |