서비스 수명 주기(서비스 수명 주기)는 서비스 수명 주기가 생성된 시점부터 소멸될 때까지 서비스 기본 클래스 또는 기존 하위 클래스 중 하나를 확장하는 Java 클래스를 만들 수 있습니다. 서비스 기본 클래스는 다양한 콜백 메서드를 정의하며 가장 중요한 방법은 다음과 같습니다. 모든 콜백 메서드를 구현할 필요는 없습니다. 그러나 각 앱을 이해하고 앱이 사용자가 기대하는 방식으로 작동하도록 구현하는 것이 중요합니다. 코드를 작성하기 전에 첫 번째 단계는 서비스를 포함하도록 프로젝트에 새 클래스를 추가하는 것입니다. 이 자습서에서 보여 야 하는 서비스의 첫 번째 유형은 IntentService 클래스를 기반으로 하는 것입니다. 이전 장(„Android 시작 및 바인딩된 서비스의 개요”)에서 설명한 대로 IntentService 클래스의 목적은 개발자에게 별도의 내에서 비동기적으로 작업을 수행하는 서비스를 만들기 위한 편리한 메커니즘을 제공하는 것입니다. 호출 응용 프로그램에서 스레드입니다. 내가 백그라운드에서 음악을 재생하려면 가정, 그래서 startService() 방법을 호출합니다. 그러나 현재 재생중인 노래의 정보를 얻고 싶어, 나는 현재 노래에 대한 정보를 제공하는 서비스를 바인딩합니다. 바인딩된 서비스를 만들려면 onBind() 콜백 메서드를 구현하여 서비스와의 통신을 위한 인터페이스를 정의하는 IBinder를 반환합니다. 그런 다음 다른 응용 프로그램 구성 요소는 bindService()를 호출하여 인터페이스를 검색하고 서비스에서 메서드호출을 시작할 수 있습니다. 서비스는 바인딩된 응용 프로그램 구성 요소를 제공하기 위해서만 작동하므로 서비스에 바인딩된 구성 요소가 없는 경우 시스템이 이를 파기합니다.

onStartCommand()를 통해 서비스를 시작할 때와 동일한 방식으로 바인딩된 서비스를 중지할 필요가 없습니다. 그림 2. 서비스 수명 주기입니다. 왼쪽의 다이어그램은 startService()로 서비스를 만들 때의 수명 주기를 표시하고 오른쪽의 다이어그램은 bindService()로 서비스를 만들 때 수명 주기를 표시합니다. IntentService 클래스는 Android 시스템에서 비동기적으로 호출되는 onHandleIntent() 메서드를 제공합니다. https://www.vogella.com/tutorials/AndroidTaskScheduling/article.html – Android 작업 일정을 참조하여 주기적으로 서비스를 예약하는 방법을 알아봅니다. 새 로그캣 필터 만들기 대화 상자 이름에서 필터 서비스Example 및 로그 태그별 필드에 ServiceExampleActivity.java에 선언된 태그 값을 입력합니다(위의 코드 예제에서는 ServiceExample). 서비스는 stopSelf() 메서드를 호출하여 자체적으로 종료할 수 있습니다. 이 작업은 일반적으로 서비스가 작업을 완료하는 경우 수행됩니다. 다음 섹션에서는 더 많은 코드를 사용하지만 동시 시작 요청을 처리해야 하는 경우 적절할 수 있는 기본 Service 클래스를 확장할 때 동일한 종류의 서비스가 구현되는 방법을 살펴보겠습니다.

대부분의 정교한 Android 앱은 백그라운드 실행이 필요한 작업을 수행해야 합니다. 즉, 모든 UI 업데이트에 사용되는 기본 스레드가 아닌 백그라운드 스레드를 의미합니다. 참고: 시작된 서비스는 stopSelf() 또는 stopService(에 대한 호출에 의해 중지되지만 서비스에 대한 각각의 콜백이 없습니다(onStop() 콜백없음). 서비스가 클라이언트에 바인딩되지 않는 한 서비스가 중지될 때 시스템이 이를 소멸합니다.onDestroy() 수신된 유일한 콜백입니다. 모든 클라이언트가 서비스를 바인딩 해제할 때까지 서비스를 중지할 수 없습니다. 서비스에 바인딩된 클라이언트는 바인딩 및 시작 된 서비스에 대 한 시작 된 상태로 이동 하지 않습니다 때문에 서비스 자체를 시작 된 상태로 이동 하는 것이 안전 합니다. 활동과 서비스 간의 통신에는 여러 가지 가능성이 있습니다. 다음 설명에서는 가능한 접근 방식에 대해 설명하고 사용할 권장 사항을 제공합니다. onHandleIntent() 외에도 슈퍼 클래스를 호출할 필요가 없는 유일한 방법은 onBind()입니다.

서비스에서 바인딩을 허용하는 경우에만 이 기능을 구현해야 합니다.