in sdk/appcenter/src/main/java/com/microsoft/appcenter/AppCenter.java [677:742]
private synchronized boolean configureInstance(Application application, String secretString, final boolean configureFromApp) {
/* Check parameters. */
if (application == null) {
AppCenterLog.error(LOG_TAG, "Application context may not be null.");
return false;
}
/* Enable a default log level for debuggable applications. */
if (!mLogLevelConfigured && (application.getApplicationInfo().flags & FLAG_DEBUGGABLE) == FLAG_DEBUGGABLE) {
AppCenterLog.setLogLevel(Log.WARN);
}
/* Configure app secret and/or transmission target. */
String previousAppSecret = mAppSecret;
if (configureFromApp && !configureSecretString(secretString)) {
return false;
}
/* Skip configuration of global states if already done. */
if (mHandler != null) {
/* If app started after library with an app secret, set app secret on channel now. */
if (mAppSecret != null && !mAppSecret.equals(previousAppSecret)) {
mHandler.post(new Runnable() {
@Override
public void run() {
mChannel.setAppSecret(mAppSecret);
applyStorageMaxSize();
}
});
}
return true;
}
/* Store state. */
mApplication = application;
/* Start looper. */
mHandlerThread = new HandlerThread("AppCenter.Looper");
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper());
mAppCenterHandler = new AppCenterHandler() {
@Override
public void post(@NonNull Runnable runnable, Runnable disabledRunnable) {
handlerAppCenterOperation(runnable, disabledRunnable);
}
};
mApplicationLifecycleListener = new ApplicationLifecycleListener(mHandler);
mApplication.registerActivityLifecycleCallbacks(mApplicationLifecycleListener);
/* The rest of initialization is done in background as we need storage. */
mServices = new HashSet<>();
mServicesStartedFromLibrary = new HashSet<>();
mHandler.post(new Runnable() {
@Override
public void run() {
finishConfiguration(configureFromApp);
}
});
AppCenterLog.info(LOG_TAG, "App Center SDK configured successfully.");
return true;
}