AIDL学习

            http://blog.csdn.net/guolin_blog/article/details/9797169  这个博客写的很详细

            AIDL可以实现进程间通信,bindService()调用会回调 Service的onBind()函数, return 一个 IBinder变量 

           一般Activity与Service之间的交互就通过这个IBinder 接口进行交互。

           若是同线程的Service,之前看到的代码中是新建一个Binder类,去实现一些方法,然后将这个Binder变量return 出去。

          这样Activity在ServiceConnnection 的回调方法public void onServiceConnected(ComponentName name, IBinder service) 中 会得到这个               IBinder, 将其强转之后,可以使用其暴露出来的方法。

 

         对于不同进程之间的通信,需要用到AIDL, 首先需要定义一个AIDL文件, 新建一个interface,去定义几个方法。 ADT会自动在Gen目录下生成相同名字的.java文件。

        在Service类中,我们不需要新建Binder类, 而是需要新建一个AIDL类对象, 例如 MyService.aidl

         

    MyService.Stub myService= new Stub() {

      //在这里 实现aidl中声明的接口方法 
     }

         Stub是AIDL的一个抽象接口,本身是Binder的继承。

       所以在 onBinder()中将其return。

       那么在onServiceConnected(ComponentName name, IBinder service)中,我们接收到的service 需要将其转为AIDL ,通过stub的asInterface()将其转换,

       

     
private   MyAIDLService   myAIDLService;
 myAIDLService =MyAIDLService.Stub.asInterface(service);

      这样我们就可以使用 myAIDLService去使用其暴露的接口了。

       通过我们在AIDL中定义的接口,可返回一些基本类型的数据,但是如果我们想返回一个特定的类该怎么办呢?

posted on 2014-02-20 15:17  小白说我是2B  阅读(243)  评论(0编辑  收藏  举报

导航