@Override
  public void onCreate() {
    long timeToStart = System.currentTimeMillis();
    super.onCreate();
    settingsAPI = new net.osmand.plus.api.SettingsAPIImpl(this);
    externalServiceAPI = new net.osmand.plus.api.ExternalServiceAPIImpl(this);
    internalToDoAPI = new net.osmand.plus.api.InternalToDoAPIImpl(this);
    internalOsmAndAPI = new net.osmand.plus.api.InternalOsmAndAPIImpl(this);
    sqliteAPI = new SQLiteAPIImpl(this);

    // settings used everywhere so they need to be created first
    osmandSettings = createOsmandSettingsInstance();
    // always update application mode to default
    osmandSettings.APPLICATION_MODE.set(osmandSettings.DEFAULT_APPLICATION_MODE.get());

    routingHelper = new RoutingHelper(this, player);
    taskManager = new OsmAndTaskManager(this);
    manager = new ResourceManager(this);
    daynightHelper = new DayNightHelper(this);
    locationProvider = new OsmAndLocationProvider(this);
    savingTrackHelper = new SavingTrackHelper(this);
    liveMonitoringHelper = new LiveMonitoringHelper(this);
    uiHandler = new Handler();
    rendererRegistry = new RendererRegistry();
    targetPointsHelper = new TargetPointsHelper(this);
    checkPrefferedLocale();
    startApplication();
    if (LOG.isDebugEnabled()) {
      LOG.debug(
          "Time to start application "
              + (System.currentTimeMillis() - timeToStart)
              + " ms. Should be less < 800 ms");
    }
    timeToStart = System.currentTimeMillis();
    OsmandPlugin.initPlugins(this);

    if (LOG.isDebugEnabled()) {
      LOG.debug(
          "Time to init plugins "
              + (System.currentTimeMillis() - timeToStart)
              + " ms. Should be less < 800 ms");
    }
  }