Program Tip

Android UI 스레드 메시지 큐 디스패치 순서

programtip 2020. 12. 11. 19:18
반응형

Android UI 스레드 메시지 큐 디스패치 순서


구성 변경 중에 AsyncTask를 유지하기 위해 Android에서 리 테인 프래그먼트로 작업하는 동안 이것이 최선의 접근 방식이라고 생각하지만 UI 스레드의 메시지 큐 호출 순서에 대해 내 마음에 몇 가지 의심이 나타납니다.

예 : 다음 시나리오를 상상해보십시오.

  1. 구성 변경이 발생하면 사용자가 장치를 회전합니다. AsyncTask가 실행 중입니다.
  2. 조각 onDetach()이 호출됩니다.
  3. AsyncTask doInBackground()메서드 완료
  4. AsyncTask onPostExecute()가 호출됩니다.
  5. 조각 onAttach()이 호출됩니다.

따라서 UI 스레드 메시지 큐는 다음과 같을 수 있습니다.

대기열 상단-> onDetach () | onPostExecute () | onAttach ()

내가 아는 onPostExecute()한 구성 변경이 완료 될 때까지에 대한 호출 이 대기 할 수 없다는 것을 알고 있지만 어떻게 작동합니까? 활동, 조각 라이프 사이클의 호출이 연속적으로 실행됩니까?


것은 불가능하다 onPostExecute()사이에서 호출 할 수 Fragment#onDetach()Fragment#onAttach()구성 변경시. 이 주장의 근거는 세 가지입니다.

  1. 구성 변경은 기본 스레드의 메시지 대기열에있는 단일 메시지 내에서 처리됩니다.

  2. doInBackground()메서드가 반환 되는 즉시 주 스레드의 메시지 대기열에 메시지를 게시하여 주 스레드에서 호출 될 메서드를 AsyncTask예약합니다 onPostExecute().

  3. 구성 변경 메시지에는 ActivityFragment수명주기 메서드 (예 : onDetach()and onAttach())를 호출하는 코드가 포함됩니다 . AsyncTask의 메시지는 호출하는 코드를 포함 할 onPostExecute()방법을. 주 스레드는 메시지 대기열의 메시지를 순차적으로 처리하기 때문에 두 메시지를 동시에 실행할 onPostExecute()수 없으므로 onDetach()및에 대한 호출 사이에서 호출 할 수 없습니다 onAttach().

더 자세한 설명 이 스레드 에서 Doug Stevenson에 대한 저의 답변을 읽어보십시오 (클레임을 증명하는 소스 코드에 대한 링크 포함).

참고 URL : https://stackoverflow.com/questions/19964180/android-ui-thread-message-queue-dispatch-order

반응형