From fb250f7fbc75faf3ed112c8147c39b7314debf8d Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto <5731772+marandaneto@users.noreply.github.com> Date: Fri, 29 May 2020 19:23:21 +0200 Subject: [PATCH] fix: update last session timestamp (#437) --- .../sentry/android/core/LifecycleWatcher.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/LifecycleWatcher.java b/sentry-android-core/src/main/java/io/sentry/android/core/LifecycleWatcher.java index 36956e622..5677e0603 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/LifecycleWatcher.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/LifecycleWatcher.java @@ -10,13 +10,15 @@ import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; final class LifecycleWatcher implements DefaultLifecycleObserver { - private long lastStartedSession = 0L; + private final AtomicLong lastUpdatedSession = new AtomicLong(0L); private final long sessionIntervalMillis; @@ -64,15 +66,18 @@ public void onStart(final @NotNull LifecycleOwner owner) { private void startSession() { if (enableSessionTracking) { - final long currentTimeMillis = currentDateProvider.getCurrentTimeMillis(); cancelTask(); - if (lastStartedSession == 0L - || (lastStartedSession + sessionIntervalMillis) <= currentTimeMillis) { + + final long currentTimeMillis = currentDateProvider.getCurrentTimeMillis(); + final long lastUpdatedSession = this.lastUpdatedSession.get(); + + if (lastUpdatedSession == 0L + || (lastUpdatedSession + sessionIntervalMillis) <= currentTimeMillis) { addSessionBreadcrumb("start"); hub.startSession(); runningSession.set(true); } - lastStartedSession = currentTimeMillis; + this.lastUpdatedSession.set(currentTimeMillis); } } @@ -81,6 +86,9 @@ private void startSession() { @Override public void onStop(final @NotNull LifecycleOwner owner) { if (enableSessionTracking) { + final long currentTimeMillis = currentDateProvider.getCurrentTimeMillis(); + this.lastUpdatedSession.set(currentTimeMillis); + scheduleEndSession(); }