AIDL入门

以前面试被问到AIDL我就觉得害怕,因为项目中没用到啊。但面试回来后往往又忘记再学习下,下次面试依旧不会。最近学习了下,感觉并没有那么难。

什么是AIDL

AIDL全称“Android Interface Definition Language”,Android接口定义语言。是Android系统上用于进程和进程间通信。

AIDL的实现

实现这样一个案例,DemoB获取DemoA中SharePreferences中的值。

1 服务端实现

服务端不是指服务器,而是我们的DemoA。因为我们最终要实现的是在DemoB上操作获取DemoA上的数据,整个过程没有DemoA的操作。我们直接操作的一端(DemoB)在这个过程中称之为客户端,相应的没有直接操作,提供服务支持的一端(DemoA)称为服务端。

  • 1 创建一个Android项目,为DemoA
  • 2 在项目中创建一个aidl的文件夹
    AndroidStudio已经给我提供了该文件夹的快捷创建方式:
    在这里插入图片描述
  • 3 在aidl文件夹中创建一个aidl文件
    AndroidStudio同样也提供了直接创建该类型文件的方式,上图第一行即是,里面内容如下:
package com.fullcat.demo.a;
interface ISPInterface {
    String getValue(String key);
}

注意第一行包名要与aidl文件所在包名一致。

  • 4 绑定service
    创建一个service,代码如下:
public class RemoteSPService extends Service {

    private IBinder iBinder = new ISPInterface.Stub() {
        @Override
        public String getValue(String key) {
            SharedPreferences sp = getSharedPreferences("demo_a", MODE_PRIVATE);
            String value = sp.getString(key, null);
            return value;
        }
    };

    @Override
    public IBinder onBind(Intent intent) {
        return iBinder;
    }
}
  • 5 在Manifest文件中注册
<service android:name=".RemoteSPService"
         android:exported="true"/>

需要添加android:exported=“true”,客户端无法绑定。

2 客户端实现
  • 1 创建一个Android项目,为DemoB
  • 2 将DemoA中的ISPInterface.aidl 复制到DemoB的aidl文件夹中。DemoB的aidl文件夹中也要有相同的包名
  • 3 绑定远程service,获取IBinder对象
private ISPInterface mIBinder;
...
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.fullcat.demo.a",
                "com.fullcat.demo.a.RemoteSPService"));
bindService(intent, new ServiceConnection() {
	@Override
	public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
		mIBinder = ISPInterface.Stub.asInterface(iBinder);
		}

	@Override
	public void onServiceDisconnected(ComponentName componentName) {
		mIBinder=null
		}
	}, BIND_AUTO_CREATE);
  • 4 调用aidl中定义的方法
if (mIBinder != null) {
		String value = mIBinder.getValue("aidl");
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得食猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值