ASyncChannel 클래스 분석

3735 단어 Android 연구

AsyncChannel 클래스 소스 코드 간략 분석


개요


이 클래스는 두 Handler 간에 비동기 통신을 하는 메커니즘을 제공한다.이 두 Handler는 같은 프로세스에 있을 수도 있고 다른 프로세스에 있을 수도 있습니다.현재 ASyncChannel은 두 가지 프로토콜을 사용할 수 있습니다.
  • 한 쌍의 다중 통신 방식(간단한 요청과 응답 방식)은 이런 상호작용 방식에서 서버 측은 요청이 어느 클라이언트에서 왔는지 알지 못하기 때문에 통신 전 쌍방은 연결 구축을 표시할 필요가 없다.클라이언트(송신자)는 요청을 서버(수신자)에게 보내고 서버는 Replay ToMessage 방법을 통해 클라이언트에게 응답 메시지를 보냅니다.주요 상호 작용 시퀀스는 다음과 같습니다.
    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

  • 주요 방법 분석

  • connected
  •     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의 값을 확정하여 다음 메시지를 보내고 받을 준비를 합니다.
  • sendMessage
  •  public void sendMessage(Message msg) {
         msg.replyTo = mSrcMessenger;
         try {
             mDstMessenger.send(msg);
         } catch (RemoteException e) {
             replyDisconnected(STATUS_SEND_UNSUCCESSFUL);
         }
     }

    마찬가지로 ASyncChannel도 많은sendMessage 인터페이스를 정의하지만 상기 함수를 둘러싸고 진행된다.이 함수는 mDstMessenger를 통해 수신자(서버)에게 메시지를 보냅니다.
  • replyToMessage
  •     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.메시지 기반 프로세스 간 통신 실례

    좋은 웹페이지 즐겨찾기