AIDL简单使用

1.AIDL定义

  AIDL是android interface definition language的缩写,它对android IPC组件Binder进行了封装。使用它不需理会底层IPC的实现,只需要简单的定义接口,然后ADT编译生成IPC需要的java文件。极大的方便了开发者和提升了开发的速度及规范。

2.AIDL的使用

  AIDL使用很简单,只需要三个步骤:

  1)接口的定义

  在aidl文件中定义需要给远程调用的接口,它会被ADT自动编译成java文件

  2)接口的实现

  接口定义好了,需要实现接口

 1     /**
 2      * A secondary interface to the service.
 3      */
 4     private final ISecondary.Stub mSecondaryBinder = new ISecondary.Stub() {
 5         public int getPid() {
 6             return Process.myPid();
 7         }
 8         public void basicTypes(int anInt, long aLong, boolean aBoolean,
 9                 float aFloat, double aDouble, String aString) {
10         }
11     };

   实现好接口后,还需要定义Service,实现它的 onBind 方法,然后在onBind方法中将实现的 binder 对象返回,供远程客户端调用。

  3)接口的调用

  首先在客户端绑定远程服务:

1 bindService(new Intent(ISecondary.class.getName()),
2                         mSecondaryConnection, Context.BIND_AUTO_CREATE);

  然后实现ServiceConnecton接口,在绑定成功后将远端Service的binder 对象返回:

 1         /**
 2          * Class for interacting with the secondary interface of the service.
 3          */
 4         private ServiceConnection mSecondaryConnection = new ServiceConnection() {
 5             public void onServiceConnected(ComponentName className,
 6                     IBinder service) {
 7                 // Connecting to a secondary interface is the same as any
 8                 // other interface.
 9                 mSecondaryService = ISecondary.Stub.asInterface(service);
10                 mKillButton.setEnabled(true);
11             }
12
13             public void onServiceDisconnected(ComponentName className) {
14                 mSecondaryService = null;
15                 mKillButton.setEnabled(false);
16             }
17         };

  最后直接调用之前定义好的接口即可

时间: 2024-10-05 20:02:33

AIDL简单使用的相关文章

android入门教程之AIDL简单入门

最近即将做的一个项目里面需要使用到AIDL(Android Interface Definition Language:接口描述语言)技术,就在麦子学院android开发视频教程上简单瞄了一眼,我的理解它和java中的RMI的概念差不多,于是就自己尝试的测试了下.废话不说了,直接开始  1.既然AIDL是既然是可以在不同进程间进行操作,那么我们首先就需要准备两个项目,我们先来看看不同的两个项目结构式什么样子的.如图:   我们先暂且定义一个项目为"服务器端项目",一个为"客户

AIDL简单示例

1).AIDL简介:AIDL(Android Interface Definition Language),即安卓接口定义语言. AIDL主要是用于进程对远程Service的通信,也就是一个进程采用AIDL可以启动另一个进程的Service,并从该Service中获取数据(通信). 2).具体做法: 1.首先创建一个AIDL接口代码: //com.example.aidl.AidlGetServiceData.aidl package com.example.aidl; interface Ai

android aidl 简单使用

aidl 全称  android interface definition language( 接口定义语言 ) aidl的写法跟javainterface的写法基本一致,不同的是,aidl不能用public修饰,源代码要以.aidl结束. aidl的包名跟我们java源代码的包名是一样的. android studio建立aidl文件: 鼠标在java文件是上右键选择aidl,AS会自动给你创建一个aidl文件. aidl: // IService.aidl package com.lss.a

AIDL介绍以及简单使用

目录 一. AIDL 介绍. 二. AIDL简单应用. Aidl_Server端 Aidl_Client端 三.注意事项 一. AIDL 介绍. AIDL(Android接口描述语言)是一个IDL语言,它可以生成一段代码,可以是一个在Android设备上运行的两个进程使用内部通信进程进行交互. 如果你想在一个进程中(例如在一个Activity中)访问另一个进程中(例如service)某个对象的方法,你就可以使用AIDL来生成这样的代码来伪装传递各种参数. 稍微了解下几个常见的名词(IPC,匿名共

Android-使用AIDL挂断电话

1.AIDL简单操作 package org.zrf.demo; import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method; import android.app.Service;import android.content.Context;import android.content.Intent;import android.media.AudioManager;import andr

Android的IPC机制(一)——AIDL的使用

综述 IPC(interprocess communication)是指进程间通信,也就是在两个进程间进行数据交互.不同的操作系统都有他们自己的一套IPC机制.例如在Linux操作系统中可以通过管道.信号量.消息队列.内存共享.套接字等进行进程间通信.那么在Android系统中我们可以通过Binder来进行进程间的通信.当然除了Binder我们还可以使用Socket来进行进程间的通信.  既然需要进程通信,那么就必须有多个进程.当然,在两个应用交互中必然出现多进程的情况.若是在一个应用中呢?我们

(转载)Android中的Service:Binder,Messenger,AIDL(2)

前言 前面一篇博文介绍了关于Service的一些基本知识,包括service是什么,怎么创建一个service,创建了一个service之后如何启动它等等.在这一篇博文里有一些需要前一篇铺垫的东西,建议没有看过前一篇博文的同学先去看一下前一篇: Android中的Service:默默的奉献者 (1) . 但是在前一篇博文中也有一些遗漏的东西--主要是关于bindService()这一块的具体细节.由于这一块涉及的东西还是比较多,所以在这里单独提出来了.闲话不多说,进入正文. 1.bindServ

Android中的Service:Binder,Messenger,AIDL(2)

前言 前面一篇博文介绍了关于Service的一些基本知识,包括service是什么,怎么创建一个service,创建了一个service之后如何启动它等等.在这一篇博文里有一些需要前一篇铺垫的东西,建议没有看过前一篇博文的同学先去看一下前一篇: Android中的Service:默默的奉献者 (1) . 但是在前一篇博文中也有一些遗漏的东西--主要是关于bindService()这一块的具体细节.由于这一块涉及的东西还是比较多,所以在这里单独提出来了.闲话不多说,进入正文. 正文 1,bindS

IPC(中)

IPC(中) 1 Android中IPC方式 在第一篇IPC(上)中我们已经介绍了IPC的基础知识:序列化和Binder,本篇将详细介绍各种跨进程通讯方式.具体有如下几种: Intent中extras传递 共享文件 Binder ContentProvider Socket 1.1 Bundle 四大组件中的三大组件(Activity,Service,Receiver)都是支持在Intent中传递Bundle数据的,由于Bundle实现了Parcelable接口,所以他可以方便在不同进程间传输,