Localização Usuário - Duvidas

Galera, precisando da ajuda de vocês.

Um serviço no app que roda em segundo plano em uma aplicação de força de vendas.

Tenho classe que estende um BroadcastReceiver, para verificar se o serviço está ativo e fazer os devidos tratamentos e tenho uma classe que estende Service e que implemente os métodos:

  • GoogleApiClient.ConnectionCallbacks
  • GoogleApiClient.OnConnectionFailedListener
  • LocationListener

Isso tudo para obter a localização do usuário de tempos em tempos (a cada 1 minuto) onde o servidor solicita o envio das coordenada pelo firebase cloud message (FCM).

Depois de obter todas as lozalizações dentro deste 1 minuto, preciso enviar para um servidor (utilizando a biblioteca ion).

Meu problema é o seguinte, deixo a localização gravada num segundo banco de dados da aplicação, pois, quando o usuario está utilizando a aplicação (emitindo pedido por exemplo) e o serviço tenta gravar a localização esta dando exceção abaixo, pode ser porque o banco foi aberto duas vezes?

android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5)

Tentei utilizar o SharedPreferences, mais é que antes de enviar a localização dentro do 1 minutos vão ter X coordenadas gravadas e eu não tenho ideia de como fazer isso no SharedPreferences.

Daria para garvar em um Arraylist? Creio que corro o risco de perder as informações

Qual a melhor forma de fazer isso, utiliziar um segundo banco, sharedPreferences ou arraylist? Ou tem outra maneira melhor de fazer isso

Sem falar que durante o dia o usuário pode ficar sem serviço dados por estar em um cidade com cobertura ruim da operadora, podendo não enviar a cada um minuto a localização, mais mesmo assim ao final do dia preciso que envie todas as localizações capturadas.

E sobre logica que utilizando, seria a forma mais correta? Está no dicionario de boa praticas?

Desde já obrigado, valeu galera.

Porque o uso de duas bases? É necessário? Sobre o envio de informações quando o usuário estiver “dados”, eu indico utilizar o GCMNetworkManager, o Thiengo fez um video explicando: https://www.thiengo.com.br/gcmnetworkmanager-para-execucao-de-tarefas-no-background-android
Nele você pode executar uma tarefa de até 3 minutos em background, deixando que para a própria lib, definir o melhor momento para mandar as informações.

Valeu, vou ler mais sobre o GCM NetworkManager.

Sobre utilizar duas bases de dados, acho que sim, pois, creio eu que, corro o risco do usuário esta utilizando o banco para gravar um pedido por exemplo com o e ainda não fechou a conexão com o banco e nesse meio tempo quando rodar o service que tambem vai utilizar o banco para gravar/ler apresentar o erro:

android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5)

Concorda ou estou viajando na maionese?