안드로이드의 Asynctask vs Thread
UI에서 백그라운드 작업을 수행하기 위해 별도의을 사용했습니다 Thread
. 그러나 다른 사람들이 제안한대로 지금은을 사용하고 AsyncTask
있습니다.
a Thread
와 a의 주요 차이점은 무엇입니까 AsyncTask
?
어떤 시나리오에서 a Thread
또는 AsyncTask
?를 사용해야 합니까?
장시간 실행되거나 CPU를 많이 사용하는 작업의 경우 기본적으로 Java 스레드와 Android의 기본 AsyncTask의 두 가지 방법이 있습니다.
둘 중 하나가 반드시 다른 것보다 낫지는 않지만 각 호출을 언제 사용해야하는지 아는 것이 시스템 성능을 귀하의 이익으로 활용하는 데 필수적입니다.
다음에 AsyncTask를 사용하십시오.
- 많은 데이터를 다운로드 할 필요가없는 간단한 네트워크 작업
- 몇 밀리 초 이상 걸릴 수있는 디스크 바운드 작업
다음에 Java 스레드를 사용하십시오.
- 중간 또는 많은 양의 데이터가 포함 된 네트워크 작업 (업로드 또는 다운로드)
- 백그라운드에서 실행해야하는 높은 CPU 작업
- GUI 스레드와 관련된 CPU 사용량을 제어하려는 모든 작업
그리고 인터넷을 통해 도움이 될만한 많은 좋은 자료가 있습니다.
http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html
Java 스레드를 사용하는 경우 고유 코드에서 다음 요구 사항을 처리해야합니다.
사용자 인터페이스에 결과를 다시 게시하면 기본 스레드와 동기화
스레드를 취소하기위한 기본값이 없습니다.
기본 스레드 풀링 없음
Android에서 구성 변경을 처리하기위한 기본값이 없습니다.
실
- 일반적으로 긴 작업
- thread.start () 메소드에 의해 호출
- 모든 스레드 에서 트리거
- 자체 스레드 에서 실행
- 수동 스레드 관리 / 코드를 읽기 어려울 수 있습니다
비동기 작업
- 메인 스레드와 통신해야하는 작은 작업
- excute () 메소드로 호출
- 메인 스레드 에서 트리거
- 작업자 스레드에서 실행
- 메인 스레드에서 실행하고 생성해야합니다
실
스레드는 동시 실행 단위입니다. 자체 호출 스택이 있습니다. 응용 프로그램에서 스레드를 구현하는 방법에는 두 가지가 있습니다.
하나는 Thread를 확장하고 run () 메소드를 재정의하는 새로운 클래스를 제공하는 것입니다. 다른 하나는 생성하는 동안 Runnable 객체와 함께 새로운 Thread 인스턴스를 제공하는 것입니다. "start"메소드를 호출하여 스레드를 실행할 수 있습니다. "setPriority (int)"메소드를 호출하여 스레드의 "우선 순위"를 설정할 수 있습니다.
UI 부분에 영향을 미치지 않으면 스레드를 사용할 수 있습니다. 예를 들어, 일부 웹 서비스를 호출하거나 일부 데이터를 다운로드 중이며 다운로드 후 화면에 표시하고 있습니다. 그런 다음 Thread와 함께 Handler를 사용해야하며 이는 Threads의 모든 응답을 처리하기 위해 응용 프로그램을 복잡하게 만듭니다.
핸들러를 사용하면 스레드의 MessageQueue와 관련된 Message 및 Runnable 객체를 보내고 처리 할 수 있습니다. 각 스레드에는 각 메시지 큐가 있습니다. (할 일 목록처럼) 스레드는 각 메시지를 가져 와서 메시지 큐가 비워 질 때까지 처리합니다. 따라서 Handler가 통신 할 때 호출자 스레드에 메시지를 제공하기 만하면 처리를 기다립니다.
Java 스레드를 사용하는 경우 고유 코드에서 다음 요구 사항을 처리해야합니다.
사용자 인터페이스에 결과를 다시 게시 할 경우 기본 스레드와 동기화 스레드를 취소하기위한 기본값 없음 기본 스레드 풀링 없음 Android에서 구성 변경 사항을 처리하기위한 기본값 없음
비동기 작업
AsyncTask를 사용하면 UI 스레드를 적절하고 쉽게 사용할 수 있습니다. 이 클래스를 사용하면 스레드 및 / 또는 핸들러를 조작하지 않고도 UI 스레드에서 백그라운드 작업을 수행하고 결과를 게시 할 수 있습니다. 비동기 작업은 백그라운드 스레드에서 실행되고 결과가 UI 스레드에 게시되는 계산에 의해 정의됩니다.
AsyncTask는 다음 4 단계를 거칩니다.
onPreExecute ()
작업이 실행되기 전에 UI 스레드에서 호출
doInbackground (파라 마 ..)
onPreExecute () 실행이 완료된 직후 백그라운드 스레드에서 호출됩니다.
onProgressUpdate (진행 ..)
Invoked on the UI thread after a call to publishProgress(Progress...).
onPostExecute(Result)
Invoked on the UI thread after the background computation finishes.
Why should you use AsyncTask?
Easy to use for a UI Thread. (So, use it when the caller thread is a UI thread).
No need to manipulate Handlers.
For further information visit Here
Thread:
Thread
should be used to separate long running operations from main thread so that performance is improved. But it can't be cancelled elegantly and it can't handle configuration changes of Android. You can't update UI from Thread
.
AsyncTask
can be used to handle work items shorter than 5ms in duration. With AsyncTask
, you can update UI unlike java Thread
. But many long running tasks will choke the performance.
You have few more alternatives to both of them.
HandlerThread/ Handler and ThreadPoolExecutor
Refer to below post for more details:
Handler vs AsyncTask vs Thread
참고URL : https://stackoverflow.com/questions/18480206/asynctask-vs-thread-in-android
'IT story' 카테고리의 다른 글
Rust에서 문자열을 int로 변환 하시겠습니까? (0) | 2020.07.05 |
---|---|
pycharm이 메소드를 정적으로 변경하도록 제안하는 이유 (0) | 2020.07.05 |
스위프트-열거 형으로 Int 캐스트 : Int (0) | 2020.07.05 |
Google 태그 관리자의 404 오류 (0) | 2020.07.05 |
PHP는 컴파일되거나 해석됩니까? (0) | 2020.07.05 |