[android] Android UiThread (UI 스레드) 란?
누군가가 UI 스레드가 정확히 무엇인지 설명해 줄 수 있습니까? developer.android.com에서는 runOnUiThread 함수에 대해 말합니다.
public final void runOnUiThread (실행 가능한 액션)
이후 : API 레벨 1 UI 스레드에서 지정된 작업을 실행합니다. 현재 스레드가 UI 스레드이면 작업이 즉시 실행됩니다. 현재 스레드가 UI 스레드가 아닌 경우 작업이 UI 스레드의 이벤트 큐에 게시됩니다.
UI 스레드는 수신 전화 또는 화면 디밍 등과 같은 일부 UI 활동에 의해 활동이 백그라운드로 푸시 될 때마다 실행된다는 것을 의미합니까? 그렇지 않은 경우 UI 스레드에는 정확히 무엇이 포함됩니까?
감사합니다
답변
UIThread는 애플리케이션의 기본 실행 스레드입니다. 대부분의 애플리케이션 코드가 실행되는 곳입니다. 모든 응용 프로그램 구성 요소 (Activities, Services, ContentProviders, BroadcastReceivers)가이 스레드에서 생성되고 이러한 구성 요소에 대한 모든 시스템 호출이이 스레드에서 수행됩니다.
예를 들어 애플리케이션이 단일 활동 클래스라고 가정 해 보겠습니다. 그런 다음 모든 수명주기 메서드와 대부분의 이벤트 처리 코드가이 UIThread에서 실행됩니다. 이 같은 방법이 있습니다 onCreate
, onPause
, onDestroy
, onClick
인터페이스에 대한 모든 업데이트 한 위치 등 또한이입니다. UI를 업데이트하거나 변경하는 모든 것이 UI 스레드에서 발생합니다.
애플리케이션의 프로세스 및 스레드에 대한 자세한 내용을 보려면 여기를 클릭하십시오.
백그라운드에서 작업 할 새 스레드를 명시 적으로 생성 할 때이 코드는 UIThread에서 실행되지 않습니다. 그렇다면이 백그라운드 스레드가 UI를 변경하는 작업을 수행해야한다면 어떻게 될까요? 이것이 그 이유 runOnUiThread
입니다. 실제로 Handler를 사용해야합니다 (자세한 내용은 아래 링크 참조). 이러한 백그라운드 스레드에 UI를 수정할 수있는 코드를 실행할 수있는 기능을 제공합니다. UI 수정 코드를 Runnable 개체에 넣고 runOnUiThread 메서드에 전달하여이를 수행합니다.
작업자 스레드 생성 및 UI 업데이트에 대한 자세한 내용은 여기를 클릭하십시오.
저는 개인적으로 runOnUiThread
계측 테스트 에서만이 방법을 사용합니다 . 테스트 코드는 UIThread에서 실행되지 않으므로이 메서드를 사용하여 UI를 수정하는 코드를 실행해야합니다. 그래서 그것을 사용하여 클릭 및 키 이벤트를 내 애플리케이션에 삽입합니다. 그런 다음 응용 프로그램의 상태를 확인하여 올바른 일이 발생했는지 확인할 수 있습니다.
UIThread에서 코드 테스트 및 실행에 대한 자세한 정보는 여기를 클릭하십시오.
답변
별도의 스레드에서 차단 코드 (예 : Http-Request)를 실행하는 경우 AsyncTask를 사용하는 것이 좋습니다. 그 doInBackground
별도의 스레드에 -Method 실행됩니다. AsyncTask
방법을 제공 onProgressUpdate
하고 onPostExecute
있다 UI 스레드에서 실행되도록 보장 .
당신은 GUI 진행 업데이트 (예를 통해 진행 막대) 호출이 필요한 경우 publishProgress
내부 doInBackground
. 후속 호출이 리드의 onPublishProgress
어떤 또한 UI 스레드에서 실행되도록 보장 .
onPostExecute
doInBackground
반환 후 자동으로 호출됩니다 .
답변
모든 UI 도면 등은 별도의 스레드에서 발생합니다. UIThread라고합니다. UI를 변경하려면 UIThread의 컨텍스트에서 발생하는지 확인해야합니다. 가장 쉬운 방법은runOnUiThread