AIDL 进程间通讯讲解及实现步骤

本文详细讲解了AIDL(Android Interface Definition Language)的使用,包括server端和服务接口定义,以及client端如何连接并调用服务。在server端实现服务后,通过AIDL接口,当client端bind服务成功,会触发ServiceConnection的onServiceConnected方法,实现进程间的通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

server端的实现

1.创建 aidl文件 (例如ICatl.aidl)


2。创建一个server 并在server中创建一个内部类,继承aidl文件的stub例如:

public class AidlService extends Service {
  
    private CatBinder catBinder;  
    //此处要继承Stub,实现ICat和IBinder接口  
   public class CatBinder extends ICat.Stub
    {  
        @Override  
        public String getColor() throws RemoteException {
//这里做一些操作,获得客户端想要的数据,例如查询数据库
             return "red";

        }  
  
        @Override  
        public double getWeight() throws RemoteException {  
            return 9.9;  
        }  
    }
  
    @Override  
    public void onCreate() {
        super.onCreate();
        Toast.makeText(this,"oncreat",Toast.LENGTH_SHORT).show();
        catBinder = new CatBinder();
    }
  
    @Override  
    public IBinder onBind(Intent intent) {
        return catBinder;
    }  
  
    @Override  
    public void onDestroy() {  
        System.out.println("remote service destroy");  
    }  
}

注意:
如果是eclipse需要在src目录和ICat.aidl相同的包名下创建 Icat.java文件
如果是android studio编译器不用创建 ICat.java 编译器会自动创建
注意使用aidl的server 一定要和aidl文件有相同的包名

client端的实现

1.将服务类的aidl文件拷贝过来 (注意:和service端的aidl一定在一个包名下面
2.需要从服务端获得数据时,绑定服务
Intent intent = new Intent();
intent.setAction("AidlService");
intent.setPackage(包名);
bindService(intent,conn, Service.BIND_AUTO_CREATE)

bind服务成功后回调ServiceConnection的onServiceConnected方法,

    ServiceConnection conn =new ServiceConnection(){

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Toast.makeText(MainActivity.this,"connected",Toast.LENGTH_SHORT).show();
            mICat = ICat.Stub.asInterface(service);
            try {
             String   color = mICat.getColor();
            } catch (RemoteException e) {
                e.printStackTrace();
            }

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值