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.메시지 기반 프로세스 간 통신 실례