zoukankan      html  css  js  c++  java
  • 绑定Service的三种实现方式之使用AIDL

    AIDL全称为Android Interface Definition Language,它可以使你的程序实现进程间通信(IPC),并且在实现IPC的基础上允许多线程访问。

    首先,我们要创建一个自己的.aidl文件(见Demo中的IRemoteService.aidl)。

    定义AIDL文件与java中创建接口非常的类似。一般来说,aidl支持的数据类型有五种:java基本数据类型;String;CharSequence;List;Map。其中List和Map较为特殊(http://developer.android.com/guide/components/aidl.html#Create)。如果你使用的数据类型不是AIDL的基本数据类型,你必须要使用import语句将其导入,即使他们是在同一个package下。声明方法时,方法的参数可以零到多个,返回值可以是void;所有的非基本数据类型都需要指定是传入还是传出值(基本数据类型都是传入值;在AIDL文件中不能声明静态字段)

    其次,我们要实现我们上面刚刚创建的接口(见Demo中StudentService中的mBinder)。

    假设我们有一个AIDL文件叫IRemoteService.aidl,当我们编译我们的项目的时候,android的ant能将我们的AIDL文件生成为java文件(放在gen/下面)。这个java文件中有一个抽象内部类Stub(继承了Binder类)实现了我们的接口,并提供了一个asInterface方法将IBinder对象转化为我们的接口类型。因为实现我们的接口就转化为实现其抽象内部类Stub(Service端的业务函数全部在这里实现)。

    再次,将我们的接口暴露给客户端(注意Demo在Server端AndroidManifest.xml中对StudentService的声明)

    将我们的接口暴露给客户端实际上就是:在Service的onBind函数中将我们的Stub类的实例反出去。

    这样,Service端的工作就完成了!

    那么,怎样通过IPC传递对象呢(见Demo中的Student.java和Student.aidl)?

    如果你想在进程间传递对象,那么对象就必须实现Parcelable接口。而实现这个接口需要我们完成以下几步:

    1、在声明对象的时候实现Parcelable接口

    2、实现writeToPacel方法

    3、添加一个叫做CREATOR的静态变量(这个变量要实现Parcelable.Creator接口)

    4、创建一个AIDL文件来声明这个实现了Parcelable接口的类

    这样我们就可以在AIDL中使用对象了。

    客户端怎么对Service端的方法进行调用呢?

    其实很简单,只需要一下几步就可以了(见Demo中的Client中的代码)。

    1、将Server端使用的.aidl文件拷贝到client程序中,如果你的aidl文件仅仅是对实现了Parcelable接口的类的说明,那么,对应的java文件也要拷贝过去。(注意包名,具体可参考Demo的client端对Sever端AIDL文件的导入)

    2、编译client程序,将在gen/目录下生成AIDL对应的的类文件

    3、实现ServiceConnection接口。在onServiceConnected方法中,使用AIDL生成的Java文件的函数(内部类Stub的asInterface)将onServiceConnected函数的中IBinder参数转化为AIDL生成的接口对象。

    4、根据第3步得到的对象来调用AIDL中的函数。

    5、调用bindService函数执行绑定操作(解绑使用unbindService函数)

    到这里,AIDL的使用讲解就结束了。推荐你结合本文的Demo来读这篇文章,相信会让你受益匪浅的。

    Demo链接:http://pan.baidu.com/share/link?shareid=587849&uk=2953765628

  • 相关阅读:
    java.net.BindException: Address already in use: bind
    修改Oracle 10g Express Edition默认的8080端口
    五虎
    easily add files to META-INF in NetBeans
    http://edu.makery.ch/
    JavaFX 2 Dialogs
    JavaFx版本植物大战僵尸
    CSS样式表——布局练习(制作360网页)
    CSS样式表
    CSS样式表——超链接样式
  • 原文地址:https://www.cnblogs.com/Lefter/p/3097082.html
Copyright © 2011-2022 走看看