Android Service AIDL

Android Service AIDL

两个进程间通信可以使用AIDL。
第一个应用服务端,首先写一个AidlService.aidl文件:
package com.example.aidl;


interface AidlService{
    String test(String value);
}
然后写一个Service:
public class MyService extends Service {


@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}

Binder binder = new AidlService.Stub() {

@Override
public String test(String value) throws RemoteException {
// TODO Auto-generated method stub
return value;
}
};

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return binder;
}


@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
}

第二个应用客户端,首先声明和第一个服务端一样的aidl文件,然后:

Intent intent = new Intent(AidlService.class.getName());
bindService(intent, conn, Context.BIND_AUTO_CREATE);
aidlService.test("test");
private ServiceConnection conn = new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub

}

@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
// TODO Auto-generated method stub
aidlService= AidlService.Stub.asInterface(arg1);
}
};
开启第一个应用打开后开启服务,第二个应用就能调用第一个服务。从而实现进程间通信。

如果需要传递序列化对象,在之前的基础上:

首先,服务端,创建Rectt.aidl文件
package com.example.aidl;

parcelable Rectt;

之前的AidlService.aidl文件添加
package com.example.aidl;
import com.example.aidl.Rectt;
interface DateService{
    String test(String value);
    int showRect(in Rectt rectt);
}
创建类Rectt
public class Rectt implements Parcelable{

private int i;


public int getI() {
return i;
}


public void setI(int i) {
this.i = i;
}


@Override
public String toString() {
return "Rect [i=" + i + "]";
}


public Rectt(){

}

public Rectt(Parcel parcel){
i = parcel.readInt();
}


public static final Parcelable.Creator<Rectt> CREATOR = new Parcelable.Creator<Rectt>() {


@Override
public Rectt createFromParcel(Parcel arg0) {
// TODO Auto-generated method stub
return new Rectt(arg0);
}


@Override
public Rectt[] newArray(int arg0) {
// TODO Auto-generated method stub
return new Rectt[arg0];
}
};
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}


@Override
public void writeToParcel(Parcel arg0, int arg1) {
// TODO Auto-generated method stub
arg0.writeInt(i);
}


}

客户端把服务端Rectt.aidl,AidlService.aidl,Rectt.java的拷贝,然后和之前一样通信即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值