2017-10-16 1 views
2

내 앱을 실행하기 위해 foreground service을 시작해야합니다. 앱이 계속 실행 중이며 앱이 백그라운드에 있어도 살해되지 않을 것입니다. 이 방법은 startForeground입니다.바인딩 된 서비스는 항상 포어 그라운드입니까?

또한 서비스와 통신해야하므로 가장 쉬운 옵션을 바인딩해야합니다 (동일한 프로세스에서 실행되어 반환 된 IBinder를 내 클래스로 캐스팅 할 수 있도록 계획하고 있습니다. 메서드를 호출하면됩니다.) 그러나 바운드 foreground services에 대한 정보를 찾을 수있는 곳이 없습니다.

문서 및 자습서를 통해 나는 전경 우선 순위를 얻지 못하도록 bindService에 대한 플래그 중 하나가 https://developer.android.com/reference/android/content/Context.html#BIND_NOT_FOREGROUND이라는 정보를 발견했습니다.

기본적으로 모든 bound serviceforeground이며, 알림이 필요하다는 것을 의미합니까 (문서에서는 절대로 언급하지 않습니다).

내 응용 프로그램이 포 그라운드 서비스를 사용하는 경우 백그라운드에서 응용 프로그램을 종료 할 수 있습니까?

답변

2

글쎄, 서비스에 대해 이야기 해 봅시다. 서비스는 시작, 바운드모두 수 있습니다. 그래서 당신은 실제로) (을 startService를하고 그 후 에게 startForeground()을하지만 bindService()에 갈 때, 당신은 통지를 제거하고 서비스 (전경이 상황에 대한 플래그 BIND_NOT_FOREGROUND 것 같아하지 만들 수 있습니다). 바운드 서비스는 전경이 아닙니다 (서비스를 제공하기 위해 경계를 설정하는 구성 요소의 우선 순위가 있습니다). 전경 서비스를 만들기 위해 알아 두었 듯이 startForeground() (상태 표시 줄에 알림이 추가되지 않음)을 호출 할 수 없으므로 유일한 방법은 startService()에서 onStartCommand()startForeground() 만 수행 할 작업을 처리합니다.

기본적으로 바운드 서비스는 포어 그라운드이 아니므로 통지 할 필요가 없습니다. 앱은 언제든지 시스템이나 사용자가 앱 설정에서 강제 종료 할 수 있지만 (강제 종료) 사용자와 앱에 서비스가 정말로 중요하다는 것을 시스템에 알리려면 포 그라운드로 만들어 시스템이 만지지 않도록하십시오 시스템이 프로세스에 충분한 메모리를 가질 때까지.

관련 문제