안드로이드 메시지 핸들러 예제 | 
 ← 안드로이드 접근성 예제 
 엔탈피 예제 → 
 안드로이드 메시지 핸들러 예제 
 처리 기 는 스레드 의 Looper 를 통해 인 스턴스 화 하 는 스레드 와 암시 적 으로 연결 되 지만 Handler 의 생성자 에서 스레드 의 루퍼 를 전달 하 여 스레드 에 명시 적 으로 연결 할 수 있 습니다 . 표준 안드로이드 는 android . os . Handler 클래스 또는 비동기 작업 클래스 를 제공 합니다 . 보다 정교 한 접근 방식 은 콜백 을 사용 하 는 오픈 소스 솔루션 을 기반 으로 합니다 . 이제 “ 시작 ” 버튼 을 누르 면 처리 기 가 막대 값 을 업데이트 하 는 스레드 를 시작 합니다 : 기본 적 으로 AsyncTask 작업 은 순서 대로 실행 됩니다 ( Android 버전 보다 높 은 Android 버전 의 경우 3 . 0 이상 ) . 순서 대로 비동기 태 스 크 를 실행 하 려면 AsyncTask . THREAD _ POOL _ EXECUTOR 를 첫 번 째 매개 변수 로 지정 하 는 executeOnExecutor ( ) 메서 드 를 사용 합니다 . 처 리기 에 대 한 두 가지 주요 용도 가 있 습니다 . ( 2 ) 자신 의 스레드 가 아닌 다른 스레드 에서 수행 할 작업 을 대 기열 에 추가 합니다 . 자체 스레드 를 만들 고 Lopper 및 MessageQueue 를 제공 하 는 것 은 문제 를 처리 하 는 올바른 방법 이 아닙니다 . 따라서 Android 는 프로세스 를 간소 화 하 기 위해 HandlerThread ( 스레드 하위 클래스 ) 를 제공 했 습니다 . 내부 적 으로 는 우리 가 한 것 과 똑같 은 일 을 하 지만 견고 한 방식 으로 수행 합니다 . 따라서 항상 HandlerThread 를 사용 합니다 . 응용 프로그램 에 대한 프로세스 가 만들 어 지 면 주 스레드 는 최상위 응용 프로그램 개체 ( 활동 , 브로드 캐스트 수신기 등 ) 및 해당 프로세스 가 만든 모든 창 을 관리 하 는 메시지 큐 를 실행 하 는 데 전념 합니다 . 
 사용자 고유 의 스레드 를 만들 고 처 리기 를 통해 기본 응용 프로그램 스레드 와 다시 통신 할 수 있 습니다 . 이 작업 은 이전 과 동일 한 게 시물 또는 sendMessage 메 서 드 를 호출 하 지만 새 스레드 에서 수행 됩니다 . 그런 다음 지정 된 Runnable 또는 메시지 는 처리 기 의 메시지 큐 에서 예약 되 고 적절 한 경우 처리 됩니다 . 처 리기 를 사용 하 는 좋 은 예 는 Runnable 이 있 고 백그라운드 스레드 에서 작업 을 수행 한 다음 어느 시점 에서 UI 를 업데이트 하 려는 경우 입니다 . 이 경우 처리 기 를 새 처 리기 ( Looper . getMainLooper ) 로 초기 화 하 고 handler . post ( ) 호출 하 고 post ( ) 내 에서 UI 작업 을 수행 합니다 . 유용 하 지 않 습니까 ? 보류 중 인 모든 메시지 ( 현재 시간 + delayMillis ) 후 에 메시지 를 메시지 큐 에 큐 에 넣 습니다 . 이 처 리기 에 연결 된 스레드 에서 handleMessage ( 메시지 ) 로 수신 됩니다 . 특정 시간 에 배달 할 값 만 포함 하 는 메시지 를 보냅니다 . 안드로이드 핸들러 에서 주로 배경 스레드 또는 메인 스레드 이외 의 에서 메인 스레드 를 업데이트 하 는 데 사용 됩니다 . 처 리기 에 는 두 가지 방법 이 있 습니다 . Android 에서 모든 응용 프로그램 코드 는 주 스레드 인 단일 스레드 에서 실행 됩니다 . 입력 이벤트 의 모든 UI 수정 및 처리 는 주 스레드 에서 처리 합니다 . 
 따라서 잠시 동안 주 스레드 를 차단 하 거나 영원히 지속 될 수 있 는 느리 고 긴 실행 작업 을 수행 할 때 이러 한 상황 을 피하 기 위해 비동기 적 으로 장기 실행 을 수행 해야 합니다 . ProgressBar 를 업데이트 해야 하 는 활동 을 고려 하 고 ProgressBar 를 업데이트 하 는 동안 동일 한 처 리기 를 사용 하 여 TextView 를 업데이트 하 는 작업 을 고려 합니다 . 에 의해 게시 됨 : 핸들러 5 월 18 일 에 니코스 Maravitsas , 2013 년 1 코멘트 보 기 안 드 로이드 비동기 처리 를 수행 하 기 위해 스레드 클래스 의 사용 을 지원 합니다 . 안드로이드 는 또 한 백 그라운드 에서 뭔가 를 수행 하 기 위해 java . util . concurrent 패키지 를 제공 합니다 . 예 를 들 어 ThreadPools 및 실행기 클래스 를 사용 하 여 있 습니다 . 다음 은 이 작 은 응용 프로그램 은 안드로이드 에뮬레이터 에서 어떻게 생겼 는지 입니다 : 안드로이드 의 비동기 작업 은 배경 스레드 또는 작업자 스레드 가 될 스레드 를 사용 하 여 수행 합니다 . 이러 한 비동기 작업 의 결과 는 UI 구성 요소 를 업데이트 해야 할 수 있 습니다 . 백그라운드 스레드 에서 UI 구성 요소 에 액세스 할 수 없 으므로 UI 를 업데이트 하 기 위해 기본 스레드 ( UI Thread ) 에 액세스 해야 합니다 . 그래서 우리 는 처리 기 일정 메시지 라는 안드로이드 의 매우 인기 있 고 강력 한 개념 을 사용 하 여 게시물 ( 실행 가능 ) , postAtTime ( java . lang . lang . Runnable , 긴 ) , postDelayed ( 실행 가능 , 개체 , 긴 ) , sendEmptyMessage ( int ) , sendMessage ( ) 메시지 ) , sendMessageAtTime ( 메시지 , 긴 ) 및 sendMessageDelayed ( 메시지 , 긴 ) 메 서드 . 포스트 버전 을 사용 하 면 Runnable 개체 가 수신 될 때 메시지 큐 에서 호출 되 도록 큐 를 누를 수 있 습니다 . sendMessage 버전 을 사용 하 면 처리 기의 handleMessage ( Message ) 메 서드 에서 처리 되 는 데이터 번들 을 포함 하 는 메시지 개체 를 큐 에 대기 할 수 있 습니다 ( 처 리기 의 하위 클래스 를 구현 해야 합니다 ) .