ASyncChannel 클래스 분석
3735 단어 Android 연구
AsyncChannel 클래스 소스 코드 간략 분석
개요
이 클래스는 두 Handler 간에 비동기 통신을 하는 메커니즘을 제공한다.이 두 Handler는 같은 프로세스에 있을 수도 있고 다른 프로세스에 있을 수도 있습니다.현재 ASyncChannel은 두 가지 프로토콜을 사용할 수 있습니다.
Created with Raphaël 2.1.0 Client Client ASyncChannel ASyncChannel Server Server connect CMD_CHANNEL_HALF_CONNECTED sendMessage Creat a ASyncChannel Object replyToMessage
Created with Raphaël 2.1.0 Client Client ASyncChannel ASyncChannel Server Server connect CMD_CHANNEL_HALF_CONNECTED CMD_CHANNEL_FULL_CONNECTION CMD_CHANNEL_FULL_CONNECTION connect CMD_CHANNEL_HALF_CONNECTED MESSAGE_FROM_SERVER MESSAGE_FROM_SERVER MESSAGE_FROM_CLIENT MESSAGE_FROM_CLIENT
주요 방법 분석
public void connected(Context srcContext, Handler srcHandler, Messenger dstMessenger) {
if (DBG) log("connected srcHandler to the dstMessenger E");
// Initialize source fields
mSrcContext = srcContext;
mSrcHandler = srcHandler;
mSrcMessenger = new Messenger(mSrcHandler);
// Initialize destination fields
mDstMessenger = dstMessenger;
if (DBG) log("connected srcHandler to the dstMessenger X");
}
ASyncChannel은 몇 개의connect 시리즈의 함수를 제공했는데 주로 위의 이 함수를 둘러싼 프로세스입니다.이것은 두 개의 중요한 구성원 변수인 mSrcMessenger와 mDstMessenger의 값을 확정하여 다음 메시지를 보내고 받을 준비를 합니다.
public void sendMessage(Message msg) {
msg.replyTo = mSrcMessenger;
try {
mDstMessenger.send(msg);
} catch (RemoteException e) {
replyDisconnected(STATUS_SEND_UNSUCCESSFUL);
}
}
마찬가지로 ASyncChannel도 많은sendMessage 인터페이스를 정의하지만 상기 함수를 둘러싸고 진행된다.이 함수는 mDstMessenger를 통해 수신자(서버)에게 메시지를 보냅니다.
public void replyToMessage(Message srcMsg, Message dstMsg) {
try {
dstMsg.replyTo = mSrcMessenger;
srcMsg.replyTo.send(dstMsg);
} catch (RemoteException e) {
log("TODO: handle replyToMessage RemoteException" + e);
e.printStackTrace();
}
}
ASyncChannel도 많은 Reply To Message 인터페이스를 정의했지만 상기 함수를 중심으로 진행되었다.그것은 서버의 응답 메시지를 이전 메시지의 발송자에게 보냅니다.
또한 ASyncChannel은 메시지를 동기화하는 방법을 정의합니다
sendMessageSynchronously
. 결어
와이파이 관련 코드에서 많은 상태기를 정의했는데 그 중에서 ASyncChannel이 제공하는 동기화와 비동기화 방법을 대량으로 사용하여 상태기 내부와 상태기 간의 메시지 통신을 실현했다.한편, ASyncChannel 자체의 실현 메커니즘은 사실 Android Handler 클래스에 의존하고 그 자체는 라인 사이나 프로세스 간의 메시지 통신을 제공한다. 구체적으로는 이전에 Handler 클래스에 대한 분석 문장을 참고할 수 있다.메시지 기반 스레드 간 통신 실례 2.메시지 기반 프로세스 간 통신 실례