导引:
AIDL:Android Interface Definition Language,就是Android接口定义语言,为了实现进程间通信
流程:所谓的C/S模式,服务端(S):AIDL(1,2)+Service(3)+客户端(C)(4)
AIDL(1,2):目的就是为了生成FService.java文件.里面有IInterface,Stub,asInterface,onTransact,Proxy,IBinder等
1:在java 源码同级目录新建aidl目录
2:在aidl目录下定义.aidl文件,比如FService.aidl,保存后自动在generated里生成FService.java文件
package com.Service.aidl;
interface FService{
int open(int num);
}
3:定义MyService并在AndroidManifest.xml中注册,在MyService中初始化FService并返回
<service android:name=".service.MyService">
<intent-filter>
<action android:name="com.zacloud.device_service" />
</intent-filter>
</service>
public class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public IBinder onBind(Intent arg0) {
return mBinder;
}
private final FService.Stub mBinder = new FService.Stub() {
public int getPid(){
return Process.myPid();
}
public void basicTypes(int anInt, long aLong, boolean aBoolean,
float aFloat, double aDouble, String aString) {
}
};
}
客户端(C):绑定service并初始化后调用服务器端方法
4:直接在activity中绑定和解绑MyService,并初始化FService后直接调用里面的方法
private FService fService;
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
fService= IRemoteService.Stub.asInterface(service);
}
};
fService.open(50);
Intent intent = new Intent(this, MyService.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);