Android IPC总结

2021-01-14  本文已影响0人  stoolman

了解Android进程间通信,首先要了解如下几个内容:

下面总结一下主要的几种快进程通信方式

Bundle

Bundle实现了Parcelable接口,可以在进程之间传递。常用与在activity、Service、Receiver之间,通过intent传递数据。使用方法很简单,只能传递bundle支出的数据类型。

文件共享

文件共享的原理很简单:通过对同一个文件的读写,实现进程间通信的目的,但需要处理并发读写的问题,适用于对数据同步要求不高的场景;

Messenger

Messenger实际是对AIDL的封装,分为客户端与服务端。通过消息队列处理消息,不存在并发执行的情况,这种特点适合相应的应用场景。下面简单描述下它的使用方法:

  1. 定义一个Handle处理从client传递过来的message
  2. 通过Handle可以new一个service的messenger,serverMessenger = new Messenger(serverHandler);
  3. service需要重写public IBinder onBind(Intent intent),通过serverMessenger.getBinder(),返回IBinder
  1. 绑定service,绑定时需要new一个ServiceConnection传入,并在onServiceConnected中获取service的messenger(通过IBinder创建);
  2. 定义一个Handle处理从service传递过来的message;
  3. 通过handle可以new一个client的messenger,并将该messenger通过messenger传递,messageToServer.replyTo = clientMessenger;

AIDL

功能强大,支持一对多并发通信,但使用稍复杂。主要适用于有远程调用需求的IPC。相关内容细节很多,这里简单概括一下流程。

ContentProvider

ContentProvider用在不同进程间数据共享,它底层也是binder,是进行了封装,专门用于不同应用间数据共享的。可用于一对多的进程间数据共享,主要提供数据源的CRUD操作。

Socket

socket都可以通过网络进行终端间的通信,进程间通信自然也是可以,这里不做过多介绍,主要用于网络间通信。

上一篇 下一篇

猜你喜欢

热点阅读