Android API 레벨 30 이상에 대해 백그라운드에서 GPS 위치를 얻는 가장 좋은 방법

Nov 30 2020

내 응용 프로그램은 사용자의 위치에 따라 속도 제한을 결정하고 사용자가 초과했는지 여부를 알려줍니다. Android API 레벨 30 이상부터 Google은 IntentService를 지원 중단 된 것으로 정의 하고 WorkManager 또는 JobIntentService 사용 을 제안 하고 Firebase JobDispatcher 에서 WorkManager 로 마이그레이션해야한다고 명시했습니다 . 이 문제를 해결하는 두 가지 방법이 있습니다.

  1. OneTimeWorkRequest 를 시작하고 응용 프로그램이 백그라운드에서 실행되는 동안이 메서드에서 주기적으로이 메서드를 다시 시작 하도록 지정합니다.
  2. 최소 허용 간격 15 분으로 PeriodicWorkRequest 를 실행 합니다. 이 메서드에서 최대 약 10 분 동안 실행되는 JobIntentService 메서드를 실행합니다 . 그러나 메서드가 실행되지 않거나 완료되기 전에 시스템에 의해 파괴 될 수 있습니다.

나는 다음에 대해 걱정한다.

  • 잠재적 인 메모리 누수;
  • 포 그라운드에서 백그라운드로 또는 그 반대로 이동할 때 WorkManager 또는 JobIntentService의 잠재적 인 문제
  • MVVM 패턴을 사용하는 기능

답변

5 NikolaDespotoski Dec 07 2020 at 23:42

두 번째 옵션을 선호합니다 Worker..

귀하의 우려 사항에 관하여 :

  • 가능한 누출은 잘못된 위치 콜백입니다. 이것은 쉽게 추적 할 수 있으므로 너무 걱정할 필요가 없습니다.
  • 스케줄 Worker은 데이터베이스에 저장되고 애플리케이션과 독립적으로 실행됩니다. 즉, 응용 프로그램의 사용자 가시성은 효과가 없습니다. 귀하의 경우에는, 그 존재는 당신이 할당 할 수 있습니다 말했다, 사용자가 응용 프로그램을 다시 시작하면 당신이 예약 된 작업을 취소 할 가정 tag받는 사람 Worker및 예약 된 나에 지속적인 사용자에게 표시되면 제거.
  • 나는 Workers를 MVVM에서 격리하고 작업자에 사용 사례 / 인터랙 터를 주입하고 사용 사례 / 인터랙 터 쿼리를 실행하는 것을 선호합니다 . 상태 WorkerManager를 쿼리하기위한 훌륭한 API를 제공 Worker합니다. 이전 구현과 API> = 30 사이의 공통점을 작성해야 할 수도 있습니다 Worker. 사용 사례에 대해 다른 실행 컨테이너로 취급하십시오 .