From e44d2875ccd0e307d58ba01491971f2509ba3583 Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Thu, 7 Mar 2013 11:40:14 -0800 Subject: [PATCH] Fix gpx lock in the start of a recording. Use a handler thread to obtain locationListener callbacks. --- .../services/TrackRecordingService.java | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java index 747efd0f7..ce47535bf 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java @@ -250,11 +250,7 @@ public class TrackRecordingService extends Service { @Override public void run() { if (isRecording() && !isPaused()) { - handler.post(new Runnable() { - public void run() { - registerLocationListener(); - } - }); + registerLocationListener(); } } }; @@ -962,20 +958,29 @@ public class TrackRecordingService extends Service { * Registers the location listener. */ private void registerLocationListener() { - unregisterLocationListener(); + /* + * Use the handler so the requestLocationUpdaets locationListener will be + * invoked on the handler thread. + */ + handler.post(new Runnable() { + public void run() { + unregisterLocationListener(); - if (myTracksLocationManager == null) { - Log.e(TAG, "locationManager is null."); - return; - } - try { - long interval = locationListenerPolicy.getDesiredPollingInterval(); - myTracksLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, interval, - locationListenerPolicy.getMinDistance(), locationListener); - currentRecordingInterval = interval; - } catch (RuntimeException e) { - Log.e(TAG, "Could not register location listener.", e); - } + if (myTracksLocationManager == null) { + Log.e(TAG, "locationManager is null."); + return; + } + try { + long interval = locationListenerPolicy.getDesiredPollingInterval(); + myTracksLocationManager.requestLocationUpdates( + LocationManager.GPS_PROVIDER, interval, locationListenerPolicy.getMinDistance(), + locationListener); + currentRecordingInterval = interval; + } catch (RuntimeException e) { + Log.e(TAG, "Could not register location listener.", e); + } + } + }); } /**