From 79f6fbc0e9206cb0e7c3b81df9ecddf7b54a3c69 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Fri, 5 Jun 2026 11:20:59 +0200 Subject: [PATCH] perf(android): Reuse SentryExecutorService for DeviceInfoUtil pre-caching Replace Executors.newSingleThreadExecutor() with options.getExecutorService() in DefaultAndroidEventProcessor to avoid creating a dedicated thread during init. The SDK already has an executor service available. --- .../sentry/android/core/DefaultAndroidEventProcessor.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/DefaultAndroidEventProcessor.java b/sentry-android-core/src/main/java/io/sentry/android/core/DefaultAndroidEventProcessor.java index 7671935bb05..93d24a1f89b 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/DefaultAndroidEventProcessor.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/DefaultAndroidEventProcessor.java @@ -23,8 +23,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.RejectedExecutionException; import org.jetbrains.annotations.NotNull; @@ -56,16 +54,16 @@ public DefaultAndroidEventProcessor( // noinspection Convert2MethodRef // some device info performs disk I/O, but it's result is cached, let's pre-cache it @Nullable Future deviceInfoUtil; - final @NotNull ExecutorService executorService = Executors.newSingleThreadExecutor(); try { deviceInfoUtil = - executorService.submit(() -> DeviceInfoUtil.getInstance(this.context, options)); + options + .getExecutorService() + .submit(() -> DeviceInfoUtil.getInstance(this.context, options)); } catch (RejectedExecutionException e) { deviceInfoUtil = null; options.getLogger().log(SentryLevel.WARNING, "Device info caching task rejected.", e); } this.deviceInfoUtil = deviceInfoUtil; - executorService.shutdown(); } @Override