AIDL:Android Interface Definition Language,即Android接口定义语言
为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程
百度百科
过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案 一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。我们知道4个Android应用程序组件中的3个(Activity、BroadcastReceiver和ContentProvider)都可以进行跨进程访问,另外一个Android应用程序组件Service同样可以。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。
AIDL作为四大跨进程通讯手段之一,我们就算不能完全掌握它,也需要大概了解下它是如何运行的,下面我就写个小例子去展示它。
我会使用本进程AIDL的使用和跨进程AIDL的使用来讲解它
- 列表内容
新建一个项目,在其中建立一个AIDL文件
interface AIDLTest {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
int add(int x,int y);
int multiplication(int x , int y );
}
上面是定义的AIDL接口,里面有两个方法,一个加法一个乘法,我会在本进程实现加法,在外部进程实现乘法,然后log出来
5.创建一个server
private static final String TAG = "server";
public void onCreate()
{
Log.e(TAG, "onCreate");
}
public IBinder onBind(Intent t)
{
Log.e(TAG, "onBind");
return mBinder;
}
public void onDestroy()
{
Log.e(TAG, "onDestroy");
super.onDestroy();
}
public boolean onUnbind(Intent intent)
{
Log.e(TAG, "onUnbind");
return super.onUnbind(intent);
}
public void onRebind(Intent intent)
{
Log.e(TAG, "onRebind");
super.onRebind(intent);
}
private final AIDLTest.Stub mBinder = new AIDLTest.Stub()
{
@Override
public int add(int x, int y) throws RemoteException
{
return x + y;
}
@Override
public int multiplication(int x, int y) throws RemoteException {