Android IPC机制(一)

Android IPC简介

IPC是Inter-ProcessCommutication的缩写,是进程间通信的意思 ,而进程是由线程组成的,线程是CPU调度的最小单元。

多进程产生的问题

1、静态变量和单例模式完全失效 
2、线程同步机制完全失效 
3、SharePrefernces的可靠性降低 

4、Application会被多次创建

实现Android跨进程通信的方式

名称优点缺点适用场景
Bundle简单易用只能传输Bundle支持的数据类型四大组件间的进程通信
文件共享简单易用不适合高并发场景,并且无法做到进 程间的及时通信无并发访问情形,交换简单 的数据实时性不高的场景
AIDL功能强大。支持一对多 并发通信,支持实时通信使用稍复杂,需要处理好线程同步一对多通信且有RPC需求
Messenger功能一般,支持一对多串行 通信,支持实时通信不能很好的处理高并发情形,不支持 RPC,数据通过Messenger进行传输, 因此只能传输Bundle支持的数据类型低并发的一对多的即时通信, 无RPC需求,或者无需要返回 结果的RPC需求
ContentProvider在数据源方面访问方面强大, 支持一对多并发数据共享,可 通过Call方法扩展其他操作可以理解成受约束的AIDL,主要提供 数据源的CRUD操作一对多的进程间的数据共享
Socket功能强大,可以通过网络传输 字节流,支持一对多并发实时通信实现细节稍微繁琐,不支持直接的RPC网络数据交换
(此表主要参考开发艺术探索)
实现Android跨进程通信的要点

要想在线程间实现线程通信那么对象必须能够序列化,类实现序列化的方法有两种

一 实现Serializable接口,作为系统序列化和反序列化的标记,再次我们要注意,给类增加ID,在反序列化时能够识别为同一个类。

二 实现Parcelable接口

public class Book implements Parcelable{

    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Book() {
    }

    public Book(int id, String name) {
        this.id = id;
        this.name = name;
    }

    protected Book(Parcel in) {
        this.id=in.readInt();
        this.name=in.readString();
    }

    public static final Creator<Book> CREATOR = new Creator<Book>() {
        @Override
        public Book createFromParcel(Parcel in) {
            return new Book(in);
        }

        @Override
        public Book[] newArray(int size) {
            return new Book[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;//返回对象的内容描述,如果含有文件描述返回1,几乎所有情况都返回0
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(id);
        parcel.writeString(name);

    }


}

这两种序列化的方式中Serializable使用比较简单,但是开销大,效率比较低,适合相对较小的数据。Parcelable则使用起来稍

复杂,但是Android推荐序列化方式,开销小,效率比较高。

Binder

Binder是一个类,一个实现了IBinder接口的类,从IPC的角度来讲它是一种跨进程的通信方式,从Framwork角度来讲,Binder是ServiceManager 

链接各种manager(ActivityManager 、WindowManager等)和相应ManagerService的桥梁。具体可以通过AIDL来了解。

介绍了相关的IPC知识那么下一篇我们将介绍IPC具体的实现方法。












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值