Skip to content

Commit c00de5a

Browse files
authored
[crashlytics] Specify the executor when calling onFailureListener (#6535)
To prevent unwanted executions in the main thread, callbacks should specify the executor explicitly.
1 parent 04bfe55 commit c00de5a

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

firebase-crashlytics/CHANGELOG.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Unreleased
2-
2+
* [fixed] Execute failure listener outside the main thread [#6535]
33

44
# 19.2.1
55
* [changed] Updated protobuf dependency to `3.25.5` to fix
@@ -634,4 +634,3 @@ The following release notes describe changes in the new SDK.
634634
from your `AndroidManifest.xml` file.
635635
* [removed] The `fabric.properties` and `crashlytics.properties` files are no
636636
longer supported. Remove them from your app.
637-

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/CrashlyticsRegistrar.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.google.firebase.analytics.connector.AnalyticsConnector;
1919
import com.google.firebase.annotations.concurrent.Background;
2020
import com.google.firebase.annotations.concurrent.Blocking;
21+
import com.google.firebase.annotations.concurrent.Lightweight;
2122
import com.google.firebase.components.Component;
2223
import com.google.firebase.components.ComponentContainer;
2324
import com.google.firebase.components.ComponentRegistrar;
@@ -42,6 +43,8 @@ public class CrashlyticsRegistrar implements ComponentRegistrar {
4243
Qualified.qualified(Background.class, ExecutorService.class);
4344
private final Qualified<ExecutorService> blockingExecutorService =
4445
Qualified.qualified(Blocking.class, ExecutorService.class);
46+
private final Qualified<ExecutorService> lightweightExecutorService =
47+
Qualified.qualified(Lightweight.class, ExecutorService.class);
4548

4649
static {
4750
// Add Crashlytics as a dependency of Sessions when this class is loaded into memory.
@@ -57,6 +60,7 @@ public List<Component<?>> getComponents() {
5760
.add(Dependency.required(FirebaseInstallationsApi.class))
5861
.add(Dependency.required(backgroundExecutorService))
5962
.add(Dependency.required(blockingExecutorService))
63+
.add(Dependency.required(lightweightExecutorService))
6064
.add(Dependency.deferred(CrashlyticsNativeComponent.class))
6165
.add(Dependency.deferred(AnalyticsConnector.class))
6266
.add(Dependency.deferred(FirebaseRemoteConfigInterop.class))
@@ -79,7 +83,8 @@ private FirebaseCrashlytics buildCrashlytics(ComponentContainer container) {
7983
container.getDeferred(AnalyticsConnector.class),
8084
container.getDeferred(FirebaseRemoteConfigInterop.class),
8185
container.get(backgroundExecutorService),
82-
container.get(blockingExecutorService));
86+
container.get(blockingExecutorService),
87+
container.get(lightweightExecutorService));
8388

8489
long duration = System.currentTimeMillis() - startTime;
8590
if (duration > 16) {

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/FirebaseCrashlytics.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ public class FirebaseCrashlytics {
6767
@NonNull Deferred<AnalyticsConnector> analyticsConnector,
6868
@NonNull Deferred<FirebaseRemoteConfigInterop> remoteConfigInteropDeferred,
6969
ExecutorService backgroundExecutorService,
70-
ExecutorService blockingExecutorService) {
70+
ExecutorService blockingExecutorService,
71+
ExecutorService lightExecutorService) {
7172

7273
Context context = app.getApplicationContext();
7374
final String appIdentifier = context.getPackageName();
@@ -160,7 +161,8 @@ public class FirebaseCrashlytics {
160161
// Kick off actually fetching the settings.
161162
settingsController
162163
.loadSettingsData(crashlyticsWorkers)
163-
.addOnFailureListener(ex -> Logger.getLogger().e("Error fetching settings.", ex));
164+
.addOnFailureListener(
165+
lightExecutorService, ex -> Logger.getLogger().e("Error fetching settings.", ex));
164166

165167
final boolean finishCoreInBackground = core.onPreExecute(appData, settingsController);
166168

0 commit comments

Comments
 (0)