Introducción al uso de AIDL

Tabla de contenido

AIDL

Cómo usar el servidor

Cómo usar el cliente

 


AIDL

AIDL (Android Interface Define Language) es un método de comunicación IPC, podemos usarlo para definir la interfaz para que dos procesos se comuniquen entre sí. Su esencia es la arquitectura C/S, que requiere un servidor y un cliente.

Cómo usar el servidor

Primero agregue un módulo como servidor y cree un directorio aidl en el directorio principal.

Comience a crear el archivo aidl IMyAidlInterface.aidl y agregue métodos de interfaz en el archivo aidl.

interface IMyAidlInterface {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);
    String getWord();
    void setWord(String word);
}

Compile el programa y podrá ver el archivo JAVA generado automáticamente en el archivo java (generado) en modo Android: archivo IMyAidlInterface.java

Escriba la clase de servicio, declare un objeto IBinder dentro de MyService, que es una instancia de IMyAidlInterface.Stub implementada de forma anónima, e implemente el método declarado en aidl en la instancia de IMyAidlInterface.Stub para que el cliente llame.

public class MyService extends Service {
    private static final String TAG = "MyService";
    private String myWord;

    private IMyAidlInterface.Stub mBinder = new IMyAidlInterface.Stub() {
        @Override
        public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {

        }

        @Override
        public String getWord() throws RemoteException {
            return myWord;
        }

        @Override
        public void setWord(String word) throws RemoteException {
            myWord = word;
            Log.d(TAG, "setWord:" + word);
        }
    };
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

Cómo usar el cliente

El cliente es el mismo que el servidor, cree un nuevo directorio aidl, copie el aidl en el servidor al cliente, tenga en cuenta que el directorio del paquete de archivos aidl copiado en el cliente debe ser consistente con el servidor y compile el proyecto al mismo tiempo. tiempo después de la copia, para que el cliente también genere el archivo java correspondiente

Implemente la interfaz ServiceConnection, llame a bindService para vincular el servicio y pase la instancia de ServiceConnection generada; en la implementación de onServiceConnected(), se recibirá la instancia de IBinder recibida (servicio con nombre). Llame a XXX.Stub.asInterface((IBinder)service) para convertir el parámetro devuelto al tipo de interfaz generado por AIDL.

 private ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //返回的IBinder类型参数转换为 AIDL生成的接口类型
            mService = IMyAidlInterface.Stub.asInterface(service);
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            //断开服务
            mService = null;
        }
    };

 private void bindService() {
        Intent intent = new Intent();
        intent.setComponent(new ComponentName("com.example.aidlserver", "com.example.aidlserver.MyService"));
        bindService(intent, connection, Context.BIND_AUTO_CREATE);
    }

La llamada IPC se puede realizar llamando al método correspondiente en la instancia de interfaz AIDL generada;

Desvincule el servicio cuando no esté en uso Context.unbindService().

  @Override
  protected void onDestroy() {
    super.onDestroy();
    unbindService(mService);
  }

Para resumir el uso de AIDL, hay un Servicio en el servidor para proporcionar el objeto Binder para el proceso del cliente. El cliente convierte el objeto Binder en un objeto proxy de la interfaz AIDL a través del método estático asInterface de la interfaz AIDL, a través del cual se puede iniciar la solicitud de llamada remota.

Documentos de referencia:

Explicación detallada y principio del uso de AIDL - libro breve (jianshu.com)

Supongo que te gusta

Origin blog.csdn.net/weixin_43858011/article/details/127240002
Recomendado
Clasificación