Michael Skov
Michael Skov

Reputation: 53

Save gps-location to sqlite continuously

I'm trying to make my own gps-tracker, mainly for bike-rides. I managed to make a usable app, at least for personal use, but I wanted to improve it, and have added ContentProviders, Fragments, CursorAdapters and a Service to receive the onLocationChanges from GPS.

However, I have really no idea how to handle the stream of Locations I'm receiving. My old app just saved them to an ArrayList, so right now my Service is sending a Broadcast to my Activity, that saves them to the ArrayList.

Problem is, that when the ride is over, it takes from 5-15 seconds to save the locations to sqlite (yes, I'm using compiledstatement and transaction), and I would like to avoid that, by saving the locations when received. When I tried to do that, my app became unresponsive (as expected), as I was doing the insert in the UI thread, and I do receive location updates often.

This is of course the most important aspect of the app, so what is the solution?

Is there other options for a better user-experience ?

Upvotes: 1

Views: 1628

Answers (2)

Ifor
Ifor

Reputation: 2835

Personaly I think the gps track would be better in a file than embeded in the database tracks are lickly to be just big. It's the same senario as pictures where embeding in the database is not the recomended solution. The databases would just hold some summary information and a reference to the file. You wouild write out the file as you go so no big pauses at the end. You keep the local ArrayList as well while you are recording if you are using it for displaing a path on a map or a graphical plot etc. That's the way I am doing things in my biking app IpBike.

Upvotes: 0

Joe Malin
Joe Malin

Reputation: 8641

Use an IntentService to delegate the saving to another thread, then use applyBatch to do inserts.

Upvotes: 3

Related Questions