AIDL:Android Interface Definition Language,即Android接口定义语言。Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信,AIDL就是其中的一种。
AIDL使用方法:
AIDL服务端的代码:
1、在main文件中新建AIDL文件,如图:
2、在新建的AIDL文件中,声明需要实现的方法:
interface CalculationService {
int getAddNumber(int number1,int number2);
}
3、重要的事情说三遍:1.Build---->make project 2.Build---->make project 3.Build---->make project
PS:若做完这一步你能看见如图的情况,说明成功:
4、写一个类继承的xxx.Stub(xxx即你AIDL文件的名称)
public class CalcultionFunction extends CalculationService.Stub {
@Override
public int getAddNumber(int number1,int number2) throws RemoteException {
return number1+number2;
}
}
5、开一个服务
public class MyService extends Service {
CalcultionFunction function=new CalcultionFunction();
@Override
public IBinder onBind(Intent intent) {
return function;
}
}
6、在清单文件中声明服务
<service android:name=".MyService">
<intent-filter>
<action android:name="com.test.calculation"/>
</intent-filter>
</service>
这是AIDL服务端的代码就写完了,接下来写AIDL服务器端的代码:
7、复制你刚刚的AIDL文件到客户端项目,务必保证包名相同:
8、同样的Build--->make project
9、接下来就可以正常调用服务端提供的AIDL接口中的方法了:
public class MainActivity extends AppCompatActivity {
private TextView tv;
private Button btn;
private Intent binderIntent;
private CalculationService calculationService;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
calculationService = CalculationService.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
binderIntent = new Intent("com.test.calculation");
bindService(binderIntent, serviceConnection, BIND_AUTO_CREATE);
tv= (TextView) findViewById(R.id.tv);
btn= (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
int addNumber = calculationService.getAddNumber(9, 11);
tv.setText("9+11=" + addNumber);
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//断开与远程Service的连接
unbindService(serviceConnection);
}
}
PS:服务端和客户端的AIDL文件的包名必须相同
新建AIDL后需要make project
相关源码下载地址:http://download.csdn.net/detail/wl1769127285/9636344源码下载