美文网首页
android之AIDL介绍

android之AIDL介绍

作者: Lee_5566 | 来源:发表于2020-12-22 10:41 被阅读0次
    image.png

    AIDL(代理)

    AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。

    可以看出,AIDL是一种语言。

    设计AIDL这门语言的目的是为了实现进程间通信,尤其是在涉及多进程并发情况下的进程间通信。

    每一个进程都有自己的Dalvik VM实例,都有自己的一块独立的内存,都在自己的内存上存储自己的数据,执行着自己的操作,都在自己的那片狭小的空间里过完自己的一生。

    每个进程之间都你不知我,我不知你,就像是隔江相望的两座小岛一样,都在同一个世界里,但又各自有着自己的世界。

    而AIDL,就是两座小岛之间沟通的桥梁。

    我们可以通过AIDL来制定一些规则,规定它们能进行哪些交流——比如,它们可以在我们制定的规则下传输一些特定规格的数据。

    通过这门语言,可以愉快的在一个进程访问另一个进程的数据,甚至调用它的一些方法,当然,只能是特定的方法。

    数据类型

    默认支持的数据类型包括:

    • Java中的八种基本数据类型,包括 byte,short,int,long,float,double,boolean,char。
      String 类型。
    • CharSequence类型。
    • List类型:List中的所有元素必须是AIDL支持的类型之一,或者是一个其他AIDL生成的接口,或者是定义的parcelable(下文关于这个会有详解)。List可以使用泛型。
    • Map类型:Map中的所有元素必须是AIDL支持的类型之一,或者是一个其他AIDL生成的接口,或者是定义的parcelable。Map是不支持泛型的。

    AIDL实例文件:

    // Book.aidl
    //第一类AIDL文件的例子
    //这个文件的作用是引入了一个序列化对象 Book 供其他的AIDL文件使用
    //注意:Book.aidl与Book.java的包名应当是一样的
    package com.lypeer.ipcclient;
    
    //注意parcelable是小写
    parcelable Book;
    
    // BookManager.aidl
    //第二类AIDL文件的例子
    package com.lypeer.ipcclient;
    //导入所需要使用的非默认支持数据类型的包
    import com.lypeer.ipcclient.Book;
    
    interface BookManager {
    
        //所有的返回值前都不需要加任何东西,不管是什么数据类型
        List<Book> getBooks();
        Book getBook();
        int getBookCount();
    
        //传参时除了Java基本类型以及String,CharSequence之外的类型
        //都需要在前面加上定向tag,具体加什么量需而定
        void setBookPrice(in Book book , int price)
        void setBookName(in Book book , String name)
        void addBookIn(in Book book);
        void addBookOut(out Book book);
        void addBookInout(inout Book book);
    }
    

    相关文章

      网友评论

          本文标题:android之AIDL介绍

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