서비스, ​​비동기 작업 및 스레드의 차이점은 무엇입니까? 서비스, ​​비동기 작업 및 스레드의 차이점은

서비스, ​​비동기 작업 및 스레드의 차이점은 무엇입니까? 내가 틀리지 않으면 그들 모두는 백그라운드에서 몇 가지 일을하는 데 사용됩니다. 그렇다면 언제 어떻게 사용할지 결정하는 방법은 무엇입니까?



답변

아마도 당신은 이미 그들에 대한 문서 설명을 읽었을 것입니다. 반복하지 않을 것입니다. 대신 내 말로 대답하려고 노력할 것입니다. 그들이 당신을 도울 것입니다.

  • 서비스는 활동과 유사하지만 사용자 인터페이스가 없습니다. 아마도 날씨를 가져 오려면 빈 활동을 만들지 않을 것입니다.이를 위해 서비스가 사용됩니다.

  • 스레드는 스레드입니다. 아마 다른 부분에서 이미 알고있을 것입니다. 스레드에서 UI를 업데이트 할 수 없다는 것을 알아야합니다. 이를 위해 핸들러를 사용해야하지만 추가 정보를 읽으십시오.

  • AsyncTask는 사용하도록 권장되는 지능형 스레드입니다. UI 메소드에서 도움을 줄 수있는 지능적이며 UI 스레드에서 실행되는 3 가지 메소드가 있으며 이는 UI 구성 요소를 업데이트하는 데 좋습니다.

서비스, ​​AsyncTasks를 자주 사용하고 있습니다. AsyncTask로 거의 모든 작업을 수행 할 수 있으므로 스레드가 적거나 전혀 없습니다.


답변

이것은 귀하의 질문에 대한 가장 쉬운 답변입니다

메인 스레드에 “병렬”을 실행하는 실행 단위 는 중요한 포인트입니다. 메인 스레드를 제외한 모든 스레드에서 UI 구성 요소를 업데이트 할 수 없습니다.

비동기 작업

는 특수 스레드로, UI를 업데이트하는 도우미 메소드를 제공 하므로 기본적으로 AsyncTask가 백그라운드 스레드에서 실행될지라도 UI를 업데이트 할 수 있습니다. 프로세스 간 통신 처리는 명시 적으로 수행 할 필요가 없습니다.

서비스

위의 문제는 활동을 호출 한 활동과 분리되어 있기 때문에 활동이 파괴 된 경우에도 계속 실행될 수 있기 때문에 메인 스레드에서 실행됩니다 (ANR을주의하십시오) 백그라운드 서비스를 사용하십시오 (IntentService를 확장하면 작업자 스레드를 자동으로 만듭니다) 당신을 위해) . 서비스는 UI없는 활동과 같 으며 긴 작업에 좋습니다.


답변

누군가가 며칠 전에 나에게 말한 더 많은 정보는 다음과 같습니다.

  • 활동과 서비스간에 스레드와 같은 전역 변수를 공유 할 수 있습니다.
  • 귀하의 응용 프로그램 의 모든 전역 변수와 함께이 오래 여전히 거기에 활동 또는 서비스로 전멸되지 않습니다.
  • 앱에 서비스 인스턴스가 있고 OS에 리소스가 필요한 경우 먼저 활동을 종료하지만 서비스가있는 한 OS는 전역 변수와 함께 애플리케이션을 삭제하지 않습니다.

내 유스 케이스는 다음과 같습니다. 전역 공간에 서버에 연결된 하나의 스레드와 결과를 보여주는 활동이 있습니다. 사용자가 홈 버튼을 누르면 활동이 백그라운드로 이동하고 새 서비스가 시작됩니다. 그런 다음이 서비스는 스레드에서 결과를 읽고 필요한 경우 알림 영역에 정보를 표시합니다. 서비스가 실행되는 동안 스레드가 파괴된다는 것을 알고 있기 때문에 OS가 내 활동을 파괴하는 것에 대해 걱정하지 않습니다.


답변

요컨대, Service for time consuming tasks, AsyncTask for short-lived tasks, Threadstandard java construction스레드 용입니다.


답변

개발자의 관점에서 :

스레드 : 메인 스레드와 병렬로 코드 세트를 실행하는 데 사용됩니다. 그러나 스레드 내부의 UI를 처리 할 수 ​​없습니다. 이를 위해서는을 사용해야 Handler합니다. Hadler는 스레드처럼 작동하지만 UI도 처리 할 수 ​​있습니다.

ASyncTask : 메인 스레드에서 작업 할 수없는 작업을 처리하는 데 사용됩니다. 예를 들어, HTTP 요청은 주 스레드에서 처리 할 수없는 매우 무거운 작업이므로 HTTP 요청을 처리합니다 .It은 HTTP ASyncTask스레드를 백그라운드에서 기본 스레드와 병렬로 작동합니다. 이벤트.

서비스 : 백그라운드 프로세스입니다. 연관된 UI가없는 일부 처리를 수행해야 할 때 사용됩니다.


답변

서비스는 활동이 오래 걸리는 작업과 비슷하지만 비동기 작업을 통해 긴 백그라운드 작업을 수행하고 스레드를 조작하지 않고도 UI 스레드에 결과를 표시 할 수 있습니다.