美文网首页
进程间的六种通信

进程间的六种通信

作者: isLJli | 来源:发表于2020-06-27 11:27 被阅读0次

进程间的通信

进程间的通信有6种:Bundle、文件共享、ContentProvider、AIDL、Messenger、Socket

3.1、Bundle篇

假设现在我们有两个activity,分别处于不同的进程,要给跳转到另一个进程的activity并传递数据,我们可以通过Bundle的put/get存取数据,然后通过Intent.put/getExtras来。存取bundle数据。

给不同进程发送数据代码:

image

接收数据代码:

image

3.2、共享文件篇

共享文件就是通过两个进程共读/写同一个文件的内容。

第一个activity在跳转到其他进程之后,做了一个写入数据到文件的操作

image

另一个进程activity则读取这个文件的数据:

image

3.3、ContentProvider

以前我也被contentProvider和contentResolver这两个东西有点糊里糊涂。

因为这两个该有的方法都一样,getType、insert、update、delete、query的功能和实现上都一模一样,那为什么要定义两个不同的抽象类呢?其实 它们是有分工的,如果你想你的数据被别人访问,那你就要继承ContentProvider并根据自己要提供的特定数据重写里面的getType、query、insert、update、dalete,记得要在manifest中注册。如果你的项目有继承重写ContentProdier,那么在你context.getContentResolver()得到的contentResolver就用你重写的类的方法,如果没有就用系统提供的ContentProvider提供的方法。

实质上ContentProvider还是通过文件共享的读取来实现数据的跨进程共享。ContentProvider的底层也是由binder实现,只有onCreat是运行在UI线程中,其他方法都是在Binder的线程池中(耗时操作)。

一个类继承了ContentProvdier抽象类代码:

image

3.4、AIDL

还记得我们写service的时候,有一种bindService绑定可以跟随activity的关闭而关闭,但是在继承service页面的时候,我们要在里面实现一个内部类并继承BInder,并在里面写我们想要操作的方法,然后通过onBind方法传给启动的activity。

Aldl的文件其实也是Ibinder,不过是把它变成接口,并把我们的要操作的方法写成抽象方法在实例的时候为它们重写。

service通过AIDL实现代码Binder。

image

3.4、Messenger

3.5、Socket

怎样开启多进程

android开启多进程很简单,只要在manifest文件给activity、service的process属性设置进程名就可以了。其中有两种方式设置进程名:一种是你直接自定义整个进程的名字,一种是:单词,意思是"包名:单词"是它的进程名。

image

实现多进程

2.序列化接口

java的Serializable和安卓自己的Parcelable,一般会用在我们的javaBean类上。Parcelable的效率更高,原因是Serializable要通过大量的IO操作和反射,要新建很多临时变量。

实现Serializable的方式很简单,类直接实现Serializable的接口就行了,不过它里面的调用的类也要实现Serializable,不然会报错。

实现Parcelable的方式稍微麻烦些,类要实现Parcelable的接口,并实现接口里面的两个抽象类describeContents、writeToParcel,其中describeContents总是返回0,writeToParcel是将对象写入序列dest中。还要在类中实现一个非空的静态实现了Parcelable.Creator接口的CREATOR,和一个带parcel参数的构造方法,用于反序列化。

实现抽象方法用于序列化

image

序列化代码

自写两方法用于反序列化:

image

反序列化代码

相关文章

  • 进程间的六种通信

    进程间的通信 进程间的通信有6种:Bundle、文件共享、ContentProvider、AIDL、Messeng...

  • linux进程间通信(1)

    一、进程通信概述 1、什么是进程间通信?什么是线程间通信? 进程间通信: 进程间通信就指的是用户空间中进程A与进程...

  • 进程间的通信

    进程间的通信主要分为本机器进程间的通信和不同机器间进程的通信。本文主要描述本机进程间的通信。 一、传统Linux的...

  • 第二十三章 进程间通信介绍(一)

    本章目标: 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对...

  • 进程间通信

    进程间通信 进程空间相对独立,资源无法相互获取,此时在不同进程间通信需要专门方法 进程间通信就是在不同的进程间进行...

  • 进程管理(五)进程间通信、死锁

    (一)进程间通信 除了同步和互斥外,进程间还有其他的通信手段。 进程间的通信 --> IPC (InterProc...

  • 进程间通信,线程间通信

    进程间通信 进程间通信又称IPC(Inter-Process Communication),指多个进程之间相互通信...

  • Android IPC机制

    IPC 即Inter-Process-Communication,含义是进程间通信/跨进程通信。是指多个进程间通信...

  • 【python】进程间通信:Queue的详细用法

    关于python 进程间通信 Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信。 进程间通...

  • 6. 进程间通信

    参考链接:1. 进程间通信及使用场景2. 进程间通信机制IPC3. 看图理解进程间通信IPC==重点4. 进程间通...

网友评论

      本文标题:进程间的六种通信

      本文链接:https://www.haomeiwen.com/subject/etjqvhtx.html