Sistema Android-ServiceManager2

Tabla de contenido

introducción:

ObtenerServiceManager

diagrama de flujo

Registrar servicio del sistema

Obtener servicios del sistema


introducción:

Antes de registrarse o utilizar un servicio, debe encontrar el servicio correspondiente a través de ServiceManager, el DNS. Entonces, ¿cómo se encuentra el ServiceManager?

¿Cómo registrar el servicio del sistema?

¿Cómo obtener servicios del sistema?

ObtenerServiceManager

marco/nativo/libs/binder/

- Estado de proceso.cpp

- BpBinder.cpp

- Carpeta.cpp

- IServiceManager.cpp

marco/nativo/incluir/aglutinante/

-IServiceManager.h

- IInterfaz.h

Obtenga el objeto gDefaultServiceManager mediante el método defaultServiceManager. Si el objeto existe, regresa directamente, y si el objeto no existe, lo crea.

El proceso de creación: abra el controlador de carpeta, mmap asigna el espacio de direcciones del kernel e ingresa al bucle de mensajes

diagrama de flujo

El proceso de creación de gDefaultServiceManager se puede descomponer en los siguientes tres pasos:

1) ProcessState::self(): se utiliza para obtener el objeto ProcessState (también modo singleton), cada proceso tiene un y solo un objeto ProcessState, si existe, se devolverá directamente, si no existe, se creará ; 2) getContextObject(): se usa para
obtener el objeto BpBinder, para el objeto BpBinder con handle=0, si existe, se devolverá directamente, si no existe, se creará; 3) interface_cast<IServiceManager>
( ): utilizado para obtener el objeto BpServiceManager;

defaultServiceManager es equivalente a new BpServiceManager(new BpBinder(0));


El trabajo principal de ProcessState::self():
llamar a open() para abrir el dispositivo de disco /dev/binder;
luego usar mmap() para crear un espacio de direcciones de memoria con un tamaño de 1M-8K;
establecer el número máximo de concurrentes Hilos de carpeta en el proceso actual El número es 16.


BpServiceManager integra inteligentemente la lógica de la capa de comunicación y la capa empresarial:

La función de lógica de negocios en la interfaz se realiza heredando la interfaz IServiceManager; el
trabajo de comunicación de Binder se realiza a través de la variable miembro mRemote=new BpBinder (0).
BpBinder apunta al BBinder correspondiente a través del controlador. En todo el sistema Binder, handle = 0 representa el BBinder correspondiente al ServiceManager.

Registrar servicio del sistema

framework/native/libs/binder/
  - Binder.cpp
  - BpBinder.cpp
  - IPCThreadState.cpp
  - ProcessState.cpp
  - IServiceManager.cpp
  - IInterface.cpp
  - Parcel.cpp

frameworks/native/include/binder/
  - IInterface.h (包括BnInterface, BpInterface)

Obtener servicios del sistema

Supongo que te gusta

Origin blog.csdn.net/haigand/article/details/132251585
Recomendado
Clasificación