안드로이드 백그라운드 서비스 예제

참고: Android 9(API 수준 28) 이상및 전경 서비스를 사용하는 앱은 FOREGROUND_SERVICE 권한을 요청해야 합니다. 이것은 일반적인 권한이므로 시스템은 요청 앱에 자동으로 권한을 부여합니다. 오레오 스타트서비스에서 퇴보됩니다. 따라서 동일한 예제와 함께 Oreo에 대한 해결 방법을 제공 할 수 있습니다. 서비스는 사용자와 직접 상호 작용하지 않고 백그라운드에서 실행되는 구성 요소입니다. 서비스에 사용자 인터페이스가 없기 때문에 활동의 수명 주기에 바인딩되지 않습니다. 서비스는 반복적이고 잠재적인 장기 실행 작업, 새 데이터 확인, 데이터 처리, 인덱싱 콘텐츠 등에 사용됩니다. 배터리 수명을 개선하기 위해 Android에 대한 최근 제한으로 인해 이제 JobScheduler를 통해 정기적인 작업을 포함한 모든 백그라운드 작업을 예약해야 합니다. 대신, 대부분의 경우 한 응용 프로그램이 완전히 다시 시작된 후에도 IntentService 메시지를 선택할 수 있거나 여러 응용 프로그램이 서비스에서 메시지를 받을 수 있기를 원할 수 있습니다. 이러한 경우 대신 BroadcastReceiver를 사용해야 합니다. 이 예제에서는 앱이 서비스 및 활동 간에 내부적으로 통신할 수 있도록 허용하는 LocalBroadcastManager를 사용하고 있습니다.

서비스 내에서 로컬 브로드캐스트 메시지를 게시하는 방법을 살펴보겠습니다: 사용자 지정 서비스는 다른 Android 구성 요소, 즉 활동, 브로드캐스트 수신기 및 기타 서비스에서 시작됩니다. 작업을 작성하려면 JobService 클래스를 확장하기만 하면 됩니다. 이 onStartJob() 메서드는 주 스레드에서 실행되므로 활동에 렌더링될 알림 메시지를 생성할 수 있습니다. 모든 백그라운드 작업은 비동기적으로 수행해야 합니다. 이 메서드에 대 한 예상된 결과 true 해야 합니다., 완료 작업을 완료 해야 하는 경우에 특히. 보류 중인 의도 piStopService (mNotification에 전달) 실제로 Command.STOPinteger와 의도를 전달 합니다. startService(의도)를 여러 번 호출할 수 있다는 점을 기억하십니까? 이것은 그 예입니다. 서비스를 중지 하기 위해 시작 된 서비스의 onStartCommand() 메서드에서 처리 될 startService (의도)를 통해 의도 발생 합니다. 서비스에 바인딩된 클라이언트는 바인딩 및 시작 된 서비스에 대 한 시작 된 상태로 이동 하지 않습니다 때문에 서비스 자체를 시작 된 상태로 이동 하는 것이 안전 합니다. 서비스는 다른 응용 프로그램 구성 요소가 bindService() 메서드를 호출할 때 바인딩됩니다. 바인딩된 서비스는 다른 응용 프로그램 구성 요소가 바인딩된 한 실행됩니다.

서비스가 바인딩을 제공하지 않는 경우 startService()와 함께 제공되는 의도는 응용 프로그램 구성 요소와 서비스 간의 유일한 통신 모드입니다. 그러나 서비스가 결과를 다시 보내려면 서비스를 시작하는 클라이언트는 브로드캐스트에 대한 보류 중인 의도(getBroadcast()를 사용하여)를 만들고 서비스를 시작하는 의도의 서비스에 제공할 수 있습니다.

This entry was posted in Uncategorized by admin. Bookmark the permalink.

Comments are closed.