안드로이드 메시지 핸들러 예제

처리기는 스레드의 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) 메서드에서 처리되는 데이터 번들을 포함하는 메시지 개체를 큐에 대기할 수 있습니다(처리기의 하위 클래스를 구현해야 합니다).

カテゴリー: 未分類   パーマリンク

コメントは受け付けていません。