android 跨进程通讯

 

        android夸进程通讯的知识也看了不少,但感觉还是不能够彻底理解,现在写下自己的理解,后期再进行改正和补充。

       

        1 什么是aidl?

         android接口定义语言,用于IPC(内部进程间通讯),用aidl我们可以定义进程间的通讯接口。

        2 为什么要用aidl?

         android官方给出的答案是:只有当你允许不同客户端的APP访问你的服务,并且需要处理多线程问题时才使用AIDL。如果不考虑并发可以使用Binder,如果不考虑多线程可以使用Messenger.

        3 如何使用aidl?

           1)服务端定义aidl接口文件(AidlService)

           2)定义服务(RemoteService),实现AidlService.Stub中的方法,在onBind方法中返回 AidlService.Stub

           3)客户端也添加aidl文件,通过bindservice(intent,conn,Context.BIND.AUTO.CREATE)启动服务,在conn的onServiceConnected中获取Ibinder对象,然后通过AidlService.Stub.asInterface(ibinder) 获取AidlService的proxy类,实现对RemoteService方法的调用。

扫描二维码关注公众号,回复: 243097 查看本文章

         4、aidl原理

           1)定义的aidl文件(AidlService.aidl),clean/rebuild之后,会在gen目录下生成一个同名.java文件。代码主要由2部分构成:代理类Proxy 和 抽象类Stub。Stub 继承Binder类,实现AidlService接口,Proxy实现AidlService接口。

           2) 在RemoteService的onBind中将 AidlService.Stub的实现返回。

           3)客户端通过AidlService.Stub.asInterface(iBinder) 获取到Proxy类,通过proxy调用方法时,会通过调用iBinder的trancact方法,调用到远程服务端的stub的onTrancact方法,具体怎么调用交给aidl实现。onTrancate通过参数调用不同方法,然后返回。

 

     

猜你喜欢

转载自348.iteye.com/blog/2353342