forked from upstream-mirrors/OpenTracks
Optimization: getting rid of some objects when the hub is stopped.
This commit is contained in:
@@ -158,10 +158,10 @@ public class TrackDataHub {
|
|||||||
private final TrackDataListeners listeners;
|
private final TrackDataListeners listeners;
|
||||||
|
|
||||||
/** Wrapper for interacting with system data managers. */
|
/** Wrapper for interacting with system data managers. */
|
||||||
private final DataSourcesWrapper dataSources;
|
private DataSourcesWrapper dataSources;
|
||||||
|
|
||||||
/** Manager for system data listener registrations. */
|
/** Manager for system data listener registrations. */
|
||||||
private final DataSourceManager dataSourceManager;
|
private DataSourceManager dataSourceManager;
|
||||||
|
|
||||||
/** Condensed listener for system data listener events. */
|
/** Condensed listener for system data listener events. */
|
||||||
private final DataSourceListener dataSourceListener = new HubDataSourceListener();
|
private final DataSourceListener dataSourceListener = new HubDataSourceListener();
|
||||||
@@ -206,7 +206,6 @@ public class TrackDataHub {
|
|||||||
SharedPreferences preferences = context.getSharedPreferences(Constants.SETTINGS_NAME, 0);
|
SharedPreferences preferences = context.getSharedPreferences(Constants.SETTINGS_NAME, 0);
|
||||||
MyTracksProviderUtils providerUtils = MyTracksProviderUtils.Factory.get(context);
|
MyTracksProviderUtils providerUtils = MyTracksProviderUtils.Factory.get(context);
|
||||||
instance = new TrackDataHub(context,
|
instance = new TrackDataHub(context,
|
||||||
new DataSourcesWrapperImpl(context, preferences),
|
|
||||||
new TrackDataListeners(),
|
new TrackDataListeners(),
|
||||||
preferences, providerUtils,
|
preferences, providerUtils,
|
||||||
TARGET_DISPLAYED_TRACK_POINTS);
|
TARGET_DISPLAYED_TRACK_POINTS);
|
||||||
@@ -217,15 +216,13 @@ public class TrackDataHub {
|
|||||||
* Injection constructor.
|
* Injection constructor.
|
||||||
*/
|
*/
|
||||||
// @VisibleForTesting
|
// @VisibleForTesting
|
||||||
TrackDataHub(Context ctx, DataSourcesWrapper dataSources, TrackDataListeners listeners,
|
TrackDataHub(Context ctx, TrackDataListeners listeners, SharedPreferences preferences,
|
||||||
SharedPreferences preferences, MyTracksProviderUtils providerUtils, int targetNumPoints) {
|
MyTracksProviderUtils providerUtils, int targetNumPoints) {
|
||||||
this.context = ctx;
|
this.context = ctx;
|
||||||
this.listeners = listeners;
|
this.listeners = listeners;
|
||||||
this.preferences = preferences;
|
this.preferences = preferences;
|
||||||
this.providerUtils = providerUtils;
|
this.providerUtils = providerUtils;
|
||||||
this.dataSources = dataSources;
|
|
||||||
this.targetNumPoints = targetNumPoints;
|
this.targetNumPoints = targetNumPoints;
|
||||||
this.dataSourceManager = new DataSourceManager(dataSourceListener, dataSources);
|
|
||||||
this.locationFactory = new DoubleBufferedLocationFactory();
|
this.locationFactory = new DoubleBufferedLocationFactory();
|
||||||
|
|
||||||
SELECTED_TRACK_KEY = context.getString(R.string.selected_track_key);
|
SELECTED_TRACK_KEY = context.getString(R.string.selected_track_key);
|
||||||
@@ -252,6 +249,8 @@ public class TrackDataHub {
|
|||||||
listenerHandlerThread = new HandlerThread("trackDataContentThread");
|
listenerHandlerThread = new HandlerThread("trackDataContentThread");
|
||||||
listenerHandlerThread.start();
|
listenerHandlerThread.start();
|
||||||
listenerHandler = new Handler(listenerHandlerThread.getLooper());
|
listenerHandler = new Handler(listenerHandlerThread.getLooper());
|
||||||
|
dataSources = newDataSources();
|
||||||
|
dataSourceManager = new DataSourceManager(dataSourceListener, dataSources);
|
||||||
|
|
||||||
// This may or may not register internal listeners, depending on whether
|
// This may or may not register internal listeners, depending on whether
|
||||||
// we already had external listeners.
|
// we already had external listeners.
|
||||||
@@ -262,6 +261,11 @@ public class TrackDataHub {
|
|||||||
loadDataForAllListeners();
|
loadDataForAllListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @VisibleForTesting
|
||||||
|
protected DataSourcesWrapper newDataSources() {
|
||||||
|
return new DataSourcesWrapperImpl(context, preferences);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stops listening to data sources and reporting the data to external
|
* Stops listening to data sources and reporting the data to external
|
||||||
* listeners.
|
* listeners.
|
||||||
@@ -275,10 +279,12 @@ public class TrackDataHub {
|
|||||||
|
|
||||||
// Unregister internal listeners even if there are external listeners registered.
|
// Unregister internal listeners even if there are external listeners registered.
|
||||||
dataSourceManager.unregisterAllListeners();
|
dataSourceManager.unregisterAllListeners();
|
||||||
|
listenerHandlerThread.getLooper().quit();
|
||||||
|
|
||||||
started = false;
|
started = false;
|
||||||
|
|
||||||
listenerHandlerThread.getLooper().quit();
|
dataSources = null;
|
||||||
|
dataSourceManager = null;
|
||||||
listenerHandlerThread = null;
|
listenerHandlerThread = null;
|
||||||
listenerHandler = null;
|
listenerHandler = null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,7 +91,12 @@ public class TrackDataHubTest extends AndroidTestCase {
|
|||||||
dataSources = AndroidMock.createNiceMock("dataSources", DataSourcesWrapper.class);
|
dataSources = AndroidMock.createNiceMock("dataSources", DataSourcesWrapper.class);
|
||||||
|
|
||||||
listeners = new TrackDataListeners();
|
listeners = new TrackDataListeners();
|
||||||
hub = new TrackDataHub(context, dataSources, listeners, prefs, providerUtils, TARGET_POINTS) {
|
hub = new TrackDataHub(context, listeners, prefs, providerUtils, TARGET_POINTS) {
|
||||||
|
@Override
|
||||||
|
protected DataSourcesWrapper newDataSources() {
|
||||||
|
return dataSources;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void runInListenerThread(Runnable runnable) {
|
protected void runInListenerThread(Runnable runnable) {
|
||||||
// Run everything in the same thread.
|
// Run everything in the same thread.
|
||||||
|
|||||||
Reference in New Issue
Block a user