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:

¿Alguien sabe si es normal que la primera carrera tarde tanto?¿Qué puedo hacer para mejorarlo?

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;
  }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta