답변:
아마도 당신은 이미 그들에 대한 문서 설명을 읽었을 것입니다. 반복하지 않을 것입니다. 대신 내 말로 대답하려고 노력할 것입니다. 그들이 당신을 도울 것입니다.
서비스는 활동과 유사하지만 사용자 인터페이스가 없습니다. 아마도 날씨를 가져 오려면 빈 활동을 만들지 않을 것입니다.이를 위해 서비스가 사용됩니다.
스레드는 스레드입니다. 아마 다른 부분에서 이미 알고있을 것입니다. 스레드에서 UI를 업데이트 할 수 없다는 것을 알아야합니다. 이를 위해 핸들러를 사용해야하지만 추가 정보를 읽으십시오.
AsyncTask는 사용하도록 권장되는 지능형 스레드입니다. UI 메소드에서 도움을 줄 수있는 지능적이며 UI 스레드에서 실행되는 3 가지 메소드가 있으며 이는 UI 구성 요소를 업데이트하는 데 좋습니다.
서비스, AsyncTasks를 자주 사용하고 있습니다. AsyncTask로 거의 모든 작업을 수행 할 수 있으므로 스레드가 적거나 전혀 없습니다.
이것은 귀하의 질문에 대한 가장 쉬운 답변입니다
실
메인 스레드에 "병렬"을 실행하는 실행 단위 는 중요한 포인트입니다. 메인 스레드를 제외한 모든 스레드에서 UI 구성 요소를 업데이트 할 수 없습니다.
비동기 작업
는 특수 스레드로, UI를 업데이트하는 도우미 메소드를 제공 하므로 기본적으로 AsyncTask가 백그라운드 스레드에서 실행될지라도 UI를 업데이트 할 수 있습니다. 프로세스 간 통신 처리는 명시 적으로 수행 할 필요가 없습니다.
서비스
위의 문제는 활동을 호출 한 활동과 분리되어 있기 때문에 활동이 파괴 된 경우에도 계속 실행될 수 있기 때문에 메인 스레드에서 실행됩니다 (ANR을주의하십시오) 백그라운드 서비스를 사용하십시오 (IntentService를 확장하면 작업자 스레드를 자동으로 만듭니다) 당신을 위해) . 서비스는 UI 가 없는 활동과 같 으며 긴 작업에 좋습니다.
누군가가 며칠 전에 나에게 말한 더 많은 정보는 다음과 같습니다.
내 유스 케이스는 다음과 같습니다. 전역 공간에 서버에 연결된 하나의 스레드와 결과를 보여주는 활동이 있습니다. 사용자가 홈 버튼을 누르면 활동이 백그라운드로 이동하고 새 서비스가 시작됩니다. 그런 다음이 서비스는 스레드에서 결과를 읽고 필요한 경우 알림 영역에 정보를 표시합니다. 서비스가 실행되는 동안 스레드가 파괴된다는 것을 알고 있기 때문에 OS가 내 활동을 파괴하는 것에 대해 걱정하지 않습니다.
개발자의 관점에서 :
스레드 : 메인 스레드와 병렬로 코드 세트를 실행하는 데 사용됩니다. 그러나 스레드 내부의 UI를 처리 할 수 없습니다. 이를 위해서는을 사용해야 Handler
합니다. Hadler는 스레드처럼 작동하지만 UI도 처리 할 수 있습니다.
ASyncTask : 메인 스레드에서 작업 할 수없는 작업을 처리하는 데 사용됩니다. 예를 들어, HTTP 요청은 주 스레드에서 처리 할 수없는 매우 무거운 작업이므로 HTTP 요청을 처리합니다 .It은 HTTP ASyncTask
스레드를 백그라운드에서 기본 스레드와 병렬로 작동합니다. 이벤트.
서비스 : 백그라운드 프로세스입니다. 연관된 UI가없는 일부 처리를 수행해야 할 때 사용됩니다.
Service
를 사용하지 않으면 백그라운드에서 실행할 필요가 없습니다 IntentService
. Service
UiThread에서 표준을 시작한 경우 UiThread에서 실행됩니다.
Service
기본적으로 다른 프로세스에서 실행되지 않지만 다른 구성 요소와의 앱 프로세스에서 실행 되므로 정확 하지 않습니다. Service
그것이 스레드 내부의 배경에서 실행될 것이라고 말하는 것이 좋습니다.