
gms 위치 정보 수신을 받으려면 gms:play-services-location 라이브러리를 implementation 해야한다.
이걸 하면 Project에서 External Libraries에 아래와 같이 생긴다.

이게 위에서 GMS location sdk 이다.
이제 앱 코드에서 위치정보를 수신할려고 하면 FusedLocationProviderClient 을 사용 해서 위치 정보를 요청하면 된다.


이렇게 요청을 하면 앱에서는 콜백함수로 위치 정보를 일정 주기로 계속 받을 수 있다.
코드로는 저렇게 받으면 되고 실제 내부에서 어떻게 되는지 알아보도록 하자/
핸드폰에는 Google Play 서비스 앱이 있다.

그래서 requestLocationUpdates 요청하면 GMS location sdk 에서 Google Play 서비스 앱으로 요청이가고 서비스 앱은 위치정보를 획득해서 GMS location sdk 로 주는 방식이다.
예전에는 앱이 백그라운드에 있어도 위치를 비교적 자유롭게 수신할 수 있었지만, Android 8.0부터는 배터리와 백그라운드 실행 정책이 강화되면서 백그라운드 위치 수신이 크게 제한되었다. 그래서 위치를 지속적으로 수신해야 하는 경우에는 포그라운드 서비스를 사용하는 방식이 필요해졌다.
->
맨 위의 그림을 참고해서 설명하면,
1 의 위치 요청할때 앱이 백그라운드 상태면 요청을 무시하거나 3의 과정에서 앱이 백그라운드 상태면 응답을 주지 않는다 등등 시스템이 앱의 전체적인 상태를 결정해서 위치정보를 줄지 말지 결정한다
포그라운드 서비스란 Google Play 서비스 앱에 위치 요청을 할때 사용자가 인지하고 있으니, 앱이 백그라운드여도 계속 위치 정보를 줘도 된다고 알리는 수단
사용자에게 알림으로 드러낸 상태이니, 백그라운드여도 위치 작업을 계속할 수 있게 해주는 공식 수단