La Red de Conocimientos Pedagógicos - Currículum vitae - Android: marco básico para la comunicación entre procesos AIDL

Android: marco básico para la comunicación entre procesos AIDL

En algunos escenarios empresariales, necesitamos abrir un proceso separado en la aplicación para realizar algunas operaciones. Por ejemplo, en el monitoreo del desempeño, si se permite que el negocio original y el negocio de monitoreo del desempeño se ejecuten en el mismo proceso, se distorsionarán los datos estadísticos del desempeño.

Para la comunicación entre procesos, el mecanismo AIDL se utiliza generalmente para comunicarse entre el cliente y el servidor.

AIDL solo puede pasar los siguientes tipos de datos:

Al pasar un Parcelable personalizado, hay tres lugares a los que prestar atención:

Al pasar otros Aidl interfaces, también debe importar este archivo Aidl

Después de escribir el archivo Aidl, cree el proyecto y el archivo de clase de interfaz correspondiente se generará en el directorio Aidl generado en la compilación. La interfaz Aidl es en realidad una interfaz API. La lógica API específica se implementa implementando la subclase Stub de la clase de interfaz correspondiente; la clase de implementación específica se obtiene a través del método asInterface de la subclase Stub de la clase de interfaz correspondiente y se llama a métodos API específicos. .

Una estructura básica de comunicación cliente-servidor generalmente incluye las siguientes funciones

Funciones de cliente

Funciones de servidor

Relacionadas con el cliente La implementación de la función es Es relativamente simple, pero la parte problemática es la función del lado del servidor. Debido a que la interfaz AIDL define la interfaz del lado del servidor, es llamada por el cliente. Si desea realizar la llamada inversa del servidor al cliente, debe utilizar otros medios.

Si desea que el servidor se conecte activamente al cliente, la mejor manera es que el servidor envíe una transmisión. Después de que el cliente recibe la transmisión, se conecta activamente al servidor. El servidor se conecta activamente disfrazado Funciones del cliente

Si desea darse cuenta de que el servidor desconecta activamente al cliente, además del método de implementación anterior para enviar transmisiones, también puede registrar el control remoto a través de Android. API del sistema RemoteCallbackList y use el nombre del paquete como valor clave. El método de la interfaz de devolución de llamada permite que el servidor retenga la interfaz de devolución de llamada del cliente, el servidor llama a la interfaz de devolución de llamada y el cliente desconecta activamente el servidor en la interfaz de devolución de llamada. La función del servidor de desconectar activamente al cliente se realiza de forma variable. Este último será más elegante

Dado que todas las operaciones las completa finalmente el cliente, el cliente debe tener los siguientes módulos funcionales:

El servidor debe Módulos funcionales requeridos:

Luego, el proceso de comunicación general consta de los siguientes pasos:

Primero está la definición de la interfaz de ayuda de comunicación

Luego está la conexión del cliente. Operaciones de operación y desconexión, incluido el registro de transmisión. receptores y la implementación de interfaces de devolución de llamada

Luego están las operaciones de extracción y envío de datos del lado del cliente

Luego están las interfaces iBinder del lado del servidor Implementación, completa el registro de la devolución de llamada interfaz, apertura y cierre de subprocesos comerciales, operaciones de inserción y extracción de datos

Luego, las operaciones de conexión activa y desconexión activa del servidor

Finalmente, el servidor implementa el método onUnbind y cancela el registro de la interfaz de devolución de llamada

El servidor imita el complemento personalizado FloatViewPlugin, implementa la interfaz IServicePlugin y personaliza el complemento de ventana flotante personalizado

Cliente El terminal se inicializa en el Método onCreate de Appliaction

Implementar conexión, desconexión y comunicación de datos en MainActivity