AIDL和其他的IDL类似,它允许你定义程序接口,以便客户端与服务器端通过IPC机制交互。在android上面,一个进程一般不能访问另外进程的内存。因此,Android平台将这些跨进程访问的对象分解成操作系统能够识别的简单对象。并为跨应用访问而特殊编排和整理这些对象。用于编排和整理这些对象的代码编写起来十分冗长,所以Android的AIDL提供了相关工具来自动生成这些代码。今天,我们开始AIDL的学习。

简单说明

一,AIDL的定义:

它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口

二、AIDL的开发流程:

  • 定义AIDL文件(先在服务端定义,客户端也要定义,内容跟服务端一样)
  • 服务端实现接口
  • 客户端调用接口

具体的aidl的说明:  http://www.cnblogs.com/popapa/p/android_aidl.html

AIDL的简单使用之定义 AIDL 接口

为了测试,我写了aidl服务器端和aidl客户端!

aidl服务器端

项目结构如下:

aaarticlea/png;base64,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" alt="" />

一、 创建.aidl文件:IRemoteAIDL.aidl

// IRemoteAIDL.aidl
package com.huhx.linux; // Declare any non-default types here with import statements interface IRemoteAIDL {
int add(int a, int b);
}

二、 定义服务类:RemoteService.java

package com.huhx.linux.aidlserver;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log; import com.huhx.linux.IRemoteAIDL; public class RemoteService extends Service {
private final static String TAG = "RemoteService"; private IRemoteAIDL.Stub binder = new IRemoteAIDL.Stub() {
@Override
public int add(int a, int b) throws RemoteException {
Log.i(TAG, "a = " + a + ", b = " + b);
return a + b;
}
}; @Override
public IBinder onBind(Intent intent) {
return binder;
}
}

三、 在AndroidManifest.xml文件中声明服务:

<service android:name=".RemoteService" android:enabled="true" android:exported="true" />

aidl客户端

项目结构如下:

aaarticlea/png;base64,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" alt="" />

一、 创建与服务器端一样的aidl文件: IRemoteAIDL.aidl

// IRemoteAIDL.aidl
package com.huhx.linux; // Declare any non-default types here with import statements interface IRemoteAIDL {
int add(int a, int b);
}

二、 在MainActivity中,得到远程服务并调用它的方法。

package com.huhx.linux.aidlclient;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast; import com.huhx.linux.IRemoteAIDL; public class MainActivity extends AppCompatActivity {
private IRemoteAIDL iRemoteAIDL; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
binServices();
} private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
iRemoteAIDL = IRemoteAIDL.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
iRemoteAIDL = null;
}
}; // 绑定服务
private void binServices() {
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.huhx.linux.aidlserver", "com.huhx.linux.aidlserver.RemoteService"));
bindService(intent, conn, Context.BIND_AUTO_CREATE);
} // 处理相加的方法
public void addMethod(View view) {
try {
int result = iRemoteAIDL.add(3, 4);
Toast.makeText(MainActivity.this, "3 + 4 = " + result, Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}

三、 根据aidl文件,android生成的接口如下(可以不关注):

/*
* This file is auto-generated. DO NOT MODIFY.
* Original file: J:\\android\\andridtest\\andridtest\\2016-02-29\\BaseTest8\\aidlclient\\src\\main\\aidl\\com\\huhx\\linux\\IRemoteAIDL.aidl
*/
package com.huhx.linux;
// Declare any non-default types here with import statements public interface IRemoteAIDL extends android.os.IInterface
{
/** Local-side IPC implementation stub class. */
public static abstract class Stub extends android.os.Binder implements com.huhx.linux.IRemoteAIDL
{
private static final java.lang.String DESCRIPTOR = "com.huhx.linux.IRemoteAIDL";
/** Construct the stub at attach it to the interface. */
public Stub()
{
this.attachInterface(this, DESCRIPTOR);
}
/**
* Cast an IBinder object into an com.huhx.linux.IRemoteAIDL interface,
* generating a proxy if needed.
*/
public static com.huhx.linux.IRemoteAIDL asInterface(android.os.IBinder obj)
{
if ((obj==null)) {
return null;
}
android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
if (((iin!=null)&&(iin instanceof com.huhx.linux.IRemoteAIDL))) {
return ((com.huhx.linux.IRemoteAIDL)iin);
}
return new com.huhx.linux.IRemoteAIDL.Stub.Proxy(obj);
}
@Override public android.os.IBinder asBinder()
{
return this;
}
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
{
switch (code)
{
case INTERFACE_TRANSACTION:
{
reply.writeString(DESCRIPTOR);
return true;
}
case TRANSACTION_add:
{
data.enforceInterface(DESCRIPTOR);
int _arg0;
_arg0 = data.readInt();
int _arg1;
_arg1 = data.readInt();
int _result = this.add(_arg0, _arg1);
reply.writeNoException();
reply.writeInt(_result);
return true;
}
}
return super.onTransact(code, data, reply, flags);
}
private static class Proxy implements com.huhx.linux.IRemoteAIDL
{
private android.os.IBinder mRemote;
Proxy(android.os.IBinder remote)
{
mRemote = remote;
}
@Override public android.os.IBinder asBinder()
{
return mRemote;
}
public java.lang.String getInterfaceDescriptor()
{
return DESCRIPTOR;
}
@Override public int add(int a, int b) throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
int _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
_data.writeInt(a);
_data.writeInt(b);
mRemote.transact(Stub.TRANSACTION_add, _data, _reply, 0);
_reply.readException();
_result = _reply.readInt();
}
finally {
_reply.recycle();
_data.recycle();
}
return _result;
}
}
static final int TRANSACTION_add = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
}
public int add(int a, int b) throws android.os.RemoteException;
}

IRemoteAIDL.java

AIDL的简单使用之通过 IPC 传递对象

如果要跨进程传递某个类,可以通过 IPC 接口来实现。 不过,请务必确保在 IPC 通道的对端可以识别该类的代码,该类必须支持 Parcelable 接口。支持 Parcelable 接口非常重要,因为这使得 Android 系统可将对象分解为能够跨进程组装的原生数据。

可按以下步骤创建支持 Parcelable 协议的类:

  1. 必须实现Parcelable 接口。
  2. 实现 writeToParcel 方法,参数为当前对象的状态,并写入一个 Parcel中。
  3. 在类中添加一个名为 CREATOR 的静态成员变量,即为一个实现了 Parcelable.Creator 接口的对象。
  4. 最后,创建 .aidl 文件,声明该 Parcelable 类(如下述 Rect.aidl 文件所示)。

如果采用自定义编译方式,请不要.aidl 文件加入编译项目。与 C 语言的头文件类似, .aidl 文件不会被编译。AIDL 利用上述方法和成员变量来分解和组装对象。

我们在上述的项目基础上做修改,服务器端:

aaarticlea/png;base64,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" alt="" />

一、 修改的IRemoteAIDL.aidl文件:

// IRemoteAIDL.aidl
package com.huhx.linux; import com.huhx.linux.Person; interface IRemoteAIDL {
int add(int a, int b); List<Person> addPerson(in Person person);
}

二、 增加Person.aidl文件:

// Person.aidl
package com.huhx.linux; parcelable Person;

三、 增加Person.java文件,注意它的位置是com.huhx.linux;

package com.huhx.linux;

import android.os.Parcel;
import android.os.Parcelable; /**
* Created by Linux on 2016/5/9.
*/
public class Person implements Parcelable {
public String username;
public String password; public Person(String username, String password) {
this.username = username;
this.password = password;
}
protected Person(Parcel in) {
username = in.readString();
password = in.readString();
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(username);
dest.writeString(password);
}
}

这里,之前是放在com.huhx.linux.aidlclient下的,但是处理起来总是报错。不知道是否要求aidl的包名与序列化类的包名一致?

三、 修改RemoteService.java文件

public class RemoteService extends Service {
List<Person> persons = new ArrayList<>();
private final static String TAG = "RemoteService"; private IRemoteAIDL.Stub binder = new IRemoteAIDL.Stub() {
@Override
public int add(int a, int b) throws RemoteException {
Log.i(TAG, "a = " + a + ", b = " + b);
return a + b;
}
@Override
public List<Person> addPerson(Person person) throws RemoteException {
persons.add(person);
return persons;
}
};
@Override
public IBinder onBind(Intent intent) {
return binder;
}
}

我们在上述的项目基础上做修改,客户端:

aaarticlea/png;base64,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" alt="" />

aidl文件以及Person类与服务器端的一样,这里不做说明,在MainActivity中增加测试的方法。

// 添加一个方法
public void addPerson(View view) {
Person person1 = new Person("Linux", "123456");
Person person2 = new Person("Huhx", "654321");
int length = 0;
try {
iRemoteAIDL.addPerson(person1);
length = iRemoteAIDL.addPerson(person2).size(); Toast.makeText(MainActivity.this, "list size: " + length, Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
e.printStackTrace();
}
}

最新文章

  1. x8086汇编实现dos清屏(clear screen)
  2. 黄聪:说说JSON和JSONP,也许你会豁然开朗(转)
  3. typeid详解
  4. 161108、Java IO流读写文件的几个注意点
  5. bzoj 1391 [Ceoi2008]order(最小割)
  6. AOP(以MVC中的过滤器为例)
  7. oracle 内置函数 least decode
  8. NancyFx 2.0的开源框架的使用-Stateless
  9. BZOJ:4530: [Bjoi2014]大融合
  10. protel dxp 2004安装与破解
  11. python 模拟百度搜索
  12. memcached分析
  13. ABS PBT POM材质键冒
  14. jquery ----&gt; How to Create a Basic Plugin (翻译)
  15. Python基础学习Day2
  16. openCV基础知识
  17. 连接到win2003的远程桌面,客户端要如何操作
  18. Docker 图形化页面管理工具使用
  19. springboot 中使用事务
  20. Vue(五):Vue模板语法

热门文章

  1. buildroot 制作的文件系统烧入到nand中打开设备没有权限
  2. [uart]stty命令使用
  3. Iconfont在移动端遇到问题的探讨
  4. js学习笔记19----getElementsByClassName函数封装
  5. 【学习笔记】jQuery中的动画与效果
  6. Qt 事件处理的五个层次
  7. Wellner 自适应阈值二值化算法
  8. php jquery pjax示例源码 (ajax请求,并改变url)
  9. linux,ubuntu14.04.5下安装搜狗输入法
  10. Jmeter在命令行运行技巧