AsyncTask와 Thread / Runnable의 차이점
저를 당혹스럽게하는 질문이 있습니다.
SDK 문서에서 권장하는대로 백그라운드 스레드를 사용해야하는 GPS / 위치 항목 가져 오기와 같은 다른 스레드에서 작업을 수행하고 싶다고 상상해보십시오.
그래서 여기에 질문이 있습니다.
AND
Thread
를 통해 백그라운드 만들기AsyncTask
생성
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를 사용하십시오.
주요 차이점 :
AsyncTask 는 백그라운드 스레드에서 실행되고 그 결과가 UI 스레드에 게시되는 계산에 의해 정의되는 비동기 작업입니다.
Handler
UI Thread에서 사용 하고 메시지를 게시하거나 적절한 동기화를 구현하여 객체의 속성을 직접 변경 하지 않는 한 일반 스레드로는 수행 할 수 없습니다 .스레드 성능 과 관련하여 개발자 가이드에서 권장하는대로 ,
명심해야 할 몇 가지 중요한 성능 측면이 있습니다. 첫째, 기본적으로 앱은 생성하는 모든 AsyncTask 개체를 단일 스레드로 푸시합니다. 따라서 이들은 직렬 방식으로 실행되며 주 스레드와 마찬가지로 특히 긴 작업 패킷이 대기열을 차단할 수 있습니다. 따라서 AsyncTask를 사용 하여 5ms 미만의 작업 항목을 처리 하는 것이 좋습니다 . .
그러나 정상적인 스레드 는 장기 실행 작업에 사용할 수 있습니다.
일반 자바 스레드는 Android 프레임 워크에서 제공하는 HandlerThread 와 달리 Android에별로 유용하지 않습니다 .
루 퍼가있는 새 스레드를 시작하기위한 편리한 클래스입니다. 그런 다음 루퍼를 사용하여 핸들러 클래스를 생성 할 수 있습니다. start ()는 여전히 호출되어야합니다.
자세한 내용은 아래 게시물을 참조하십시오.
또한 Android v4.04부터는 AsyncTasks
하위 버전과의 호환성을 잃지 않는 한 한 번 에 둘 이상을 가질 수 없다는 점을 고려하십시오 . 조심하세요!
AsyncTask 클래스의 한 가지 명백한 단점은 Android 3.0 이후 asynctask가 시작 시간의 순서에 따라 실행된다는 것입니다. 즉, 'executeOnExecutor (Executors.newCachedThreadPool ())'을 호출하여 작업을 실행하지 않으면 작업이 하나씩 실행됩니다. 이 방법은 자신의 스레드 풀을 생성합니다.
지원 라이브러리에서 새 작업 스케줄러를 사용하는 것이 좋습니다.
참조 URL : https://stackoverflow.com/questions/17474818/difference-between-asynctask-and-thread-runnable
'programing tip' 카테고리의 다른 글
Android에서 최고의 REST 클라이언트 프레임 워크 / 유틸리티 (0) | 2020.12.26 |
---|---|
Scala : mapValues가 뷰를 생성하는 이유는 무엇이며 안정적인 대안이 있습니까? (0) | 2020.12.26 |
.NET 용 그래프 데이터베이스 (0) | 2020.12.26 |
데이터베이스 테이블이 더 이상 액세스되고 있는지 어떻게 알 수 있습니까? (0) | 2020.12.26 |
값을 통화로 설정 (0) | 2020.12.25 |