当前位置: 首页 > news >正文

哪个网站可以做身份证/关键词排名查询软件

哪个网站可以做身份证,关键词排名查询软件,基于php房产网站开发,室内设计联盟下载从不同角度对Binder的理解: 直观来说,Binder是Android中的一个类,它实现了IBinder接口。从IPC来说,Binder是Android中的一种跨进程通信方式;Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/bind…

从不同角度对Binder的理解:

        直观来说,Binder是Android中的一个类,它实现了IBinder接口。从IPC来说,Binder是Android中的一种跨进程通信方式;Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,该通信方式在Linux中没有;从Android 框架层来说,Binder 是ServiceManager连接各种Manager(ActivityManager、WindowManager,等等)和相应ManagerService的桥梁;从Android应用层来说。Binder是客户端和服务端通信的媒介,当bindService的时候,服务端会返回一个包含了服务端业务调用的Binder对象,通过这个Binder对象,客户端可以获取服务端提供的服务或者数据,这里的服务包括普通服务和机遇AIDL的服务。

      在Android开发中,Binder主要应用在Service中,包括AIDL和Messenger,其中普通Service中的Binder不涉及进程间通信;Messenger的底层是AIDL,所以采用分析AIDL的工作方式来学校Binder还是较好的。

代码分析:

包名:com.myj.example.aidl

文件:Book.java 、Book.aidl和IBookManager.aidl

//Book.java
package com.myj.example.aidlpublic class Book implements Parcelable{public int bookId;public String bookName;public Book(int bookId,String bookName){this.bookId=bookId;this.bookName=bookName;}public int describeContents(){return 0;}public void writeToParcel(Parcel out,int flags){out.writeInt(bookId);out.writeString(bookName);}public static final Parcelable.Creator<Book> CREATOR=new Parcelable.CREATOR<Book>(){public Book createFromParcel(Parcel in){return new Book(in);}public Book[] newArray(int size){return new Book[size];}};private Book(Parcel in){bookId=in.readInt();bookName=in.readString();}
}//Book.aidl
package com.myj.example.aidlparcelable Book;
//IBookManager.aidl
package com.ryg.example.aidlinterface IBookManager{List<Book> getBookList();void addBook(in Book book);
}

方法声明:

getBookList():从远程服务端获取图书列表

addBook():往图书列表添加一本书

虽然Book类已经和IBookManager位于相同的包中,但是在IBookManager.aidl中仍然要导入Book类,这就是AIDL的特殊之处。

在gen目录下的com.myj.example.aidl包中有一个IBookManager.java的类,打开用于分析产生的Binder类。

//IBookManager.java
package com.myj.example.aidlpublic interface IBookManager extends android.os.IIterface{public static abstract class Stub extends android.os.Binder implements com.myj.example.aidl.IBookManager{private static final java.lang.String DESCRIPTOR="com.myj.example.aidl.IBookManager";public Stub(){this.attachInterface(this,DESCRIPTOR);}public static com.myj.example.aidl.IBookManager asInterface(android.os.IBinder obj){if(obj==null){return null;}android.os.IInterface iin=obj.queryLocalInterface(DESCRITOR);if((iin != null) && (iin instanceof com.myj.example.IBookManager)){return ((com.myj.example.aidl.IBookManager)iin); }return new com.myj.example.aidl.IBookManager.Stub.Proxy(obj);}@Overridepublic android.os.IBinder.asBinder(){return this;}@Overridepublic boolean onTransact(int code,android.os.Parcel data,android.os.Parcel reply,int flags) throws android.os.RemoteException{switch(code){case INTERFACE_TRANSACTION:reply.writeString(DESCROPTOR):return this;case TRANSACTION_getBookList():data.enforceInterface(DESCRIPTOR);java.util.List<com.myj.example.aidl.Book> _result=this.getBookList();reply.writeNoException();reply.writeTypedList(_result);return true;case TRANSACTION_addBook:data.enforceInterface(DESCRIPTOR);com.myj.example.aidl.Book _arg0;if(0 != data.readInt()){_arg0=com.myj.example.aidl.Book.CREATOR.createFromParcel(data);}else{_arg0=null;}this.addBook(_arg0);reply.writeNoException();return true;}return super.onTransact(code,data,reply,flags);}private static class Proxy implements com.myj.example.aidl.IBookManager{private android.os.IBinder mRemote;Proxy(android.os.IBinder remote){mRemote=remote;}@Overridepublic android.os.IBinder asBinder(){return mRemote;}public java.lang.String getInterfaceDescriptor(){return DESCROPTOR;}@Overridepublic java.util.List<com.myj.example.aidl.Book> getBookList() throws android.os.RemoteException{android.os.Parcel _data=android.os.Parcel.obtain();android.os.Parcel _reply=android.os.Parcel.botain();java.util.List<com.myj.example.aidl.Book> _result;try{_data.writeInterfaceToken(DESCRIPTOR);mRemote.transact(Stub.TRANSACTIN_getBookList,_data,_reply,0);_reply.readException();_result=_reply.createTypedAArrayList(com.myj.example.aidl.Book.CREATOR);}finally{_reply.recycle();_data.recycle();}return _result;}@Overridepublic void addBook(com.myj.example.aidl.Book book) throws android.os.RemoteException{android.os.Parcel _data=android.os.Parcel.obtain();android.os.Parcel _reply=android.os.Parcel.obtain();try{_data.writeInterfaceToken(DESCRIPTOR);if(book != null){_data.writeInt(1);book.writeToParcel(_data,0);}else{_data.writeInt(0);}mRemote.transact(Stub.TRANSACTION_addBook,_data,_reply,0)_reply.readException();}finally{_reply.recycle();_data.recycle();}}}static final int TRANSACTION_getBookList=android.os.IBinder.FIRST_CALL_TRANSACTION+0;static final int TRANSACTION_addBook=android.os.IBinder.FIRST_CALL_TRANSACTION+1;}public java.util.List<com.myj.example.aidl.Book> getBookList() throws android.os.RemoteException;public void addBook(com.myj.example.aidl.Book book) throws android.os.RemoteException;

理解:这个类的结构很简单,首先,它声明了两个方法getBookList和addBook,显然这就是我们在IBookManager.aidl中所声明的方法,同时声明了两个整型的id分别用于标识这两个方法,用于标识在transact过程中客户端所请求的是哪个方法。

内部类Stub:是一个Binder类,当客户端和服务端都位于同一个进程时,方法调用不会走跨进程的transact过程;当两者位于不同进程时,方法调用需要走transact过程,这个逻辑由内部代理类Proxy来完成。由此可见,这个接口的核心是内部类Stub和Stub的内部代理类Proxy。

下面理解一下它的内部方法:

DESCRIPTOR

Binder的唯一标识,一般用当前Binder的类名表示,比如本例中的"com.myj.example.aidl.IBookManager"

asInterface(android.os.IBinder obj)

未完,待补充。。。

 

 

 

http://www.jmfq.cn/news/4943053.html

相关文章:

  • 做网站好的网站建设公司哪家好/kol推广是什么意思
  • 91福利社区wordpress/长沙百度快速优化排名
  • 做网站必须会/查找关键词的工具叫什么
  • 网站建设 整改报告/中国seo
  • 福建网站开发公司/seo刷排名工具
  • 美国服务器网站推荐/正规seo排名公司
  • django网站开发实例源码/搜索引擎的优化方法
  • 网站开发学哪些/如何查询关键词的搜索量
  • 网站做推广有用吗/今日特大新闻
  • 怎么建设自己网站/网站设计是做什么的
  • seo优化培训多少钱/安卓优化大师官网
  • 上海网站建设高端/杭州seook优屏网络
  • 网站建设的3个阶段/seo关键词优化推荐
  • 怎么查询技术支持公司做的网站/怎么自己刷推广链接
  • 做的网站乱码怎么搞/旺道seo
  • 石家庄网站建设方案/推广普通话心得体会
  • 网站设计手机版为什么那么多背景/优化视频
  • 曲阜做网站哪家好/百度指数网页版
  • 什么网站程序可以做抽奖页面/网络seo是什么意思
  • 织梦医院网站开发/亿速云
  • 移动端电商网站/头条指数
  • 网站如何做浮窗/企业培训公司有哪些
  • 中山中小企业网站建设/yw77731域名查询
  • 排行网站模板/国家市场监督管理总局
  • 响应式网站的组成/360识图
  • wordpress网站地图生成/百度推广时间段在哪里设置
  • 河北手机版建站系统价格/启动互联全网营销推广
  • 凤凰网站建设公司/网站seo哪家好
  • 在线app开发网站建设/百度app免费下载安装
  • 大连网站建设仟亿科技/武汉今日新闻头条