From bfaaed7e5c1265626594e55df1452bd774763399 Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Sat, 27 Aug 2016 21:40:46 +0200 Subject: [PATCH] Detcach samples from the session after querying, to save memory --- .../gadgetbridge/devices/AbstractSampleProvider.java | 11 +++++++++++ .../gadgetbridge/devices/SampleProvider.java | 4 ++++ .../devices/pebble/PebbleHealthSampleProvider.java | 1 + .../gadgetbridge/database/EntitiesTest.java | 1 + 4 files changed, 17 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java index 563efc8c2..1937856a1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java @@ -93,9 +93,20 @@ public abstract class AbstractSampleProvider i for (T sample : samples) { sample.setProvider(this); } + detachFromSession(); return samples; } + /** + * Detaches all samples of this type from the session. Changes to them may not be + * written back to the database. + * + * Subclasses should call this method after performing custom queries. + */ + protected void detachFromSession() { + getSampleDao().detachAll(); + } + private WhereCondition[] getClauseForActivityType(QueryBuilder qb, int activityTypes) { if (activityTypes == ActivityKind.TYPE_ALL) { return NO_CONDITIONS; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java index 4c67d289e..df91696e9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java @@ -9,6 +9,10 @@ import nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample; /** * Interface to retrieve samples from the database, and also create and add samples to the database. * There are multiple device specific implementations, this interface defines the generic access. + * + * Note that the provided samples must typically be considered read-only, because they are immediately + * removed from the session before they are returned. + * * @param the device/provider specific sample type (must extend AbstractActivitySample) */ public interface SampleProvider { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleHealthSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleHealthSampleProvider.java index 1623679fa..81cedb4e0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleHealthSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleHealthSampleProvider.java @@ -57,6 +57,7 @@ public class PebbleHealthSampleProvider extends AbstractSampleProvider