우리는 소스 코드를 보면, 우리가 볼 수 AsyncTask
및Handler
순수 자바로 작성된 것입니다. (그러나 몇 가지 예외가 있습니다. 그러나 중요한 것은 아닙니다.)
AsyncTask
또는에 마법이 없습니다 Handler
. 이 수업은 개발자로서 우리의 삶을 더 쉽게 만듭니다.
예를 들어, 프로그램 A가 메소드 A ()를 호출하면 메소드 A ()는 프로그램 A와 다른 스레드에서 실행될 수 있습니다. 다음 코드를 통해 쉽게 확인할 수 있습니다.
Thread t = Thread.currentThread();
int id = t.getId();
일부 작업에 새 스레드를 사용해야하는 이유는 무엇입니까? 당신은 그것을 구글 할 수 있습니다. 많은 이유, 예 : 무겁고 오래 지속되는 작업 리프팅
그래서, 차이 무엇인가 Thread
, AsyncTask
그리고는 Handler
?
AsyncTask
와 Handler
자바 (내부적으로는을 사용하여 작성됩니다 Thread
우리가 할 수있는 모든 있도록) Handler
또는 AsyncTask
우리는 사용하여 달성 할 수 Thread
도 있습니다.
무엇을 할 수 Handler
있고AsyncTask
정말 도움이 필요하십니까?
가장 확실한 이유는 호출자 스레드와 작업자 스레드 간의 통신입니다. ( 호출자 스레드 : 일부 작업을 수행하기 위해 작업자 스레드를 호출하는 스레드입니다 . 호출자 스레드는 반드시 UI 스레드 일 필요는 없습니다). 물론 다른 방식으로 두 스레드간에 통신 할 수 있지만 스레드 안전성으로 인해 많은 단점 (및 위험)이 있습니다.
그래서 우리는 Handler
and를 사용해야합니다 AsyncTask
. 이 클래스는 대부분의 작업을 수행하므로 재정의 할 메소드 만 알면됩니다.
의 차이 Handler
와는 AsyncTask
이다 : 사용 AsyncTask
하면 발신자 스레드 A는 UI 스레드 . 이것은 안드로이드 문서가 말하는 것입니다 :
AsyncTask를 사용하면 UI 스레드를 적절하고 쉽게 사용할 수 있습니다. 이 클래스를 사용하면 스레드 및 / 또는 핸들러를 조작하지 않고도 백그라운드 작업을 수행하고 UI 스레드에 결과를 게시 할 수 있습니다.
두 가지 사항을 강조하고 싶습니다.
1) UI 스레드를 쉽게 사용할 수 있습니다 (따라서 호출자 스레드가 UI 스레드 인 경우 사용).
2) 핸들러를 조작 할 필요가 없습니다. (의미 : AsyncTask 대신 Handler를 사용할 수 있지만 AsyncTask가 더 쉬운 옵션입니다).
이 게시물에는 아직 말하지 않은 많은 것들이 있습니다. 예를 들어 UI 스레드가 무엇입니까, 왜 더 쉬운 지. 각 클래스의 배후에있는 메소드를 알고 사용해야하며 그 이유를 완전히 이해할 것입니다.
@ : Android 문서를 읽으면 다음이 표시됩니다.
핸들러를 사용하면 스레드의 MessageQueue와 관련된 Message 및 Runnable 객체를 보내고 처리 할 수 있습니다
이 설명은 처음에는 이상하게 보일 수 있습니다. 우리는 각 스레드가 할일 목록과 같은 각 메시지 큐를 가지고 있고 스레드는 각 메시지를 가져 와서 메시지 큐가 비워 질 때까지 (작업을 마치고 잠자리에 든 것처럼) 수행합니다. 그렇게 할 때Handler
통신 호출자 스레드에 메시지를 제공하고 처리를 기다립니다.
복잡한? Handler
호출자 스레드와 안전하게 통신 할 수 있다는 것을 기억하십시오 .