-1

Oreo 이유는 bound services인데 반해 (Started Services & IntentServices)는 허용되지 않습니다.Android Oreo의 백그라운드 실행 제한에서 바인드 된 서비스를 유지할 수있는 이유

내 액티비티의 oncreate() 메서드에서 바인딩하고 내 액티비티의 ondestroy() 메서드에서 언 바인딩하는 바인딩 된 서비스가 있다고 가정합니다. 이제 사용자가이 활동에 와서 home button을 누를 때 내 app goes in background이 무한한 시간 동안이 바운드 서비스가 개발자가 Oreo에서 제거하고 싶다고 생각하는 리소스를 사용할 예정이므로 어떤 이유인지 생각하지 마십시오. 또한 메모리 리소스를 낭비 할 수있는 경우 바인딩 된 서비스를 유지합니다.

답변

1

(시작 서비스 & IntentServices)는 허용되지 않는 반면 바인딩 된 서비스는 여전히 허용되는 이유는 무엇입니까?

이러한 서비스는 모두 허용됩니다. 그러나 시작된 비 포 그라운드 서비스는 ~ 1 분 동안 만 실행할 수 있습니다.

이제 시간의 무기한 금액이 결합 된 서비스는 안드로이드가 이전보다, 잠시 후 전혀 다른 당신의 백그라운드 프로세스를 종료하지 않습니다 자원

을 사용합니다. 순전히 바운드 서비스는 프로세스의 중요성을 높이 지 않습니다. 시작된 서비스 만 수행합니다.

그러나 바인딩 된 서비스의 프로세스 중요도는 서비스의 자체 프로세스와 모든 바인딩 된 클라이언트의 프로세스에 의해 관리됩니다. 그렇기 때문에 바운드 서비스가 Android 8.0의 변경에 의해 직접적으로 영향을받지 않는 이유입니다. — 서비스의 수명은 서비스 자체보다 클라이언트가 더 많은 것을 제어합니다. 따라서, 서비스가 코어 OS 프로세스 (예를 들어, NotificationListenerService)에 의해 바인드되는 경우, 시스템은 그 서비스가 얼마나 오래 있어야 하는지를 효과적으로 제어한다. 귀하의 경우에는 클라이언트와 서비스가 동일한 앱과 동일한 프로세스에 있으므로 프로세스가 백그라운드에서 정상적으로 종료 될 수 있습니다.

+0

docs 시간에서 1 분'시작된 비 포 그라운드 서비스는 ~ 1 분만 실행할 수 있습니다 .'라고 언급 한 곳부터 ?? 내 서비스가 1 분 안에 작업을 끝내면 문제없이 사용할 수 있습니까? –

+1

@SudhanshuGaur : [docs] (https://developer.android.com/about/versions/oreo/background.html#services)는 "몇 분"이라고 말합니다. 테스트에서 약 1 분이 소요됩니다. – CommonsWare

+0

그러면 어떤 시나리오에서 바인드 된 서비스가 정상적으로 종료되지 않을까요 ?? –

관련 문제