Optimization: getting rid of some objects when the hub is stopped.

This commit is contained in:
Rodrigo Damazio
2011-06-01 02:02:49 -03:00
parent 31737efd87
commit 31e386de44
2 changed files with 20 additions and 9 deletions
@@ -158,10 +158,10 @@ public class TrackDataHub {
private final TrackDataListeners listeners;
/** Wrapper for interacting with system data managers. */
private final DataSourcesWrapper dataSources;
private DataSourcesWrapper dataSources;
/** Manager for system data listener registrations. */
private final DataSourceManager dataSourceManager;
private DataSourceManager dataSourceManager;
/** Condensed listener for system data listener events. */
private final DataSourceListener dataSourceListener = new HubDataSourceListener();
@@ -206,7 +206,6 @@ public class TrackDataHub {
SharedPreferences preferences = context.getSharedPreferences(Constants.SETTINGS_NAME, 0);
MyTracksProviderUtils providerUtils = MyTracksProviderUtils.Factory.get(context);
instance = new TrackDataHub(context,
new DataSourcesWrapperImpl(context, preferences),
new TrackDataListeners(),
preferences, providerUtils,
TARGET_DISPLAYED_TRACK_POINTS);
@@ -217,15 +216,13 @@ public class TrackDataHub {
* Injection constructor.
*/
// @VisibleForTesting
TrackDataHub(Context ctx, DataSourcesWrapper dataSources, TrackDataListeners listeners,
SharedPreferences preferences, MyTracksProviderUtils providerUtils, int targetNumPoints) {
TrackDataHub(Context ctx, TrackDataListeners listeners, SharedPreferences preferences,
MyTracksProviderUtils providerUtils, int targetNumPoints) {
this.context = ctx;
this.listeners = listeners;
this.preferences = preferences;
this.providerUtils = providerUtils;
this.dataSources = dataSources;
this.targetNumPoints = targetNumPoints;
this.dataSourceManager = new DataSourceManager(dataSourceListener, dataSources);
this.locationFactory = new DoubleBufferedLocationFactory();
SELECTED_TRACK_KEY = context.getString(R.string.selected_track_key);
@@ -252,6 +249,8 @@ public class TrackDataHub {
listenerHandlerThread = new HandlerThread("trackDataContentThread");
listenerHandlerThread.start();
listenerHandler = new Handler(listenerHandlerThread.getLooper());
dataSources = newDataSources();
dataSourceManager = new DataSourceManager(dataSourceListener, dataSources);
// This may or may not register internal listeners, depending on whether
// we already had external listeners.
@@ -262,6 +261,11 @@ public class TrackDataHub {
loadDataForAllListeners();
}
// @VisibleForTesting
protected DataSourcesWrapper newDataSources() {
return new DataSourcesWrapperImpl(context, preferences);
}
/**
* Stops listening to data sources and reporting the data to external
* listeners.
@@ -275,10 +279,12 @@ public class TrackDataHub {
// Unregister internal listeners even if there are external listeners registered.
dataSourceManager.unregisterAllListeners();
listenerHandlerThread.getLooper().quit();
started = false;
listenerHandlerThread.getLooper().quit();
dataSources = null;
dataSourceManager = null;
listenerHandlerThread = null;
listenerHandler = null;
}
@@ -91,7 +91,12 @@ public class TrackDataHubTest extends AndroidTestCase {
dataSources = AndroidMock.createNiceMock("dataSources", DataSourcesWrapper.class);
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
protected void runInListenerThread(Runnable runnable) {
// Run everything in the same thread.