Make the static field volatile and use double checking for performance.
Test: ./gradlew :startup:startup-runtime:connectedAndroidCheck
Change-Id: I120c787c04db761eb2fbc8462acf10c10af2e7e2
diff --git a/startup/startup-runtime/src/main/java/androidx/startup/AppInitializer.java b/startup/startup-runtime/src/main/java/androidx/startup/AppInitializer.java
index 92275a1..cd62780 100644
--- a/startup/startup-runtime/src/main/java/androidx/startup/AppInitializer.java
+++ b/startup/startup-runtime/src/main/java/androidx/startup/AppInitializer.java
@@ -47,7 +47,7 @@
/**
* The {@link AppInitializer} instance.
*/
- private static AppInitializer sInstance;
+ private static volatile AppInitializer sInstance;
/**
* Guards app initialization.
@@ -77,12 +77,14 @@
@NonNull
@SuppressWarnings("UnusedReturnValue")
public static AppInitializer getInstance(@NonNull Context context) {
- synchronized (sLock) {
- if (sInstance == null) {
- sInstance = new AppInitializer(context);
+ if (sInstance == null) {
+ synchronized (sLock) {
+ if (sInstance == null) {
+ sInstance = new AppInitializer(context);
+ }
}
- return sInstance;
}
+ return sInstance;
}
/**