CN112764946B - 跨进程数据传输方法、装置、电子设备和存储介质 - Google Patents

跨进程数据传输方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN112764946B
CN112764946B CN202110023483.7A CN202110023483A CN112764946B CN 112764946 B CN112764946 B CN 112764946B CN 202110023483 A CN202110023483 A CN 202110023483A CN 112764946 B CN112764946 B CN 112764946B
Authority
CN
China
Prior art keywords
data
transmission
memory space
transmission data
data transmission
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
CN202110023483.7A
Other languages
English (en)
Other versions
CN112764946A (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.)
Chongqing Chuangtong Lianzhi Internet Of Things Co ltd
Original Assignee
Chongqing Chuangtong Lianzhi Internet Of Things 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 Chongqing Chuangtong Lianzhi Internet Of Things Co ltd filed Critical Chongqing Chuangtong Lianzhi Internet Of Things Co ltd
Priority to CN202110023483.7A priority Critical patent/CN112764946B/zh
Publication of CN112764946A publication Critical patent/CN112764946A/zh
Application granted granted Critical
Publication of CN112764946B publication Critical patent/CN112764946B/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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • 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/546Message passing systems or structures, e.g. queues
    • 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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种跨进程数据传输方法、装置及电子设备、存储介质,该方法应用于安卓操作***中的数据传输层,所述方法包括:通过第一进程中实现的数据传输接口,接收第一进程的传输数据;将传输数据写入到内存空间中;通过第二进程中实现的数据传输接口,接收第二进程对传输数据的获取请求;根据获取请求,从内存空间中提取传输数据并发送给第二进程;其中,第一进程中实现的数据传输接口和第二进程中实现的数据传输接口均是基于数据传输层定义的数据传输接口实现的。本申请实施例的跨进程数据传输方法通过在进程中设置数据传输接口,一次通信连接就可以实现数据的双向传递,改善了数据的传递方向及传递效率。

Description

跨进程数据传输方法、装置、电子设备和存储介质
技术领域
本申请涉及数据传输技术领域,具体涉及一种跨进程数据传输方法、装置、电子设备和存储介质。
背景技术
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是***进行资源分配和调度的基本单位,是操作***结构的基础。安卓(Android)操作***在开发过程中,基于功能隔离、进程安全、进程保活等等考虑,经常需要为应用划分进程,然而这种操作不得不面临跨进程通信和跨进程共享数据的挑战。
跨进程通信的目的在于实现进程间数据的分享以及交互。最典型的跨进程通信的应用场景是剪切板上数据的复制与粘贴,但这种跨进程通信的方式仅限于一些String类数据的传送。在Android***中,对于进程间数据的传输限于AIDL(Android InterfaceDefinition Language,即Android接口定义语言)方式,但该方式下的数据传输限于基本的数据类型,如int、long、list、String等,如果需要传送一个对象的话,则需要将类进行序列化,如进行Parcelable化(可打包化)或Serializable(序列化)化,但Parcelable化或Serializable化又需要额外实现序列化的接口。而且AIDL属于单向通信,即一套AIDL方案仅允许进程A向进程B进行传送,但要使进程B向进程A传送的话则需要另一套AIDL方案。
发明内容
鉴于上述问题,提出了本申请以便提供一种克服上述问题或者至少部分地解决上述问题的跨进程数据传输方法、装置、电子设备和存储介质。
依据本申请的第一方面,提供了一种跨进程数据传输方法,所述方法应用于安卓操作***中的数据传输层,所述方法包括:
通过第一进程中实现的数据传输接口,接收所述第一进程的传输数据;
将所述传输数据写入到内存空间中;
通过第二进程中实现的数据传输接口,接收所述第二进程对所述传输数据的获取请求;
根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程;
其中,所述第一进程中实现的数据传输接口和所述第二进程中实现的数据传输接口均是基于所述数据传输层定义的数据传输接口实现的。
可选地,所述将所述传输数据写入到内存空间中包括:
对所述传输数据进行解析,根据解析结果确定所述传输数据的数据类型,其中所述数据类型包括基础数据和/或对象数据;
根据所述传输数据的数据类型对所述传输数据进行封装,得到已封装的传输数据;
将所述已封装的传输数据写入所述内存空间中。
可选地,所述根据所述传输数据的数据类型对所述传输数据进行封装,得到已封装的传输数据包括:
若所述传输数据中包括所述基础数据和所述对象数据,则分别对所述基础数据和所述对象数据进行封装。
可选地,所述对所述对象数据进行封装包括:
确定所述对象数据是否已经序列化;
若所述对象数据已经序列化,则直接对所述对象数据进行封装;
若所述对象数据没有序列化,则记录所述对象数据的对象格式,并对所述对象数据进行封装,以将所述对象数据的对象格式和已封装的对象数据均写入所述内存空间中。
可选地,所述根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程包括:
根据所述获取请求,从所述内存空间中获取所述传输数据;
对所述传输数据进行解析,根据解析结果确定所述传输数据的数据类型,其中所述数据类型包括基础数据和/或对象数据;
根据所述传输数据的数据类型对解析后的传输数据进行还原,得到已还原的传输数据;
通过所述第二进程中实现的数据传输接口,将所述已还原的传输数据发送给所述第二进程。
可选地,所述根据所述传输数据的数据类型对解析后的传输数据进行还原,得到已还原的传输数据包括:
若所述传输数据中包括所述基础数据和所述对象数据,则分别对所述基础数据和所述对象数据进行还原。
可选地,所述对所述对象数据进行还原包括:
从所述内存空间中获取所述对象数据的对象格式;
根据所述对象数据的对象格式对所述对象数据进行还原。
可选地,在通过第一进程中实现的数据传输接口,接收所述第一进程的传输数据之后,所述方法还包括:
与所述第一进程进行握手校验;
若握手校验成功,则将所述传输数据写入到内存空间中;
在通过第二进程中实现的数据传输接口,接收所述第二进程对所述传输数据的获取请求之后,所述方法还包括:
与所述第二进程进行握手校验;
若握手校验成功,则根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程。
可选地,所述方法还包括:
若接收到所述第一进程的传输数据,则在所述安卓操作***中开辟内存空间,以将所述传输数据写入到所述内存空间;
若与所述第二进程握手校验失败,或者所述第二进程的返回参数为数据传输成功,则释放所述内存空间。
依据本申请的第二方面,提供了一种跨进程数据传输装置,所述装置应用于安卓操作***中的数据传输层,所述装置包括:
第一接收单元,用于通过第一进程中实现的数据传输接口,接收所述第一进程的传输数据;
第一写入单元,用于将所述传输数据写入到内存空间中;
第二接收单元,用于通过第二进程中实现的数据传输接口,接收所述第二进程对所述传输数据的获取请求;
第一发送单元,用于根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程;
其中,所述第一进程中实现的数据传输接口和所述第二进程中实现的数据传输接口均是基于所述数据传输层定义的数据传输接口实现的。
依据本申请的第三方面,提供了一种电子设备,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如上述任一所述的跨进程数据传输方法。
依据本申请的第四方面,提供了一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如上述任一所述的跨进程数据传输方法。
由上述可知,本申请的技术方案取得了如下的技术效果:本申请实施例的跨进程数据传输方法主要应用于安卓操作***中的数据传输层,针对任意两个需要进行数据传输的第一进程和第二进程,在第一进程和第二进程中分别实现了用于进行数据传输的数据传输接口,该数据传输接口是基于数据传输层定义的数据传输接口实现的。在进行跨进程数据传输时,先通过第一进程中实现的数据传输接口,接收第一进程的传输数据;然后将传输数据写入到安卓操作***的内存空间中;之后通过第二进程中实现的数据传输接口,接收第二进程对传输数据的获取请求;最后根据获取请求,从内存空间中提取传输数据并发送给第二进程。本申请实施例的跨进程数据传输方法通过在进程中设置数据传输接口,该数据传输接口既支持数据发送,也支持数据接收;既支持int、long、list、String等基本类型的数据传输,也支持类对象等复杂类型的数据传输,使得数据传输的实现更为简单,且一次通信连接就可以实现数据的双向传递,改善了数据的传递方向及传递效率。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本申请一个实施例的跨进程数据传输方法的流程示意图;
图2示出了根据本申请一个实施例的跨进程数据传输方法的流程框图;
图3示出了根据本申请一个实施例的跨进程数据传输的逻辑框图;
图4示出了根据本申请一个实施例的跨进程数据传输装置的结构示意图;
图5示出了根据本申请一个实施例的电子设备的结构示意图;
图6示出了根据本申请一个实施例的计算机可读存储介质的结构示意图。
具体实施方式
下面将参照附图更详细地描述本申请的示例性实施例。虽然附图中显示了本申请的示例性实施例,然而应当理解,可以以各种形式实现本申请而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本申请,并且能够将本申请的范围完整的传达给本领域的技术人员。
安卓操作***是基于不同版本的Linux内核开发出来的,在Linux环境下,由于进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都无法看到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,通过在内核中开辟一块缓冲区,进程A将数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,保存数据的这块内存空间可以被两个进程访问,被称为共享内存,内核提供的这种机制即称为基于共享内存的进程间通信(IPC,InterProcess Communication)。
但是,由于内存实体存在于计算机***中,所以只能由处于同一个计算机***中的诸进程共享。而安卓操作***为每个进程开辟了一个虚拟机,这就导致安卓操作***中很难利用共享内存实现IPC。
针对此,本申请提出的方案是在安卓操作***中实现一个数据传输层,由该数据传输层或者说数据传输模块来进行待传输数据的内存缓存,并且,定义一个既可以实现数据发送,也可以实现数据接收的数据传输接口,解决现有技术中需要实现两套AIDL方案以分别进行数据发送和接收的问题。
基于此,本申请实施例提供了一种跨进程数据传输方法,所述方法应用于安卓操作***中的数据传输层,如图1所示,所述方法包括如下的步骤S110至步骤S140:
步骤S110,通过第一进程中实现的数据传输接口,接收所述第一进程的传输数据。
本申请实施例的跨进程数据传输方法主要应用在安卓操作***中的数据传输层。针对任意两个需要进行跨进程数据传输的进程来说,可以事先在两个进程中分别设置可用于进行数据传输的数据传输接口,以建立起和其它进程间的通信桥梁。这里的数据传输接口可以理解为是基于本申请实施例的数据传输层定义的数据传输接口,该数据传输接口不但能够实现数据的发送,还能够实现数据的接收,即实现数据的双向传递。
在进行跨进程数据传输时,先通过第一进程中实现的数据传输接口,接收第一进程的传输数据。在实际应用场景下,这里的进程可以理解为是基于安卓操作***实现的各种终端设备中所安装的应用程序的执行实体,因此上述第一进程的传输数据就可以理解为是应用程序的数据。
步骤S120,将所述传输数据写入到内存空间中。
在接收到第一进程的传输数据后,可以将传输数据存储到内存空间中,以使其他进程可以从内存空间中获取到第一进程的传输数据。这里的内存空间是指安卓操作***的内存空间,该内存空间可以看作是一个用于存储数据库的缓冲区,任意一个进程都可以将自己的数据存储到内存空间中或者从内存空间中读取数据。
步骤S130,通过第二进程中实现的数据传输接口,接收所述第二进程对所述传输数据的获取请求。
在实际应用场景下,第二进程可以根据实际需求发起对第一进程的传输数据的获取请求,该获取请求中通常会携带有对应的进程标识,以便于根据该进程标识获取相应的传输数据。具体地,可以通过第二进程中实现的数据传输接口来接收第二进程对所述传输数据的获取请求,这里的第二进程中实现的数据传输接口与第一进程中实现的数据传输接口一样,均可以理解为是基于数据传输层定义的数据传输接口,既能够实现数据的接收,也能够实现数据的发送。
步骤S140,根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程;其中,所述第一进程中实现的数据传输接口和所述第二进程中实现的数据传输接口均是基于所述数据传输层定义的数据传输接口实现的。
在得到第二进程对传输数据的获取请求后,可以根据获取请求,从安卓操作***的内存空间中提取出相应的传输数据,然后再通过第二进程中实现的数据传输接口,将提取出的传输数据发送给第二进程,进而完成一次数据的传输过程。
由此可见,保存传输数据的内存空间并不是直接由第一进程和第二进程进行访问,而是由数据传输层进行读写,传输数据不会因多个进程访问而产生副本,保证了数据一致性。
此外,由于本申请实施例的数据传输接口是指数据传输层定义的数据传输接口,通过该数据传输接口既能够实现数据的接收,也能够实现数据的发送,因此上述“第一进程”和“第二进程”既可以看作是数据发送方,也可以看做是数据接收方,进而实现进程间的双向通信。
现有的基于AIDL实现进程间通信的方案是单向传输,例如当进程A想要向进程B传输数据时,会在一个AIDL文件中定义一个需要提供给进程B使用的接口X,通过该接口X仅能实现进程A直接向进程B的数据传输,而如果要实现进程B向进程A的数据传输,则需要另外一个AIDL文件来定义另一个需要提供给进程A使用的接口Y。
而本申请实施例通过在进程中设置的数据传输接口实现的是数据的双向传输,既支持数据发送,也支持数据接收;既支持int、long、list、String等基本类型的数据传输,也支持类对象等复杂类型的数据传输,使得数据传输的实现更为简单,且一次通信连接就可以实现数据的双向传递,改善了数据的传递方向及传递效率。此外,本申请实施例在进程中设置的数据传输接口并不是直接进行进程A和进程B之间的数据传输,而是通过进程A和进程B之间的数据传输层来实现,保证了传输数据的一致性。
在本申请的一个实施例中,在将传输数据写入到内存空间中时,可以先对接收到的传输数据进行解析,然后根据解析结果确定传输数据的类型,这里的数据类型可以包括基础数据和对象数据,然后根据解析出的数据类型对相应的传输数据进行数据封装,最后将得到的已封装的传输数据存储到内存空间中,以用于后续的传输。
上述的基本数据主要包括int、long、list、String等,如Java(一种面向对象的程序设计语言)中规定基本数据的关键字以小写字母开头,基本数据只有数值,没有ID(即在内存空间中的位置)。同时,基本数据的类型是不可变的,在栈中分配内存,这使得基本数据的开销相对较低。对象数据主要包括Integer、Boolean、Double等,如Java中规定对象数据的关键字都要以大写字母开头,且对象数据既有数值又有ID。此外,对象数据的类型既有不可变的类型,也有可变的类型,其在堆中分配内存,代价相对较高。
上述的数据封装可以理解为是把数据映射到某个封装协议的净荷中,然后填充对应协议的包头,形成封装协议的数据包,并完成速率适配,封装的主要目的是为了保证关键数据的安全性,同时对外部隐藏实现细节,隔离复杂度。
由于基础数据和对象数据的格式不同,数据封装的方式也不同,因此在本申请的一个实施例中,如果接收到的第一进程的传输数据经过解析后,既包含有基础数据,又包含有对象数据,这时可以对基础数据和对象数据分别进行封装,最后分别存储到内存空间中。
在实际应用场景下,如果第一进程的传输数据中包含有对象类型的数据,则通常需要对对象数据进行序列化处理,序列化是将对象的状态信息转换为可以存储或传输的形式的过程,即将对象转换成一个字符序列,并能够在以后将这个字节序列完全恢复为原来的对象,以便于进行存储和传输。现有的对象序列化的方法是通过在进程中单独实现Parcelable化或Serializable化的接口,成本和复杂度均较高。
而在本申请的一个实施例中,由于一些进程中可能已经实现了序列化的接口,因此在解析得到的数据类型中包含对象数据时,可以先确定对象数据是否已经序列化,如果对象数据已经序列化,则可以直接对对象数据进行封装;如果对象数据还没有序列化,则可以记录下对象数据的对象格式,然后再对对象数据进行封装,最后将对象数据的对象格式和已封装的对象数据均写入到内存空间中,以便于后续的数据传输。
本申请实施例能够兼容已经实现了序列化接口的进程,而对于没有序列化的对象数据,无需在进程中额外实现对对象进行序列化的接口,通过记录对象格式并存储到内存空间中,就能够满足数据存储和传输的要求,同时降低了开发成本和开发复杂度。
在本申请的一个实施例中,在第二进程想要获取第一进程的传输数据时,会发起对传输数据的获取请求,因此这里可以根据接收到的获取请求,从内存空间中获取相应的传输数据,由于内存空间中存储的数据是封装后的数据,因此这里可以先对从内存空间中获取到的传输数据进行解析,然后根据解析结果可以得到具体的数据类型,包括基础数据和/或对象数据,之后可以根据解析到的数据类型对解析后的传输数据进行还原即解封装,得到已还原的传输数据;最后通过第二进程中实现的数据传输接口,将已还原的传输数据发送给第二进程,进而完成一次完整的数据传输过程。
需要说明的是,在将传输数据从内存空间中提取出并发送给第二进程这一过程所提及的“解析”并不同于在将第一进程的传输数据存储到内存空间这一过程所提及的“解析”,即具体的解析对象和解析方式不同。
由于基础数据和对象数据的格式不同,数据还原的方式也不同,因此在本申请的一个实施例中,如果从内存空间中获取到的第一进程的传输数据经过解析后,既包含有基础数据,又包含有对象数据,这时可以对基础数据和对象数据分别进行还原,最后将还原后的基础数据和对象数据一起通过第二进程中实现的数据传输接口发送给第二进程。
对于对象数据来说,本申请在上述数据存储阶段已经将对象数据的对象格式存储到了内存空间中,因此在本申请的一个实施例中,如果解析得到的数据类型包含有对象数据,则可以从内存空间中直接获取该对象数据的对象格式,然后利用对象数据的对象格式对对象数据进行还原即解封装,进而得到原始形式的传输数据。
本申请实施例的跨进程数据传输方法是基于进程间通信来实现的,具体解决的是同一台主机上不同进程间的互相通信的问题,现有的LocalSocket(本地套接字)即是解决这一问题的主要手段。LocalSocket是基于UNIX-domain Socket(UNIX域套接字)的,UNIX-domain Socket是在Socket的基础上衍生出来的一种IPC通信机制。LocalSocket相对于网络通信使用的socket不需要经过网络协议栈,不需要打包拆包、计算校验,自然的执行效率也高,因此在Android***中作为IPC通信手段被广泛使用。
具体实施时,在进行第一进程与第二进程之间的数据传输时,可以先通过LocalSocket建立起与第一进程的通信连接,即与第一进程进行握手校验,这里的握手是指在通信链路建立之后,信息传输开始之前,通过握手达成参数,如信息传输率,字母表,奇偶校验,中断过程,和其他协议特性。如果握手校验成功,则可以将第一进程的传输数据存储到内存空间中。
当第二进程需要获取传输数据时,同样可以通过LocalSocket建立起与第二进程的通信连接,即与第二进程进行握手校验,如果握手校验成功,则可以根据获取请求,从内存空间中提取相应的传输数据并发送给第二进程。
安卓操作***中的内存空间通常包括物理内存与进程内存两部分,物理内存即移动设备上的RAM(Random Access Memory,随机存取存储器),当启动设备中的一个程序时,***会给它分配固定的内存空间(如16M,32M不定),这块内存空间会映射到RAM上某个区域,然后这个程序就会运行在这块空间上。进程内存只是虚拟内存(或者叫作逻辑内存),而程序的运行需要的是实实在在的内存,即物理内存。因此在必要时,操作***会将程序运行中申请的内存(虚拟内存)映射到RAM上,让进程能够使用物理内存。
本申请实施例的内存空间可以是指安卓操作***的物理内存或者进程内存。在需要进行进程A的数据传输时,可以在安卓***的进程内存中开辟出一小块区域用于进程A的传输数据的缓存,然后这一小块区域会映射到RAM上某个区域上,使得这个进程A能够运行在RAM的这块区域上。通过这种仅在数据传输时临时开辟内存空间的方式,可以大大提升安卓操作***的内存空间的资源分配率和利用率。
在本申请的一个实施例中,如果与第二进程的握手校验失败,说明此时无法向第二进程传输第一进程的数据,此时可以释放出安卓操作***中的内存空间;或者当第二进程的返回参数为数据传输成功时,说明第二进程已经成功接收到了第一进程的传输数据,此时也可以释放出内存空间,以使被释放的内存空间可以用于存储其他进程的传输数据,提高内存空间的资源利用率。
对于上述与第二进程的握手校验失败的情形,当出现第一次握手校验失败时,可以通过调用重试机制,重新进行握手校验,如果在一段时间内仍然无法校验成功,则可以释放出安卓操作***中的内存空间同时释放该通信链路。
如图2所示,提供了本申请实施例一种跨进程数据传输方法的流程框图。以进程A向进程B传输数据为例,首先建立起与进程A和进程B的IPC通信连接关系,在成功建立起通信连接关系后,进程A可以通过进程A中实现的数据通信接口将传输数据传入数据传输层,然后在数据传输层对传输数据进行解析和封装,然后将封装后的传输数据写入安卓操作***的内存空间中。
在将内存空间中进程A的传输数据传输给进程B时,可以先对内存空间中的传输数据进行解析和还原,最后将还原后的传输数据发送给进程B,由此完成一次由进程A到进程B的数据传输过程。
对于进程B向进程A传输数据的场景,与上述过程相同,但是该过程无需再重新与进程A和进程B建立IPC通信连接关系,即仅通过一次IPC通信连接的建立就可以实现进程A和进程B之间数据的双向传输,大大提高了数据的传输效率。
如图3所示,提供了本申请实施例一种跨进程数据传输的逻辑框图。仍以进程A向进程B传输数据为例,首先,建立起与进程A和进程B的IPC通信连接关系,在成功建立起通信连接关系后,进程A会将用于传输的数据写到数据传输接口。然后与进程A进行握手校验,如果握手校验通过,则对进程A的传输数据进行解析同时开辟内存空间,根据解析结果可以得到传输数据的类型,如果是基础数据,则直接进行封装,如果是对象数据,则可以进一步判断对象数据是否已经序列化,如果已经序列化,则直接对对象数据进行封装,如果没有序列化,则记录下对象数据的对象格式,然后再对对象数据进行封装。最后将已封装的基础数据、对象数据及对象格式均存储到已开辟好的内存空间中。
当进程B需要获取传输数据时,可以与进程B进行握手校验,如果第一次握手检验失败,则调用重试机制,如果一段时间内仍然无法成功,则释放出安卓操作***中的内存空间同时释放该通信链路。如果握手校验成功,则从内存空间中获取相应的传输数据并进行解析,得到数据类型,如果数据类型包含对象数据,则从内存空间中获取对象格式,然后根据对象格式对对象数据进行还原,而对于基础数据则可以直接进行还原,最后将还原后的传输数据通过进程B的数据传输接口发送给进程B,进程B中会回传参数,如果回传参数为数据传输成功,认为进程A成功向进程B传输了数据,即完成了一次完整的数据传输过程,则此时可以释放内存空间,以为其他进程提供存储空间。
本申请实施例提供了一种跨进程数据传输装置400,所述装置应用于安卓操作***中的数据传输层,如图4所示,所述装置400包括:
第一接收单元410,用于通过第一进程中实现的数据传输接口,接收所述第一进程的传输数据;
第一写入单元420,用于将所述传输数据写入到内存空间中;
第二接收单元430,用于通过第二进程中实现的数据传输接口,接收所述第二进程对所述传输数据的获取请求;
第一发送单元440,用于根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程;
其中,所述第一进程中实现的数据传输接口和所述第二进程中实现的数据传输接口均是基于所述数据传输层定义的数据传输接口实现的。
在本申请的一个实施例中,所述第一写入单元420具体用于:对所述传输数据进行解析,根据解析结果确定所述传输数据的数据类型,其中所述数据类型包括基础数据和/或对象数据;根据所述传输数据的数据类型对所述传输数据进行封装,得到已封装的传输数据;将所述已封装的传输数据写入所述内存空间中。
在本申请的一个实施例中,所述第一写入单元420具体用于:若所述传输数据中包括所述基础数据和所述对象数据,则分别对所述基础数据和所述对象数据进行封装。
在本申请的一个实施例中,所述第一写入单元420具体用于:确定所述对象数据是否已经序列化;若所述对象数据已经序列化,则直接对所述对象数据进行封装;若所述对象数据没有序列化,则记录所述对象数据的对象格式,并对所述对象数据进行封装,以将所述对象数据的对象格式和已封装的对象数据均写入所述内存空间中。
在本申请的一个实施例中,所述第一发送单元440具体用于:根据所述获取请求,从所述内存空间中获取所述传输数据;对所述传输数据进行解析,根据解析结果确定所述传输数据的数据类型,其中所述数据类型包括基础数据和/或对象数据;根据所述传输数据的数据类型对解析后的传输数据进行还原,得到已还原的传输数据;通过所述第二进程中实现的数据传输接口,将所述已还原的传输数据发送给所述第二进程。
在本申请的一个实施例中,所述第一发送单元440具体用于:若所述传输数据中包括所述基础数据和所述对象数据,则分别对所述基础数据和所述对象数据进行还原。
在本申请的一个实施例中,所述第一发送单元440具体用于:从所述内存空间中获取所述对象数据的对象格式;根据所述对象数据的对象格式对所述对象数据进行还原。
在本申请的一个实施例中,所述装置还包括:第一握手检验单元,用于在通过第一进程中实现的数据传输接口,接收所述第一进程的传输数据之后,与所述第一进程进行握手校验;第二写入单元,用于若握手校验成功,则将所述传输数据写入到内存空间中;第二握手检验单元,用于在通过第二进程中实现的数据传输接口,接收所述第二进程对所述传输数据的获取请求之后,与所述第二进程进行握手校验;第二发送单元,用于若握手校验成功,则根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程。
在本申请的一个实施例中,所述装置还包括:内存空间开辟单元,用于若接收到所述第一进程的传输数据,则在所述安卓操作***中开辟内存空间,以将所述传输数据写入到所述内存空间;内存空间释放单元,用于若与所述第二进程握手校验失败,或者所述第二进程的返回参数为数据传输成功,则释放所述内存空间。
需要说明的是,上述各装置实施例的具体实施方式可以参照前述对应方法实施例的具体实施方式进行,在此不再赘述。
综上所述,本申请的技术方案,通过在进程中设置数据传输接口,一次通信连接就可以实现数据的双向传递,改善了数据的传递方向及传递效率;此外,在跨进程数据传输过程中,增加了对象数据等复杂数据类型的传递,该过程无需在进程中实现序列化接口,大大降低了开发成本和开发复杂度。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本申请也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本申请的内容,并且上面对特定语言所做的描述是为了披露本申请的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本申请并帮助理解各个发明方面中的一个或多个,在上面对本申请的示例性实施例的描述中,本申请的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本申请要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本申请的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本申请的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本申请实施例的跨进程数据传输装置中的一些或者全部部件的一些或者全部功能。本申请还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本申请的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
例如,图5示出了根据本申请一个实施例的电子设备的结构示意图。该电子设备500包括处理器510和被安排成存储计算机可执行指令(计算机可读程序代码)的存储器520。存储器520可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。存储器520具有存储用于执行上述方法中的任何方法步骤的计算机可读程序代码531的存储空间530。例如,用于存储计算机可读程序代码的存储空间530可以包括分别用于实现上面的方法中的各种步骤的各个计算机可读程序代码531。计算机可读程序代码531可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(CD)、存储卡或者软盘之类的程序代码载体。这样的计算机程序产品通常为例如图6所示的计算机可读存储介质。图6示出了根据本申请一个实施例的一种计算机可读存储介质的结构示意图。该计算机可读存储介质600存储有用于执行根据本申请的方法步骤的计算机可读程序代码531,可以被电子设备500的处理器510读取,当计算机可读程序代码531由电子设备500运行时,导致该电子设备500执行上面所描述的方法中的各个步骤,具体来说,该计算机可读存储介质存储的计算机可读程序代码531可以执行上述任一实施例中示出的方法。计算机可读程序代码531可以以适当形式进行压缩。
应该注意的是上述实施例对本申请进行说明而不是对本申请进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本申请可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (10)

1.一种跨进程数据传输方法,其特征在于,所述方法应用于安卓操作***中的数据传输层,所述方法包括:
通过第一进程中实现的数据传输接口,接收所述第一进程的传输数据;
将所述传输数据写入到内存空间中;
通过第二进程中实现的数据传输接口,接收所述第二进程对所述传输数据的获取请求;
根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程;
其中,所述第一进程中实现的数据传输接口和所述第二进程中实现的数据传输接口均是基于所述数据传输层定义的数据传输接口实现的;
所述内存空间是指安卓操作***的内存空间,是用于存储数据的缓冲区,任意一个进程能够通过数据传输层将自己的数据存储到内存空间中或者从内存空间中读取数据;
所述数据传输接口用于实现数据的双向传输;
所述将所述传输数据写入到内存空间中包括:
对所述传输数据进行解析,根据解析结果确定所述传输数据的数据类型,其中所述数据类型包括基础数据和/或对象数据;
根据所述传输数据的数据类型对所述传输数据进行封装,得到已封装的传输数据;
将所述已封装的传输数据写入所述内存空间中;
所述根据所述传输数据的数据类型对所述传输数据进行封装包括:
确定所述对象数据是否已经序列化;
若所述对象数据已经序列化,则直接对所述对象数据进行封装;
若所述对象数据没有序列化,则记录所述对象数据的对象格式,并对所述对象数据进行封装,以将所述对象数据的对象格式和已封装的对象数据均写入所述内存空间中。
2.根据权利要求1所述的方法,其特征在于,所述根据所述传输数据的数据类型对所述传输数据进行封装,得到已封装的传输数据包括:
若所述传输数据中包括所述基础数据和所述对象数据,则分别对所述基础数据和所述对象数据进行封装。
3.根据权利要求1所述的方法,其特征在于,所述根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程包括:
根据所述获取请求,从所述内存空间中获取所述传输数据;
对所述传输数据进行解析,根据解析结果确定所述传输数据的数据类型,其中所述数据类型包括基础数据和/或对象数据;
根据所述传输数据的数据类型对解析后的传输数据进行还原,得到已还原的传输数据;
通过所述第二进程中实现的数据传输接口,将所述已还原的传输数据发送给所述第二进程。
4.根据权利要求3所述的方法,其特征在于,所述根据所述传输数据的数据类型对解析后的传输数据进行还原,得到已还原的传输数据包括:
若所述传输数据中包括所述基础数据和所述对象数据,则分别对所述基础数据和所述对象数据进行还原。
5.根据权利要求4所述的方法,其特征在于,所述对所述对象数据进行还原包括:
从所述内存空间中获取所述对象数据的对象格式;
根据所述对象数据的对象格式对所述对象数据进行还原。
6.根据权利要求1所述的方法,其特征在于,
在通过第一进程中实现的数据传输接口,接收所述第一进程的传输数据之后,所述方法还包括:
与所述第一进程进行握手校验;
若握手校验成功,则将所述传输数据写入到内存空间中;
在通过第二进程中实现的数据传输接口,接收所述第二进程对所述传输数据的获取请求之后,所述方法还包括:
与所述第二进程进行握手校验;
若握手校验成功,则根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
若接收到所述第一进程的传输数据,则在所述安卓操作***中开辟内存空间,以将所述传输数据写入到所述内存空间;
若与所述第二进程握手校验失败,或者所述第二进程的返回参数为数据传输成功,则释放所述内存空间。
8.一种跨进程数据传输装置,其特征在于,所述装置应用于安卓操作***中的数据传输层,所述装置包括:
第一接收单元,用于通过第一进程中实现的数据传输接口,接收所述第一进程的传输数据;
第一写入单元,用于将所述传输数据写入到内存空间中;
第二接收单元,用于通过第二进程中实现的数据传输接口,接收所述第二进程对所述传输数据的获取请求;
第一发送单元,用于根据所述获取请求,从所述内存空间中提取所述传输数据并发送给所述第二进程;
其中,所述第一进程中实现的数据传输接口和所述第二进程中实现的数据传输接口均是基于所述数据传输层定义的数据传输接口实现的;
所述内存空间是指安卓操作***的内存空间,是用于存储数据的缓冲区,任意一个进程能够通过数据传输层将自己的数据存储到内存空间中或者从内存空间中读取数据;
所述数据传输接口用于实现数据的双向传输;
所述第一写入单元具体用于:
对所述传输数据进行解析,根据解析结果确定所述传输数据的数据类型,其中所述数据类型包括基础数据和/或对象数据;
根据所述传输数据的数据类型对所述传输数据进行封装,得到已封装的传输数据;
将所述已封装的传输数据写入所述内存空间中;
所述第一写入单元具体用于:
确定所述对象数据是否已经序列化;
若所述对象数据已经序列化,则直接对所述对象数据进行封装;
若所述对象数据没有序列化,则记录所述对象数据的对象格式,并对所述对象数据进行封装,以将所述对象数据的对象格式和已封装的对象数据均写入所述内存空间中。
9.一种电子设备,其中,该电子设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如权利要求1至7中任一项所述的跨进程数据传输方法。
10.一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如权利要求1至7中任一项所述的跨进程数据传输方法。
CN202110023483.7A 2021-01-08 2021-01-08 跨进程数据传输方法、装置、电子设备和存储介质 Active CN112764946B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110023483.7A CN112764946B (zh) 2021-01-08 2021-01-08 跨进程数据传输方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110023483.7A CN112764946B (zh) 2021-01-08 2021-01-08 跨进程数据传输方法、装置、电子设备和存储介质

Publications (2)

Publication Number Publication Date
CN112764946A CN112764946A (zh) 2021-05-07
CN112764946B true CN112764946B (zh) 2024-02-02

Family

ID=75701014

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110023483.7A Active CN112764946B (zh) 2021-01-08 2021-01-08 跨进程数据传输方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN112764946B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113778714B (zh) * 2021-09-13 2024-01-09 北京技德***技术有限公司 一种Linux兼容Android的共享剪切板方法及装置
CN114039963A (zh) * 2021-11-08 2022-02-11 浙江岩华文化科技有限公司 数据传输方法、装置、电子装置和存储介质
CN116166448A (zh) * 2021-11-25 2023-05-26 北京字节跳动网络技术有限公司 一种双向通信方法、装置、设备及介质
CN115202891B (zh) * 2022-09-15 2022-11-15 北京科云时代信息技术有限公司 基于大数据的跨进程数据采集传输方法、***及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103176854A (zh) * 2011-12-26 2013-06-26 腾讯科技(深圳)有限公司 一种进程间通信方法、装置及***
WO2016035340A1 (ja) * 2014-09-04 2016-03-10 セイコーエプソン株式会社 処理装置、及び、データ処理方法
CN106980551A (zh) * 2017-03-24 2017-07-25 山东浪潮商用***有限公司 一种进程通信方法及装置
CN107153583A (zh) * 2017-05-24 2017-09-12 努比亚技术有限公司 一种跨进程交互处理方法、移动终端以及计算机可读存储介质
CN108664491A (zh) * 2017-03-29 2018-10-16 北京京东尚科信息技术有限公司 数据传输方法、装置和终端设备
CN110597640A (zh) * 2019-08-29 2019-12-20 深圳市优必选科技股份有限公司 进程间的数据传输方法、装置、终端及计算机存储介质
CN111400070A (zh) * 2020-03-24 2020-07-10 广州华多网络科技有限公司 终端设备及其跨进程接口调用实现和执行方法
CN112099967A (zh) * 2020-08-20 2020-12-18 深圳市元征科技股份有限公司 数据传输方法、终端、装置、设备及介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107894920A (zh) * 2017-11-09 2018-04-10 广东欧珀移动通信有限公司 资源配置方法及相关产品

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103176854A (zh) * 2011-12-26 2013-06-26 腾讯科技(深圳)有限公司 一种进程间通信方法、装置及***
WO2016035340A1 (ja) * 2014-09-04 2016-03-10 セイコーエプソン株式会社 処理装置、及び、データ処理方法
CN106980551A (zh) * 2017-03-24 2017-07-25 山东浪潮商用***有限公司 一种进程通信方法及装置
CN108664491A (zh) * 2017-03-29 2018-10-16 北京京东尚科信息技术有限公司 数据传输方法、装置和终端设备
CN107153583A (zh) * 2017-05-24 2017-09-12 努比亚技术有限公司 一种跨进程交互处理方法、移动终端以及计算机可读存储介质
CN110597640A (zh) * 2019-08-29 2019-12-20 深圳市优必选科技股份有限公司 进程间的数据传输方法、装置、终端及计算机存储介质
CN111400070A (zh) * 2020-03-24 2020-07-10 广州华多网络科技有限公司 终端设备及其跨进程接口调用实现和执行方法
CN112099967A (zh) * 2020-08-20 2020-12-18 深圳市元征科技股份有限公司 数据传输方法、终端、装置、设备及介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Yuanliang Wu等.Study of Error Control Method for High Performance Unidirectional Data Transmission.《2018 2nd IEEE Advanced Information Management,Communicates,Electronic and Automation Control Conference (IMCEC)》.2018,第1628 - 1631页. *
以太网与同步串行总线接口设计;胡波;《cnki优秀硕士学位论文全文库 信息科技辑》(第03期);第I139-543页 *

Also Published As

Publication number Publication date
CN112764946A (zh) 2021-05-07

Similar Documents

Publication Publication Date Title
CN112764946B (zh) 跨进程数据传输方法、装置、电子设备和存储介质
CN111600909B (zh) 数据处理方法、装置、协议转换设备及存储介质
CN109933443B (zh) 进程间通信方法、装置、计算机设备及可读存储介质
CN109308224B (zh) 跨平台数据通信、跨平台数据处理的方法、装置及***
CN106415506B (zh) 用于调用安全区域的面向对象的编组方案
US7577707B2 (en) Method, system, and program for executing data transfer requests
US6947965B2 (en) System and method for communications in a distributed computing environment
US5375207A (en) Remote processing of a plurality of commands during a session between a first computer and a host computer
US20180027074A1 (en) System and method for storage access input/output operations in a virtualized environment
US20070033291A1 (en) System and method for support of legacy communications protocols in a smart card
WO2017148278A1 (zh) Fix协议的业务实现方法、装置及***
TW200404225A (en) Dynamic wizard interface system and method
CN112615822A (zh) 一种消息处理方法、装置、计算设备及可读存储介质
CN114816707A (zh) 为插件运行创建沙箱环境的方法和装置以及计算设备
US8291432B2 (en) Providing invocation context to IMS service provider applications
JP2006195979A (ja) ウェブアプリケーションアーキテクチャ
CN108846129B (zh) 存储数据访问方法、装置及存储介质
CN111782319A (zh) 在云桌面挂载USBKey实现共享访问的***及方法
US10353700B1 (en) Code base sharing between standalone and web-based versions of an application via an emulated network communication channel
CN108496157B (zh) 使用扩展接口提供运行时跟踪的***和方法
CN113760318A (zh) 信息处理方法、装置、服务器及存储介质
CN111459819B (zh) 软件测试方法及装置、电子设备、计算机可读介质
CN1988479A (zh) 一种记录***信息的方法和对象桩
CN114115871A (zh) 一种页面数据嵌入方法、装置、存储介质及电子设备
US20070033248A1 (en) System and method for support of legacy communications protocols in a smart card

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