Melhor maneira de obter a localização do GPS em segundo plano para Android API de nível 30 e superior
Nov 30 2020
Meu aplicativo determina o limite de velocidade pela localização do usuário e diz ao usuário se ele o excedeu. A partir da API Android de nível 30 e superior, o Google definiu IntentService como obsoleto e sugere o uso de WorkManager ou JobIntentService e também afirma que é necessário migrar do Firebase JobDispatcher para o WorkManager. Vejo duas maneiras de resolver esse problema:
- Inicie OneTimeWorkRequest e especifique para reiniciar este método periodicamente neste método enquanto o aplicativo está sendo executado em segundo plano.
- Execute PeriodicWorkRequest com um intervalo mínimo permitido de 15 minutos. Neste método, execute o método JobIntentService, que é executado por cerca de 10 minutos , mas o método pode não ser executado ou pode ser destruído pelo sistema antes de ser concluído.
Estou preocupado sobre:
- potenciais vazamentos de memória;
- problemas potenciais com WorkManager ou JobIntentService ao passar do primeiro plano para o segundo plano e vice-versa
- a capacidade de usar o padrão MVVM
Respostas
5 NikolaDespotoski Dec 07 2020 at 23:42
Eu preferiria ir com a segunda opção, isso dá a você mais tempo entre cada reprogramação do Worker
.
Em relação às suas preocupações:
- O único vazamento possível é a condução incorreta de retornos de chamada de localização. Isso pode ser facilmente rastreado, você não deve se preocupar muito com isso.
- Os agendados
Worker
são colocados no banco de dados e executados independentemente da aplicação. O que significa que a visibilidade do aplicativo pelo usuário não tem efeito. No seu caso, presumo que você deseja cancelar seu trabalho agendado assim que o usuário retomar o aplicativo, isto é, você pode atribuir umtag
aoWorker
e eliminar qualquer agendado ou em andamento que esteja visível para o usuário. - Eu prefiro manter os
Worker
s isolados do MVVM e apenas injetar casos de uso / interatores no trabalhador e executar o caso de uso / consulta ao interagente.WorkerManager
oferece APIs excelentes para consultar oWorker
status, você pode precisar escrever um terreno comum entre sua implementação anterior e para API> = 30. Trate oWorker
como um contêiner de execução diferente para seu caso de uso.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino