From c92a60a892d62bf30d4d68a1c6a7c425975cd9d1 Mon Sep 17 00:00:00 2001 From: josejames Date: Thu, 24 Jul 2025 09:11:51 +0200 Subject: [PATCH 1/6] [update] dispatch to io --- src/main/java/com/statsig/androidsdk/StatsigClient.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/statsig/androidsdk/StatsigClient.kt b/src/main/java/com/statsig/androidsdk/StatsigClient.kt index fae7a7b..98737db 100644 --- a/src/main/java/com/statsig/androidsdk/StatsigClient.kt +++ b/src/main/java/com/statsig/androidsdk/StatsigClient.kt @@ -1010,7 +1010,7 @@ class StatsigClient() : LifecycleEventListener { val initializeValues = options.initializeValues this.user = normalizedUser exceptionHandler = errorBoundary.getExceptionHandler() - statsigScope = CoroutineScope(statsigJob + dispatcherProvider.main + exceptionHandler) + statsigScope = CoroutineScope(statsigJob + dispatcherProvider.io + exceptionHandler) val networkFallbackResolver = NetworkFallbackResolver(errorBoundary, getSharedPrefs(), statsigScope) store = Store(statsigScope, getSharedPrefs(), normalizedUser, sdkKey, options) From 0992651aa7b439b25c94fc4f2d1ff4459e1fabdc Mon Sep 17 00:00:00 2001 From: josejames Date: Thu, 24 Jul 2025 09:21:23 +0200 Subject: [PATCH 2/6] [update] dispatch to io --- .../java/com/statsig/androidsdk/StatsigClient.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/statsig/androidsdk/StatsigClient.kt b/src/main/java/com/statsig/androidsdk/StatsigClient.kt index 98737db..348786b 100644 --- a/src/main/java/com/statsig/androidsdk/StatsigClient.kt +++ b/src/main/java/com/statsig/androidsdk/StatsigClient.kt @@ -87,8 +87,8 @@ class StatsigClient() : LifecycleEventListener { errorBoundary.setKey(sdkKey) errorBoundary.capture( { - val normalizedUser = setup(application, sdkKey, user, options) statsigScope.launch { + val normalizedUser = setup(application, sdkKey, user, options) val initDetails = setupAsync(normalizedUser) initDetails.duration = System.currentTimeMillis() - initTime // The scope's dispatcher may change in the future. @@ -989,7 +989,7 @@ class StatsigClient() : LifecycleEventListener { } @VisibleForTesting - private fun setup( + private suspend fun setup( application: Application, sdkKey: String, user: StatsigUser? = null, @@ -1010,7 +1010,7 @@ class StatsigClient() : LifecycleEventListener { val initializeValues = options.initializeValues this.user = normalizedUser exceptionHandler = errorBoundary.getExceptionHandler() - statsigScope = CoroutineScope(statsigJob + dispatcherProvider.io + exceptionHandler) + statsigScope = CoroutineScope(statsigJob + dispatcherProvider.main + exceptionHandler) val networkFallbackResolver = NetworkFallbackResolver(errorBoundary, getSharedPrefs(), statsigScope) store = Store(statsigScope, getSharedPrefs(), normalizedUser, sdkKey, options) @@ -1065,8 +1065,10 @@ class StatsigClient() : LifecycleEventListener { StepType.LOAD_CACHE, Marker(isBlocking = true), ) - this@StatsigClient.store.syncLoadFromLocalStorage() - diagnostics.markEnd(KeyType.INITIALIZE, true, StepType.LOAD_CACHE) + withContext(dispatcherProvider.io) { + this@StatsigClient.store.syncLoadFromLocalStorage() + diagnostics.markEnd(KeyType.INITIALIZE, true, StepType.LOAD_CACHE) + } } if (initializeValues != null) { From e6895089a7a0b92774b61e94c192a635e2496ea3 Mon Sep 17 00:00:00 2001 From: josejames Date: Sat, 26 Jul 2025 18:33:41 +0200 Subject: [PATCH 3/6] [update] dispatch to io --- .../com/statsig/androidsdk/StatsigClient.kt | 42 +++++++++---------- src/main/java/com/statsig/androidsdk/Store.kt | 3 +- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/statsig/androidsdk/StatsigClient.kt b/src/main/java/com/statsig/androidsdk/StatsigClient.kt index 348786b..efa4409 100644 --- a/src/main/java/com/statsig/androidsdk/StatsigClient.kt +++ b/src/main/java/com/statsig/androidsdk/StatsigClient.kt @@ -87,8 +87,8 @@ class StatsigClient() : LifecycleEventListener { errorBoundary.setKey(sdkKey) errorBoundary.capture( { + val normalizedUser = setup(application, sdkKey, user, options) statsigScope.launch { - val normalizedUser = setup(application, sdkKey, user, options) val initDetails = setupAsync(normalizedUser) initDetails.duration = System.currentTimeMillis() - initTime // The scope's dispatcher may change in the future. @@ -989,7 +989,7 @@ class StatsigClient() : LifecycleEventListener { } @VisibleForTesting - private suspend fun setup( + private fun setup( application: Application, sdkKey: String, user: StatsigUser? = null, @@ -1065,10 +1065,8 @@ class StatsigClient() : LifecycleEventListener { StepType.LOAD_CACHE, Marker(isBlocking = true), ) - withContext(dispatcherProvider.io) { - this@StatsigClient.store.syncLoadFromLocalStorage() - diagnostics.markEnd(KeyType.INITIALIZE, true, StepType.LOAD_CACHE) - } + this@StatsigClient.store.syncLoadFromLocalStorage() + diagnostics.markEnd(KeyType.INITIALIZE, true, StepType.LOAD_CACHE) } if (initializeValues != null) { @@ -1305,17 +1303,17 @@ class StatsigClient() : LifecycleEventListener { KeyType.OVERALL, success, additionalMarker = - Marker( - evaluationDetails = store.getGlobalEvaluationDetails(), - error = - if (initResponse is InitializeResponse.FailedInitializeResponse) { - Diagnostics.formatFailedResponse( - initResponse, - ) - } else { - null - }, - ), + Marker( + evaluationDetails = store.getGlobalEvaluationDetails(), + error = + if (initResponse is InitializeResponse.FailedInitializeResponse) { + Diagnostics.formatFailedResponse( + initResponse, + ) + } else { + null + }, + ), overrideContext = context, ) logger.logDiagnostics(context) @@ -1328,12 +1326,12 @@ class StatsigClient() : LifecycleEventListener { KeyType.OVERALL, false, additionalMarker = - Marker( - error = - Marker.ErrorMessage( - message = "${e?.javaClass?.name}: ${e?.message}", + Marker( + error = + Marker.ErrorMessage( + message = "${e?.javaClass?.name}: ${e?.message}", + ), ), - ), overrideContext = context, ) this@StatsigClient.logger.logDiagnostics(context) diff --git a/src/main/java/com/statsig/androidsdk/Store.kt b/src/main/java/com/statsig/androidsdk/Store.kt index 169a70e..363aad0 100644 --- a/src/main/java/com/statsig/androidsdk/Store.kt +++ b/src/main/java/com/statsig/androidsdk/Store.kt @@ -6,6 +6,7 @@ import com.google.gson.annotations.SerializedName import com.google.gson.reflect.TypeToken import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.util.concurrent.ConcurrentHashMap private const val CACHE_BY_USER_KEY: String = "Statsig.CACHE_BY_USER" @@ -61,7 +62,7 @@ internal class Store(private val statsigScope: CoroutineScope, private val share currentUser = user } - fun syncLoadFromLocalStorage() { + fun syncLoadFromLocalStorage() = statsigScope.launch(dispatcherProvider.io) { val cachedResponse = StatsigUtil.syncGetFromSharedPrefs(sharedPrefs, CACHE_BY_USER_KEY) val cachedDeviceValues = StatsigUtil.syncGetFromSharedPrefs(sharedPrefs, STICKY_DEVICE_EXPERIMENTS_KEY) val cachedLocalOverrides = StatsigUtil.syncGetFromSharedPrefs(sharedPrefs, LOCAL_OVERRIDES_KEY) From d53815647438157af5374b215f887fa806ec0dff Mon Sep 17 00:00:00 2001 From: josejames Date: Sat, 26 Jul 2025 18:34:11 +0200 Subject: [PATCH 4/6] [update] dispatch to io --- .../com/statsig/androidsdk/StatsigClient.kt | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/statsig/androidsdk/StatsigClient.kt b/src/main/java/com/statsig/androidsdk/StatsigClient.kt index efa4409..063acf9 100644 --- a/src/main/java/com/statsig/androidsdk/StatsigClient.kt +++ b/src/main/java/com/statsig/androidsdk/StatsigClient.kt @@ -1303,17 +1303,17 @@ class StatsigClient() : LifecycleEventListener { KeyType.OVERALL, success, additionalMarker = - Marker( - evaluationDetails = store.getGlobalEvaluationDetails(), - error = - if (initResponse is InitializeResponse.FailedInitializeResponse) { - Diagnostics.formatFailedResponse( - initResponse, - ) - } else { - null - }, - ), + Marker( + evaluationDetails = store.getGlobalEvaluationDetails(), + error = + if (initResponse is InitializeResponse.FailedInitializeResponse) { + Diagnostics.formatFailedResponse( + initResponse, + ) + } else { + null + }, + ), overrideContext = context, ) logger.logDiagnostics(context) From 8ba325568ba28ebf59a8db49d6cc575f5aa668a3 Mon Sep 17 00:00:00 2001 From: josejames Date: Sat, 26 Jul 2025 18:34:28 +0200 Subject: [PATCH 5/6] [update] dispatch to io --- src/main/java/com/statsig/androidsdk/StatsigClient.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/statsig/androidsdk/StatsigClient.kt b/src/main/java/com/statsig/androidsdk/StatsigClient.kt index 063acf9..fae7a7b 100644 --- a/src/main/java/com/statsig/androidsdk/StatsigClient.kt +++ b/src/main/java/com/statsig/androidsdk/StatsigClient.kt @@ -1326,12 +1326,12 @@ class StatsigClient() : LifecycleEventListener { KeyType.OVERALL, false, additionalMarker = - Marker( - error = - Marker.ErrorMessage( - message = "${e?.javaClass?.name}: ${e?.message}", - ), + Marker( + error = + Marker.ErrorMessage( + message = "${e?.javaClass?.name}: ${e?.message}", ), + ), overrideContext = context, ) this@StatsigClient.logger.logDiagnostics(context) From 9a166d8711b78653a7316579c3d32e389b3f5063 Mon Sep 17 00:00:00 2001 From: josejames Date: Sat, 26 Jul 2025 18:34:50 +0200 Subject: [PATCH 6/6] [update] dispatch to io --- src/main/java/com/statsig/androidsdk/Store.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/statsig/androidsdk/Store.kt b/src/main/java/com/statsig/androidsdk/Store.kt index 363aad0..e8d0c48 100644 --- a/src/main/java/com/statsig/androidsdk/Store.kt +++ b/src/main/java/com/statsig/androidsdk/Store.kt @@ -6,7 +6,6 @@ import com.google.gson.annotations.SerializedName import com.google.gson.reflect.TypeToken import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import java.util.concurrent.ConcurrentHashMap private const val CACHE_BY_USER_KEY: String = "Statsig.CACHE_BY_USER"