@@ -38,6 +38,7 @@ public final class SentryShakeDetector implements SensorEventListener {
3838 private @ Nullable SensorManager sensorManager ;
3939 private @ Nullable Sensor accelerometer ;
4040 private @ Nullable HandlerThread handlerThread ;
41+ private @ Nullable Handler handler ;
4142 private final @ NotNull AtomicLong lastShakeTimestamp = new AtomicLong (0 );
4243 private volatile @ Nullable Listener listener ;
4344 private @ NotNull ILogger logger ;
@@ -69,6 +70,11 @@ private void init(final @NotNull Context context) {
6970 if (sensorManager != null && accelerometer == null ) {
7071 accelerometer = sensorManager .getDefaultSensor (Sensor .TYPE_ACCELEROMETER , false );
7172 }
73+ if (accelerometer != null && handlerThread == null ) {
74+ handlerThread = new HandlerThread ("sentry-shake" );
75+ handlerThread .start ();
76+ handler = new Handler (handlerThread .getLooper ());
77+ }
7278 }
7379
7480 public void start (final @ NotNull Context context , final @ NotNull Listener shakeListener ) {
@@ -83,9 +89,6 @@ public void start(final @NotNull Context context, final @NotNull Listener shakeL
8389 SentryLevel .WARNING , "Accelerometer sensor not available. Shake detection disabled." );
8490 return ;
8591 }
86- handlerThread = new HandlerThread ("sentry-shake" );
87- handlerThread .start ();
88- final Handler handler = new Handler (handlerThread .getLooper ());
8992 sensorManager .registerListener (this , accelerometer , SensorManager .SENSOR_DELAY_NORMAL , handler );
9093 }
9194
@@ -96,9 +99,15 @@ public void stop() {
9699 if (sensorManager != null ) {
97100 sensorManager .unregisterListener (this );
98101 }
102+ }
103+
104+ /** Stops detection and releases the background thread. */
105+ public void close () {
106+ stop ();
99107 if (handlerThread != null ) {
100108 handlerThread .quitSafely ();
101109 handlerThread = null ;
110+ handler = null ;
102111 }
103112 }
104113
0 commit comments