AIDL语言的语法和Java其实很像,你甚至可以先编写一个Java接口,然后删掉public、protected、private这些权限限定词即可。例子如下IWxbService.aidl:
package com.dumaisoft.wxbremoteservice;
interface IWxbService {
void setName(String name);
String getName();
}
注意几点:
1.接口名和aidl文件名相同。
2.接口和方法前不用加访问权限修饰符public,private,protected等,也不能用final,static。
3.Aidl默认支持的类型包话java基本类型(int、long、boolean等)和(String、List、Map、 CharSequence),使用这些类型时不需要import声明。对于List和Map中的元素类型必须是Aidl支持的类型。如果使用自定义类型作 为参数或返回值,自定义类型必须实现Parcelable接口。
4.自定义类型和AIDL生成的其它接口类型在aidl描述文件中,应该显式import,即便在该类和定义的包在同一个包中。
5.在aidl文件中所有非Java基本类型参数必须加上in、out、inout标记,以指明参数是输入参数、输出参数还是输入输出参数。
6.Java原始类型默认的标记为in,不能为其它标记
IWxbService.aidl文件的位置是在com.dumaisoft.wxbremoteservice包中,只要语法正确,则会在ADT的gen目录下的com.dumaisoft.wxbremoteservice包中生成java文件IWxbService.java。
IWxbService.aidl定义了一个远程接口,它包含两个方法getName和setName。
第三步,编写服务类
添加一个WxbService类,它继承了Service类,源代码如下:
package com.dumaisoft.wxbremoteservice;
import com.dumaisoft.wxbremoteservice.IWxbService.Stub;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
public class WxbService extends Service {
private ServiceImpl serviceImpl;
//继承由IWxbService.aidl生成的com.dumaisoft.wxbremoteservice.IWxbService.Stub类
class ServiceImpl extends Stub{
private String _name;
@Override
public void setName(String name) throws RemoteException {
_name = name;
}
@Override
public String getName() throws RemoteException {
return _name;
}
}
//将ServiceImpl做一个简单的单例模式
private ServiceImpl getInstance(){
if(serviceImpl == null){
serviceImpl = new ServiceImpl();
}
return serviceImpl;
}
@Override
public IBinder onBind(Intent intent) {
return getInstance();
}
}










