El primer inicio de la aplicación de Android es muy lento y systrace muestra 30 segundos de bind
Actualmente estoy desarrollando una aplicación para Android y estoy tratando de mejorar la hora de inicio. Para hacerlo, estoy usando elSystrace herramienta.
La primera vez que ejecuto la aplicación (justo después de la instalación), tarda unos 40 segundos en iniciarse, y obtengo este seguimiento:
Como puede ver, hay una etiqueta de color púrpura claro de 30 segundos con títulobindApplication
.
Después de esto, cierro la aplicación (me alejé de las actividades recientes) y la vuelvo a abrir. Esta vez elbindApplication
la etiqueta dura solo 4 segundos:
Supongo que aquí es quebindApplication
está relacionado de alguna manera con el trabajo pesado en elonCreate
Método de aplicación, pero no veo cómo podría suceder eso. Por si acaso ayuda: en mionCreate
Inicializo las siguientes bibliotecas: Parse, Crashlytics, Timber, ParseFacebookUtils y Google Analytics.
EDITAR:
Aquí está el código de la subclase de la aplicación:
public class MyApp extends Application {
private Tracker tracker;
@Override public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
Trace.beginSection("MyApp");
}
Fabric.with(this, new Crashlytics());
// Parse setup
Parse.enableLocalDatastore(this);
ParseObject.registerSubclass( ... );
Parse.Configuration.Builder parseConfigBuilder = new Parse.Configuration.Builder(this).applicationId(
getString(R.string.parse_application_id))
.server(getString(R.string.parse_server_url));
if (BuildConfig.DEBUG) {
// add logs
Timber.plant(new DebugTree());
Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE);
parseConfigBuilder.addNetworkInterceptor(new ParseLogInterceptor());
}
Parse.initialize(parseConfigBuilder.build());
ParseFacebookUtils.initialize(this);
ParseInstallation.getCurrentInstallation().saveInBackground();
AnalyticsManager.getInstance().init(this);
AnalyticsManager.getInstance().debugMode(BuildConfig.DEBUG);
if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().
detectAll()
.penaltyLog()
.build());
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
Trace.endSection();
}
}
/**
* Gets the default {@link Tracker} for this {@link Application}.
* @return tracker
*/
synchronized public Tracker getDefaultTracker() {
if (tracker == null) {
GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
// To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG
tracker = analytics.newTracker(R.xml.global_tracker);
}
return tracker;
}
}