Android API 레벨 30 이상에 대해 백그라운드에서 GPS 위치를 얻는 가장 좋은 방법
Nov 30 2020
내 응용 프로그램은 사용자의 위치에 따라 속도 제한을 결정하고 사용자가 초과했는지 여부를 알려줍니다. Android API 레벨 30 이상부터 Google은 IntentService를 지원 중단 된 것으로 정의 하고 WorkManager 또는 JobIntentService 사용 을 제안 하고 Firebase JobDispatcher 에서 WorkManager 로 마이그레이션해야한다고 명시했습니다 . 이 문제를 해결하는 두 가지 방법이 있습니다.
- OneTimeWorkRequest 를 시작하고 응용 프로그램이 백그라운드에서 실행되는 동안이 메서드에서 주기적으로이 메서드를 다시 시작 하도록 지정합니다.
- 최소 허용 간격 15 분으로 PeriodicWorkRequest 를 실행 합니다. 이 메서드에서 최대 약 10 분 동안 실행되는 JobIntentService 메서드를 실행합니다 . 그러나 메서드가 실행되지 않거나 완료되기 전에 시스템에 의해 파괴 될 수 있습니다.
나는 다음에 대해 걱정한다.
- 잠재적 인 메모리 누수;
- 포 그라운드에서 백그라운드로 또는 그 반대로 이동할 때 WorkManager 또는 JobIntentService의 잠재적 인 문제
- MVVM 패턴을 사용하는 기능
답변
5 NikolaDespotoski Dec 07 2020 at 23:42
두 번째 옵션을 선호합니다 Worker
..
귀하의 우려 사항에 관하여 :
- 가능한 누출은 잘못된 위치 콜백입니다. 이것은 쉽게 추적 할 수 있으므로 너무 걱정할 필요가 없습니다.
- 스케줄
Worker
은 데이터베이스에 저장되고 애플리케이션과 독립적으로 실행됩니다. 즉, 응용 프로그램의 사용자 가시성은 효과가 없습니다. 귀하의 경우에는, 그 존재는 당신이 할당 할 수 있습니다 말했다, 사용자가 응용 프로그램을 다시 시작하면 당신이 예약 된 작업을 취소 할 가정tag
받는 사람Worker
및 예약 된 나에 지속적인 사용자에게 표시되면 제거. - 나는
Worker
s를 MVVM에서 격리하고 작업자에 사용 사례 / 인터랙 터를 주입하고 사용 사례 / 인터랙 터 쿼리를 실행하는 것을 선호합니다 . 상태WorkerManager
를 쿼리하기위한 훌륭한 API를 제공Worker
합니다. 이전 구현과 API> = 30 사이의 공통점을 작성해야 할 수도 있습니다Worker
. 사용 사례에 대해 다른 실행 컨테이너로 취급하십시오 .