IPC进程通信机制---------AIDL实战

本文介绍了Android中的AIDL(Android Interface Definition Language)及其在进程间通信(IPC)中的应用。主要内容包括服务端(Service)的实现、客户端(Activity)如何绑定服务及AIDL接口的定义。适用于希望深入了解Android IPC机制的开发者。

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

本篇带你揭开AIDL神秘的面纱:相似知识点:Service通信。

IPC,含义为进程间通信或则跨进程通信,是指两个进程之间进行数据交换的过程。

AIDL: Android interface defination language.

适应读者:熟悉Service通信。

Start:
三点关键点:
1、服务端, Service。
2、客户端,Activity。
3、AIDL接口的创建。


第一点:

public class AIDLService extends Service {

    private final String INFO = "我是另外一个进程的数据信息哦";

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    private Binder mBinder = new IMyAidlInterface.Stub(){

        @Override
        public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {

        }

        @Override
        public String getInfo() throws RemoteException {
            return INFO;
        }
    };
}


并且在xml文件中,定义Service。



第二点:绑定Service。

/**
 * ServiceConnection 进程间通信的桥梁。
 */
ServiceConnection serviceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        IMyAidlInterface inter = IMyAidlInterface.Stub.asInterface(service);
        try {
            Log.e("MainActivity", "==========================" + inter.getInfo());
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    Intent intent = new Intent(this, AIDLService.class);
    bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
}





第三点:定义AIDL接口。

interface IMyAidlInterface {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);

    String getInfo();
}


补充:
【定义形式,如Java接口定义形式】
【特殊注意:AIDL默认支持,基本类型、String、List、Map类型对象,如果需要传递其他引用类型对象,请查看下一篇文章介绍,本篇秉着简单易懂的形式,带你通过AIDL实现IPC机制。】
【特殊注意:当编写完AIDL接口,在AndroidStudio中,你需要手动Build 当前项目,否则,编译器查询不到.aidl文件。。】









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值