您当前的位置: 首页 > 

小枫_S

暂无认证

  • 4浏览

    0关注

    42博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AIDL简析使用

小枫_S 发布时间:2016-11-10 15:30:19 ,浏览量:4

AIDL ,Android Interface definition language的缩写,就是经常讲的进程间通信。话就不说太多,直接代码搞起,这里我们创建两个module,都为应用类型的模块,一个客户端应用A,一个作为提供服务的服务端应用B(也是客户端),我们这里写一个简单的计算服务在服务端,然后A调用B的服务实现计算。 我们先创建B模块: 这里写图片描述 看到我圈中的地方,我们在main下跟java平级的地方创建一个aidl的文件夹,接着在aidl下创建跟java下一样的包路径,如下图 这里写图片描述 接着在aidl包下创建一个后缀名为aidl的文件,命名为IMyAidlInterface.aidl,我们可以使用as直接创建aidl格式的文件, 打开自动生成的文件

interface IMyAidlInterface {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);

    int add(int num1,int num2);
}

这是一个接口文件,其中basicTypes是自动生成的方法,在这里我们添加了一个add的方法。 现在我们准备工作做好了,我们来创建A模块,如下图, 这里写图片描述

这张图片是不是有点熟悉,跟上面的一样?细心的同学应该会发现,这圈中的包名是不一样的,这里aidl的文件夹是在我们B模块中直接拷贝过来的。我们调用A端的服务实际上是通过接口调用。 这个时候我们Make project,编译一下工程, 这里写图片描述 在build文件夹generated -source-aidl-debug下会生成一个我们定义的文件,虽然名称一样,但是打开内容是不一样的,有兴趣的同学可以去读这个文件,还是比较好理解的,这里就不多解释。 现在我们回到B模块,编写我们要提供的服务。 我们创建一个Service,如下图 这里写图片描述 这个很简单,就创建一个IBinder对象,在onBind中返回,这个IBinder最后是给A端绑定服务调用add使用的。这里我们add方法就做简单的逻辑处理,将传递过来的两个参数相加并返回。这里可能有的同学会有疑问,这个IMyAidlInterface.Stub是什么鬼,我们也没定义过?其实 这个就是上文提到的编译器自动为我们生成的IMyAidlInterface中定义的,如下图 这里写图片描述 这下清楚了吧。 最后B应用就搞定了,要想服务生效,别忘了这一步,注册

 

———————————–华丽的风格线———————————————- 我们将目光回到A应用 这里写图片描述 绘制下布局,两个输入框一个按钮,具体代码就不说了,直接看Activity,初始化布局 这里写图片描述 然后我们编写点击函数,我这里偷懒在xml中直接调用点击方法,故定义如下 这里写图片描述 这里就做了个容错判断,然后将两个输入框中的数字相加,显示在标题栏,恩,这里又偷懒了下,懒得写多个控件。这里相加调用

myAidlInterface.add(num1, num2)

这个myAidlInterface在那里实例化呢?接着往下看,我们在onResume中绑定服务,在onPause中解绑。如下图: 定义连接对象 这里写图片描述 在这里这个service就是要绑定的远程服务RemoteService中onBind中返回的。myAidlInterface在这里初始化。 这里写图片描述 这里我们隐式调用B端的远程服务(不能直接引用),在绑定前我们做个容错处理,先判断远程服务是否存在,存在就绑定,并将isBinded置为true,解绑也很简单 这里写图片描述 现在A端的代码就写完了,我们来看下运行效果: 这里写图片描述 哈哈,容错处理起作用了,我们编译装下B应用,再次打开A应用 这里写图片描述 输入数,点击相加,看标题栏,成功了。 那本文到此结束。。。

Demo下载地址: http://download.csdn.net/download/q919233914/9679029

关注
打赏
1495089800
查看更多评论
立即登录/注册

微信扫码登录

0.0450s