1. O que é AIDL?
Android AIDL (Android Interface Definition Language) é uma linguagem de descrição de interface
usada para implementar comunicação entre processos (IPC) no sistema Android.
AIDL permite que dados sejam transmitidos entre diferentes processos e pode lidar com solicitações simultâneas.
2. O princípio do Android AIDL
A seguir está uma explicação detalhada dos princípios do Android AIDL:
2.1 Definir arquivo AIDL
No sistema Android, o arquivo AIDL é um tipo de arquivo .aidl usado para definir a interface IPC.
Um arquivo AIDL contém uma ou mais declarações de método que podem ser usadas para fazer chamadas IPC entre o cliente e o servidor.
Por exemplo:
// MyAidl.aidl
package com.example;
interface MyAidl {
void myMethod(in String arg);
}
2.2 Crie o método no arquivo AIDL
Os métodos definidos em arquivos AIDL podem ser implementados tanto no cliente quanto no servidor.
Esses métodos devem usar modificadores específicos (como in, out, in|out) para especificar o método de passagem de parâmetros. Por exemplo:
// 服务端实现
public class MyService implements MyAidl {
@Override
public void myMethod(String arg) {
// 实现逻辑
}
}
// 客户端实现
public class MyActivity extends Activity {
private MyAidl mService;
@Override
protected void onServiceConnected() {
Intent intent = new Intent("com.example.MY_SERVICE");
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
mService = MyAidl.Stub.asInterface(iBinder);
try {
mService.myMethod("Hello AIDL");
} catch (RemoteException e) {
e.printStackTrace();
}
}
};
}
2.3 Declarar o arquivo AIDL em AndroidManifest.xml
No arquivo AndroidManifest.xml, o arquivo AIDL deve ser declarado para que o sistema possa reconhecer e criar o processo do servidor. Por exemplo:
<service android:name=".MyService" android:exported="true">
<intent-filter>
<action android:name="com.example.MY_SERVICE" />
</intent-filter>
</service>
2.4 Usando Parcelable e Binder para IPC
Durante a chamada IPC, use o objeto Parcelable para transferir dados.
Binder é um mecanismo de comunicação entre processos no sistema Android, que permite o compartilhamento de dados entre diferentes processos.
Através do Binder, o cliente pode chamar o método no servidor, e o servidor também pode acessar os dados do cliente.
2.5 Chame o método no arquivo AIDL no cliente
No cliente, vincule o processo do servidor por meio do método bindService() e use o método Stub.asInterface() para converter o objeto IBinder em um objeto de interface AIDL. Então, você pode chamar diretamente o método definido no arquivo AIDL. Por exemplo:
mService.myMethod("Hello AIDL");
2.6 Implementar o método no arquivo AIDL no servidor
No lado do servidor, todos os métodos definidos no arquivo AIDL devem ser implementados.
Durante a implementação, os parâmetros podem ser passados usando classes Java ou objetos Parcelable customizados.
Por exemplo:
public class MyAidlImpl extends MyAidl.Stub {
@Override
public void myMethod(String arg) throws RemoteException {
// 实现逻辑
}
}