Android: AIDL 프로세스 간 통신을 위한 기본 프레임워크
일부 비즈니스 시나리오에서는 일부 작업을 수행하기 위해 애플리케이션에서 별도의 프로세스를 열어야 합니다. 예를 들어 성능 모니터링에 있어서 원래 사업과 성능 모니터링 사업을 동일한 프로세스에서 운영하도록 허용하면 성능 통계 데이터가 왜곡될 수 있다.
프로세스 간 통신의 경우 일반적으로 AIDL 메커니즘을 사용하여 클라이언트와 서버 간 통신을 수행합니다.
AIDL은 다음 유형의 데이터만 전달할 수 있습니다.
사용자 정의 Parcelable을 전달할 때 주의해야 할 세 가지 위치가 있습니다.
다른 Aidl을 전달할 때 인터페이스, 이 보조 파일도 가져와야 합니다.
보조 파일을 작성한 후 프로젝트를 만들고 해당 인터페이스 클래스 파일이 빌드 아래 생성된 보조 디렉터리에 생성됩니다. Aidl 인터페이스는 실제로 API 인터페이스입니다. 특정 API 로직은 해당 인터페이스 클래스의 Stub 하위 클래스를 구현하여 구현됩니다. 특정 구현 클래스는 해당 인터페이스 클래스의 Stub 하위 클래스의 asInterface 메서드를 통해 획득됩니다. .
기본 클라이언트-서버 통신 구조는 일반적으로 다음 기능을 포함합니다.
클라이언트 기능
서버 기능
클라이언트 관련 기능 구현은 다음과 같습니다. 비교적 간단하지만, 문제가 되는 부분은 서버측 기능입니다. AIDL 인터페이스는 서버 측 인터페이스를 정의하므로 클라이언트에서 호출됩니다. 서버에서 클라이언트로의 역방향 호출을 실현하려면 다른 수단을 사용해야 합니다.
서버가 클라이언트에 적극적으로 연결되도록 하려면 서버가 브로드캐스트를 수신한 후 이러한 방식으로 서버에 적극적으로 연결하는 것이 가장 좋습니다. 서버는 변장하여 능동적으로 연결합니다.
서버가 능동적으로 클라이언트 연결을 끊는 것을 알고 싶다면 위의 브로드캐스트 전송 구현 방법 외에도 Android를 통해 원격을 등록할 수도 있습니다. 시스템 API RemoteCallbackList를 사용하고 패키지 이름을 키 값으로 사용합니다. 콜백 인터페이스 메서드를 사용하면 서버가 클라이언트의 콜백 인터페이스를 보유할 수 있으며, 서버는 콜백 인터페이스를 호출하고 클라이언트는 콜백 인터페이스에서 서버 연결을 적극적으로 해제합니다. 클라이언트와의 연결을 적극적으로 끊는 서버의 기능은 다양한 방식으로 실현됩니다. 후자가 더 우아할 것입니다.
모든 작업은 궁극적으로 클라이언트에 의해 완료되므로 클라이언트에는 다음 기능 모듈이 있어야 합니다:
서버는 필수 기능 모듈:
그런 다음 전반적인 통신 프로세스는 다음 단계로 진행됩니다.
첫 번째는 통신 지원 인터페이스 정의입니다.
그 다음은 클라이언트 연결 작업 및 브로드캐스트 등록을 포함한 연결 해제 작업입니다. 수신기 및 콜백 인터페이스 구현
클라이언트측 풀 데이터 및 푸시 데이터 작업이 있습니다.
서버측 구현이 완료되는 iBinder 인터페이스가 있습니다. 콜백 인터페이스 등록, 비즈니스 하위 스레드 열기 및 닫기, 데이터 푸시 및 데이터 풀 작업
그런 다음 서버의 활성 연결 및 활성 연결 끊기 작업
마지막으로 서버가 구현합니다. onUnbind 메소드를 사용하고 콜백 인터페이스 등록을 취소합니다.
서버는 FloatViewPlugin 사용자 정의 플러그인을 모방하고 IServicePlugin 인터페이스를 구현하며 개인화된 부동 창 플러그인을 사용자 정의합니다.
고객 터미널은 Appliaction의 onCreate 메소드에서 초기화
MainActivity에서 연결, 연결 해제 및 데이터 통신 구현