programing tip

AsyncTask와 Thread / Runnable의 차이점

itbloger 2020. 12. 26. 09:35
반응형

AsyncTask와 Thread / Runnable의 차이점


저를 당혹스럽게하는 질문이 있습니다.

SDK 문서에서 권장하는대로 백그라운드 스레드를 사용해야하는 GPS / 위치 항목 가져 오기와 같은 다른 스레드에서 작업을 수행하고 싶다고 상상해보십시오.

그래서 여기에 질문이 있습니다.

  1. ANDThread 를 통해 백그라운드 만들기AsyncTask

  2. 생성 Thread thread1 = new Thread(new Runnable()... 및 구현 run()?


AsyncTask 는 새 스레드에서 일부 작업을 수행하고 완료시 호출 된 스레드 (일반적으로 UI 스레드)에서 결과를 사용하기위한 편의 클래스입니다. 몇 개의 실행 가능 항목을 사용하지만 스레드 생성 및 스레드 간의 메시징 처리의 모든 복잡한 작업을 처리하는 래퍼 일뿐입니다.

AsyncTask를 사용하면 UI 스레드를 적절하고 쉽게 사용할 수 있습니다. 이 클래스를 사용하면 스레드 및 / 또는 처리기를 조작하지 않고도 백그라운드 작업을 수행하고 UI 스레드에 결과를 게시 할 수 있습니다.

AsyncTask는 Thread 및 Handler 주변의 도우미 클래스로 설계되었으며 일반 스레딩 프레임 워크를 구성하지 않습니다. AsyncTasks는 짧은 작업 (최대 몇 초)에 이상적으로 사용되어야합니다. 스레드를 장기간 실행해야하는 경우 다음과 같이 java.util.concurrent pacakge에서 제공하는 다양한 API를 사용하는 것이 좋습니다. Executor, ThreadPoolExecutor 및 FutureTask.

비동기 작업은 백그라운드 스레드에서 실행되고 그 결과가 UI 스레드에 게시되는 계산에 의해 정의됩니다. 비동기 작업은 Params, Progress 및 Result라는 3 가지 일반 유형과 onPreExecute, doInBackground, onProgressUpdate 및 onPostExecute라는 4 단계로 정의됩니다.

의 Runnable 인터페이스는 자바 스레딩의 핵심입니다. Runnable 인터페이스는 인스턴스가 스레드에 의해 실행되는 모든 클래스에 의해 구현되어야합니다.

또한 이 블로그 에서 인용하면 :

간단한 코딩이 필요한 경우 AsyncTask를 사용하고 SPEED가 필요한 경우 전통적인 Java Thread를 사용하십시오.


주요 차이점 :

  1. AsyncTask 는 백그라운드 스레드에서 실행되고 그 결과가 UI 스레드에 게시되는 계산에 의해 정의되는 비동기 작업입니다. HandlerUI Thread에서 사용 하고 메시지를 게시하거나 적절한 동기화를 구현하여 객체의 속성을 직접 변경 하지 않는 한 일반 스레드로는 수행 할 수 없습니다 .

  2. 스레드 성능 과 관련하여 개발자 가이드에서 권장하는대로 ,

    명심해야 할 몇 가지 중요한 성능 측면이 있습니다. 첫째, 기본적으로 앱은 생성하는 모든 AsyncTask 개체를 단일 스레드로 푸시합니다. 따라서 이들은 직렬 방식으로 실행되며 주 스레드와 마찬가지로 특히 긴 작업 패킷이 대기열을 차단할 수 있습니다. 따라서 AsyncTask를 사용 하여 5ms 미만의 작업 항목을 처리 하는 것이 좋습니다 . .

    그러나 정상적인 스레드 는 장기 실행 작업에 사용할 수 있습니다.

일반 자바 스레드는 Android 프레임 워크에서 제공하는 HandlerThread 와 달리 Android에별로 유용하지 않습니다 .

루 퍼가있는 새 스레드를 시작하기위한 편리한 클래스입니다. 그런 다음 루퍼를 사용하여 핸들러 클래스를 생성 할 수 있습니다. start ()는 여전히 호출되어야합니다.

자세한 내용은 아래 게시물을 참조하십시오.

핸들러 대 AsyncTask 대 스레드


또한 Android v4.04부터는 AsyncTasks하위 버전과의 호환성을 잃지 않는 한 한 번 둘 이상을 가질 수 없다는 점을 고려하십시오 . 조심하세요!


AsyncTask 클래스의 한 가지 명백한 단점은 Android 3.0 이후 asynctask가 시작 시간의 순서에 따라 실행된다는 것입니다. 즉, 'executeOnExecutor (Executors.newCachedThreadPool ())'을 호출하여 작업을 실행하지 않으면 작업이 하나씩 실행됩니다. 이 방법은 자신의 스레드 풀을 생성합니다.


지원 라이브러리에서 새 작업 스케줄러를 사용하는 것이 좋습니다.

참조 URL : https://stackoverflow.com/questions/17474818/difference-between-asynctask-and-thread-runnable

반응형