一、概念
二、使用
2.1 Server 端
2.1.1 创建 .aidl 文件
Module右键→New→AIDL→AIDL File(如果不可选,在build.gradle的buildFeatures节点添加aidl true)。

在创建的接口中定义抽象方法。
interface IDemoAidlInterface {
    //自己的业务
    void setName(String name);
    String getName();
} 
 
Rebuild一下,就会生成对应的Java类。Android目录在 java(generated) 里,Program目录在 build/generated/aidl_source_output_dir 里。

 
2.1.2 创建 Service 对外暴露接口
别忘了在 AndroidManifest 中注册Service。
class DemoService : Service() {
    override fun onBind(intent: Intent): IBinder {
        return IDemoImpl()  //返回实现类对象
    }
    //实现接口(注意是.Stub)
    class IDemoImpl : IDemoAidlInterface.Stub() {
        private var name: String = "成功了!"
        override fun setName(name: String?) {
            this.name = name.orEmpty()
        }
        override fun getName(): String = name
    }
} 
 
2.2 Client 端
2.2.1 复制 .aidl 文件
Moudle右键→New→Filder→Aidl Folder 新建文件夹,然后创建和 Server 端相同的包名将 Server 端的 .aidl 文件复制粘贴过去,最后Rebuild一下。

 
2.2.2 AndroidManifest 配置权限
除了之前创建的 Service 需要注册,还要添加查询包的权限,包名是 Server 端的。

2.2.3 启动服务调用API
val conn = object : ServiceConnection {
    override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
        //拿到对象就可以调用各种方法了
        val demoBinder = IDemoAidlInterface.Stub.asInterface(service)
    }
    override fun onServiceDisconnected(name: ComponentName?) {}
}
//开启服务
val intent = Intent()
intent.component = ComponentName("com.jomuiphys.service.service", "com.jomuiphys.service.service.DemoService")
context.bindService(intent, conn, AppCompatActivity.BIND_AUTO_CREATE)
                




![[TPAMI 2022] 神经网络元学习:综述](https://img-blog.csdnimg.cn/img_convert/eefcf81d6d3af456df8a9d3489a3c8f6.gif)












