START_STICKY, START_NOT_STICKY 및 START_REDELIVER_INTENT 서비스 란?
이해할 수 없다
- START_STICKY,
- START_NOT_STICKY 및
- START_REDELIVER_INTENT
누구든지 예를 들어 명확하게 설명 할 수 있습니다.
이 링크를 통과 했지만 명확하게 이해할 수 없었습니다.
이들은 서비스와 관련이 있습니다. 우리 모두는 서비스가 백그라운드에서 계속 실행되고 실행하는 데 약간의 메모리를 소비한다는 것을 알고 있습니다.
따라서 더 많은 애플리케이션이 Android 기기에서 실행됨에 따라 기기 메모리가 계속 낮아지고 시간이 지나면 기기 메모리가 매우 낮아지면 Android 시스템이 프로세스를 종료하기 시작하여 프로세스가 차지하는 메모리를 해제합니다. .
그러나 서비스와 함께 중요한 작업을 수행하고있을 수 있으며 서비스가 중지되면 종료 될 수도 있습니다. 따라서 이러한 개념은 기기 메모리가 안정되고 서비스를 다시 시작할 준비가되었을 때 수행 할 작업을 Android 시스템에 알리는 것입니다.
이것에 대한 가장 간단한 설명은 다음과 같습니다.
START_STICKY-
메모리 부족에서 복구 한 후 충분한 메모리를 사용할 수있는 경우 서비스의 새 복사본을 만들도록 시스템에 지시합니다. 여기에서는 이전에 계산 한 결과를 잃게됩니다.
START_NOT_STICKY-
메모리가 충분하더라도 서비스를 다시 시작하지 않도록 시스템에 지시합니다.
START_REDELIVER_INTENT-
시스템에 충돌 후 서비스를 다시 시작하도록 지시하고 충돌 당시에 있었던 인 텐트도 다시 제공합니다.
글쎄, 나는 당신의 링크에서 스레드를 읽었으며 모든 것을 말합니다.
메모리 부족으로 인해 서비스가 Android에 의해 종료되고 Android가 일부 메모리를 지우면 ...
- STICKY : ... 특정 플래그가 설정되어 있기 때문에 Android가 서비스를 다시 시작합니다.
- NOT_STICKY : ... 안드로이드는 다시 시작하는 것을 신경 쓰지 않을 것입니다. 플래그가 안드로이드에게 신경 쓰지 말라고 알려주기 때문입니다.
- 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 ()를 호출하기 전에 종료되는 경우 해당 인 텐트는 완료 될 때까지 다시 전달됩니다 (몇 번 더 시도해도 완료 할 수없는 경우는 제외). 시스템이 포기하는 시점). 이는 수행 할 작업 명령을 수신하고 전송 된 각 명령에 대해 결국 작업을 완료하도록하려는 서비스에 유용합니다.
'IT TIP' 카테고리의 다른 글
Windows의 MinGW에서 GCC를 업데이트하는 방법은 무엇입니까? (0) | 2021.01.06 |
---|---|
DB 컨텍스트에 ObjectStateManager 속성이없는 이유는 무엇입니까? (0) | 2021.01.06 |
Visual Studio 2012에서 사용자 지정 프로젝트를 디버깅하기 위해 기호 파일이로드되지 않음 (0) | 2021.01.06 |
가상 파일 처리는 어떻게합니까? (0) | 2021.01.06 |
SCSS / SASS : 쉼표로 구분하여 클래스 목록을 동적으로 생성하는 방법 (0) | 2021.01.06 |