IT TIP

START_STICKY, START_NOT_STICKY 및 START_REDELIVER_INTENT 서비스 란?

itqueen 2021. 1. 6. 20:35
반응형

START_STICKY, START_NOT_STICKY 및 START_REDELIVER_INTENT 서비스 란?


이해할 수 없다

  1. START_STICKY,
  2. START_NOT_STICKY 및
  3. START_REDELIVER_INTENT

누구든지 예를 들어 명확하게 설명 할 수 있습니다.

링크를 통과 했지만 명확하게 이해할 수 없었습니다.


이들은 서비스와 관련이 있습니다. 우리 모두는 서비스가 백그라운드에서 계속 실행되고 실행하는 데 약간의 메모리를 소비한다는 것을 알고 있습니다.

따라서 더 많은 애플리케이션이 Android 기기에서 실행됨에 따라 기기 메모리가 계속 낮아지고 시간이 지나면 기기 메모리가 매우 낮아지면 Android 시스템이 프로세스를 종료하기 시작하여 프로세스가 차지하는 메모리를 해제합니다. .

그러나 서비스와 함께 중요한 작업을 수행하고있을 수 있으며 서비스가 중지되면 종료 될 수도 있습니다. 따라서 이러한 개념은 기기 메모리가 안정되고 서비스를 다시 시작할 준비가되었을 때 수행 할 작업을 Android 시스템에 알리는 것입니다.

이것에 대한 가장 간단한 설명은 다음과 같습니다.

START_STICKY-메모리 부족에서 복구 한 후 충분한 메모리를 사용할 수있는 경우 서비스의 새 복사본을 만들도록 시스템에 지시합니다. 여기에서는 이전에 계산 한 결과를 잃게됩니다.

START_NOT_STICKY- 메모리가 충분하더라도 서비스를 다시 시작하지 않도록 시스템에 지시합니다.

START_REDELIVER_INTENT- 시스템에 충돌 후 서비스를 다시 시작하도록 지시하고 충돌 당시에 있었던 인 텐트도 다시 제공합니다.


글쎄, 나는 당신의 링크에서 스레드를 읽었으며 모든 것을 말합니다.

메모리 부족으로 인해 서비스가 Android에 의해 종료되고 Android가 일부 메모리를 지우면 ...

  1. STICKY : ... 특정 플래그가 설정되어 있기 때문에 Android가 서비스를 다시 시작합니다.
  2. NOT_STICKY : ... 안드로이드는 다시 시작하는 것을 신경 쓰지 않을 것입니다. 플래그가 안드로이드에게 신경 쓰지 말라고 알려주기 때문입니다.
  3. REDELIVER_INTENT : ... Android는 서비스를 다시 시작하고 동일한 인 텐트를 onStartCommand()서비스에 다시 전달합니다.

두 코드 모두 전화의 메모리가 부족하고 실행이 완료되기 전에 서비스를 종료하는 경우에만 관련이 있습니다. START_STICKY는 메모리가 충분하면 서비스를 다시 만들고 null 인 텐트로 onStartCommand ()를 다시 호출하도록 OS에 지시합니다. START_NOT_STICKY는 서비스를 다시 생성하지 않도록 OS에 지시합니다. 또한 OS에 서비스를 다시 만들고 onStartCommand ()에 동일한 인 텐트를 다시 전달하도록 지시하는 세 번째 코드 START_REDELIVER_INTENT도 있습니다.

Dianne Hackborn의이 기사는 공식 문서보다 이에 대한 배경을 훨씬 더 잘 설명했습니다.

출처 : http://android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html

여기서 핵심 부분은 함수가 반환하는 새로운 결과 코드로, 실행 중 프로세스가 종료 될 경우 서비스로 무엇을해야하는지 시스템에 알려줍니다.

START_STICKY는 기본적으로 서비스가 "시작"된 상태로 유지되고 나중에 시스템에서 다시 시작되는 이전 동작과 동일합니다. 플랫폼의 이전 버전과의 유일한 차이점은 프로세스가 종료되어 다시 시작되면 onStartCommand ()가 전혀 호출되지 않는 대신 null 인 텐트를 사용하여 서비스의 다음 인스턴스에서 호출된다는 것입니다. 이 모드를 사용하는 서비스는 항상이 경우를 확인하고 적절하게 처리해야합니다.

START_NOT_STICKY는 onStartCreated ()에서 돌아온 후 전달할 시작 명령이 남아 있지 않고 프로세스가 종료되면 서비스가 다시 시작되지 않고 중지된다는 것을 말합니다. 이것은 전송 된 명령을 실행하는 동안에 만 실행되도록 의도 된 서비스에 대해 훨씬 더 합리적입니다. 예를 들어, 일부 네트워크 상태를 폴링하기 위해 알람에서 15 분마다 서비스가 시작될 수 있습니다. 해당 작업을 수행하는 동안 죽으면 중지하고 다음에 알람이 울릴 때 시작하는 것이 가장 좋습니다.

START_REDELIVER_INTENT는 START_NOT_STICKY와 같습니다. 단, 서비스의 프로세스가 주어진 인 텐트에 대해 stopSelf ()를 호출하기 전에 종료되는 경우 해당 인 텐트는 완료 될 때까지 다시 전달됩니다 (몇 번 더 시도해도 완료 할 수없는 경우는 제외). 시스템이 포기하는 시점). 이는 수행 할 작업 명령을 수신하고 전송 된 각 명령에 대해 결국 작업을 완료하도록하려는 서비스에 유용합니다.

참조 URL : https://stackoverflow.com/questions/14054588/what-is-start-sticky-start-not-sticky-and-start-redeliver-intent-service

반응형