서비스와 방송 수신기의 차이점은 무엇입니까?


14

서비스방송 수신기 에 대해 계속 듣고 있습니다. 차이점은 무엇이며 내 관점에서 Android 휴대 전화 작동에 어떤 영향을 줍니까?


당신은 TCP 계층에서 포트를 생성하는 대신 배터리와 많은 처리를 절약하기 위해 항상 브로드 캐스트 리시버를 생성합니다. 어떤 이벤트가 안드로이드에서 발생하면 .. 브로드 캐스트는 전화기 내에서 모든 앱으로 전송됩니다. 해당 이벤트에 대한 방송 수신기를 작성하면 자동으로 호출됩니다. 기술적으로 일어난 사건은 안드로이드의 관점에서 의도라고
라훌 레이나

답변:


27

Android 애플리케이션에는 세 가지 종류의 구성 요소가 있습니다. 일반적으로 사용자는 자신에 대해 알 필요가 없습니다. 즉, 앱 작성자가 특정 동작을 앱에 프로그래밍 할 수있는 방법입니다. 그러나 작업 관리자와 같이 앱의 동작을 면밀히 관찰하거나 Tasker와 같은 앱으로 작업을 자동화하는 경우 시스템 내에서 응용 프로그램이 어떻게 어울리는지를 이해하면 도움이됩니다.

활동은 구성 요소의 가장 친숙한 유형 : 전체 화면 또는 대화 상자 크기 중 하나는 당신이 볼 수있는 창입니다. 활동은 화면에 표시된 동안에 만 실행됩니다. 액티비티를 종료하면 Android는 해당 앱을 메모리에서 다시 시작할 수 있도록 유지하지만 액티비티는 실행되지 않으므로 배터리 나 네트워크를 사용하지 않습니다. 앱은 intent를 사용하여 활동을 시작합니다 . 의도는 시작할 활동을 명시 적으로 지정하거나 수행 할 조치 (예 : 특정 파일 열기)를 지정할 수 있습니다. 둘 이상의 활동이 의도를 "처리"할 수있는 경우 하나를 선택하라는 대화 상자가 표시됩니다.

서비스는 다른 응용 프로그램 구성 요소입니다. 다른 구성 요소 (활동 또는 다른 서비스)가 서비스를 시작한 후에는 중지 될 때까지 백그라운드에서 실행됩니다. 이는 서비스가 화면에 아무 것도 표시하지 않고 전화기를 깨우거나 ( 깨우기 잠금 사용 ) 배터리를 소모 시키거나 많은 네트워크 데이터를 사용할 수 있음을 의미합니다.

앱은 서비스를 사용하여 서버에서 파일을 다운로드하거나 전자 메일을 확인하거나 위치를 확인하는 등 백그라운드에서 장기 실행 프로세스를 수행 할 수 있습니다. 서비스는 직접 표시되거나 사용자와 상호 작용하지 않지만 "앱 실행 중"목록에 계속 나타납니다. 로부터 설정 앱을 선택 또는 응용 프로그램 관리자를 다음 실행 . 그런 식으로 서비스를 중지 할 수 있지만 일반적으로 필요하지는 않습니다. 서비스는 직접 표시되지 않기 때문에 Android는 서비스보다 활동이 덜 중요하다고 생각하므로 휴대 전화에 더 많은 메모리가 필요한 경우 가장 먼저 종료됩니다.

방송 수신기 는 세 번째 종류의 구성 요소입니다. 서비스와 마찬가지로 백그라운드에서만 존재하며 직접 상호 작용하지 않습니다. 그러나 서비스와 달리 실행 상태를 유지하거나 긴 작업을 수행 할 수 없습니다. 이벤트에 응답하기 위해 존재합니다. 활동 및 서비스와 달리 한 번에 둘 이상의 브로드 캐스트 수신기를 시작할 수 있습니다.

구성 요소 는 하나의 앱에 의도를 브로드 캐스트 하지만 특정 앱을 지정하지 않은 경우가 더 많습니다. 이 경우 의도는 일반적으로 배터리가 부족한 경우와 같이 발생한 이벤트를 나타냅니다. 시스템은 관심을 등록한 (인 텐트 필터 사용 ) 모든 브로드 캐스트 리시버를 찾아서 차례로 실행합니다. 각 브로드 캐스트 수신기는 예를 들어 알림을 작성하여 바로 반응하거나 추가 조치를 취하기 위해 서비스 또는 활동을 시작할 수 있습니다. 브로드 캐스트 리시버가 이벤트를 처리하자마자 중지되고 다른 유사한 이벤트가 브로드 캐스트 될 때까지 다시 실행되지 않습니다.

세 가지 구성 요소가 함께 작동하는 예는 Google Play에서 앱을 다운로드 할 때입니다. 먼저 Google Play 활동은 다운로드 할 콘텐츠를 선택할 수있는 시각적 인터페이스를 제공합니다. 앱 목록은 하나의 활동 일 수 있습니다. "설치"버튼을 클릭하면 다른 활동이 시작되어 확인 또는 지불 대화 상자가 표시됩니다. 확인하면 대화 상자 활동이 서비스를 시작합니다. 활동이 완료되어 더 이상 실행되지 않는 경우에도 서비스는 계속 컨텐츠를 다운로드합니다.

그러나 새 앱을 다운로드하는 동안 전화 연결이 끊어 질 수 있습니다. 이 경우 Google Play의 다운로드 서비스는 브로드 캐스트 수신기를 등록하고 네트워크 연결 변경에 관심이 있다고하는 인 텐트 필터를 사용하여 서비스를 중지합니다. 전화가 인터넷에 연결되면 시스템이 이벤트를 브로드 캐스트합니다. Android는 해당 이벤트를 기다리는 다른 방송 수신기와 함께 Google Play 서비스가 등록한 방송 수신기를 시작합니다. 이 경우 브로드 캐스트 리시버는 다운로드 서비스를 다시 시작합니다. 서비스는 다운로드가 진행됨에 따라 알림을 생성하고, 완료되면 새 패키지가 설치되었음을 다른 앱에 알리기 위해 자체 브로드 캐스트를 보냅니다. 그러면 다른 앱의 브로드 캐스트 수신기가 시작됩니다.

요약해서 말하자면:-

  • 활동은 화면의 창을 나타냅니다. 서비스는 장기 실행 백그라운드 작업을 수행합니다. 방송 수신기는 이벤트를 처리하기 위해 짧은 시간 동안 실행됩니다.
  • 세 가지 모두 의도를 사용하지만 다른 메커니즘을 사용하여 시작됩니다. 시작 응용 프로그램은 시작할 각 구성 요소 유형을 명시 적으로 명시해야합니다 (각각 다른 방법을 호출하여).
  • 앱이 인 텐트를 사용하여 액티비티를 시작하면 하나의 액티비티 만 시작하며 ( "완료된 액션을 사용하여 ..."대화 상자를 선택하여 선택할 수 있음) 서비스에도 동일하게 적용되지만 인 텐트 브로드 캐스트는 여러 브로드 캐스트를 시작할 수 있습니다. 다른 앱의 수신기.
  • 사용자는 활동과 직접 상호 작용합니다. 서비스와 상호 작용하지는 않지만 전화를 느리게하고 리소스를 소비 할 수 있습니다. 브로드 캐스트 리시버와 상호 작용하지 않으며 수명이 짧기 때문에 관리에 대해 걱정할 필요가 없습니다.

매우 유용한 답변입니다. 나는 단지 무언가를 확인하고 싶다 : 사용자가 비활성화 한 앱은 어떻게됩니까? Android는 등록 의도에 따라 방송 수신기를 시작한 적이 있습니까? 또는 비활성화 된 앱이 백그라운드에서 서비스를 실행할 수 있습니까? 재부팅 후에도 비활성화 된 앱에 대해 강제 종료 버튼이 회색으로 표시되지 않는 이유는 무엇입니까? 그들의 활동을 시작할 수 없다는 것이 분명합니다.
Firelord

@Firelord 새로운 질문이 있으면 새로운 질문으로 게시해야합니다. 댓글은 자세한 답변을 허용하지 않으며 다른 방문자가 질문을 찾을 수 없도록합니다.
Dan Hulme

훌륭한 게시물이지만 실제로 네 가지 구성 요소가 있습니다. 콘텐츠 제공 업체가 없습니다.
Alexandre Martin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.