作家
登录

Android中的IPC机制

作者: 来源: 2017-05-16 09:16:15 阅读 我要评论

  •               return new Book(source); 
  •           } 
  •  
  •           @Override 
  •           public Book[] newArray(int size) { 
  •               return new Book[size]; 
  •           } 
  •       }; 
  •  
  •   } 
  •  
  •       ```java 
  •       // Book.aidl 
  •       package com.example.xiahao.myapplication; 
  •       parcelable Book; 
  •  
  •       // IBookManager.aidl 
  •       package com.example.xiahao.myapplication; 
  •  
  •       // Declare any non-default types here with import statements 
  •       import com.example.xiahao.myapplication.Book; 
  •  
  •       interface IBookManager { 
  •            List<Book> getBookList(); 
  •              void addBook(in Book book); 
  •       }膳绫擎庞个文件中,Book.java是一个表示图手札息的类,它实现了Parcelable接口。Book.aidl 是Book类在AIDL中的声明。IBookManager.aidl是我们定义的一个接口,琅绫擎有两个办法 getBookList() 和addBook(),个中getBookList用于大年夜长途办事端获取图书列表,而addBook是添加一本书。固然Book类已经和IBookManager位于雷同的包中,但IBookManager仍然须要导入Book类,这就是AIDL的特别之处。builde的项目,体系为我们在gen目次下临盆IBookManage.java的类,接下来我们须要根据这个体系生成的IBookManag类来分析Binder的工作道理  /* 
  •        * This file is auto-generated.  DO NOT MODIFY
  •        * Original file: /Users/xiahao/Documents/WorkSpace/AndroidStudioProjects/MyApplication/app/src/main/aidl/com/example/xiahao/myapplication/IBookManager.aidl 
  •        */ 
  •       } 
  • 可以看到根据IBookManager.aidl体系为我们生成了IBookManager.java这个类,它持续了IInterface这个接口,同时它本身也照样个接口,所以可以在Binder中传输的接口都须要持续IInterface接口。

    起首,它声清楚明了两个办法getBookList 和 addBook ,这就是我们在IBookManger.aidl中所声明的办法,同时它还声清楚明了两个整数的id分别用于标识这两个办法,这两个id用标识在transact过程客户端请求的到底是哪个办法。接着,还声清楚明了一个内部类Stub,这个Stub就是一个Biner类,当客户端和办事端都位于同一个过程中,办法调用不会走跨过程的transact过程,而当两者位于不合的过程中,办法须要走transact过程,这个逻辑由Stub的内部代劳类 Proxy来完成。所以这个接口的实现核心就是它的内部类Stud和Stub的内部代劳类 Proxy。

    • DESCRIPTOR

    Binder的独一标识,一般用于当前的Binder的类名表示,比如本例中的 “com.example.xiahao.IBookManger”

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)