Android-эквивалент: void main()/Sub Main?

Я пытаюсь заставить свое Android-приложение запускать некоторый код при запуске из панели запуска ПЕРЕД запуском в действие. То есть я хочу, чтобы мое приложение начиналось с Sub Main, а не сначала переходило в Activity.

По сути, в псевдо я хочу сделать что-то вроде этого:

void main() {
    doSomeInitializationStuff();

    startActivity(myFirstActivity);
}

Согласно этому вопросу, похоже, что в Android буквально нет этой концепции. Итак, я рассматривал создание невидимого действия в качестве точки входа, но не могу понять, как сделать действие невидимым. Я пробовал эти два метода, которые, кажется, единственные, которые появляются в моих поисках, но они, похоже, на самом деле ничего не делают...

this.setVisible(false); this.setTheme(android.R.style.Theme_Translucent_NoTitleBar);


person eidylon    schedule 01.03.2011    source источник


Ответы (3)


Вместо того, чтобы создавать невидимую активность, вы можете создать активность-заставку и начать все ваши инициализации там.

Я не пробовал это, но вы можете расширить класс приложения и использовать onCreate в своем классе приложения, чтобы инициализировать то, что вам нужно.

Вот JavaDoc для onCreate класса приложения

/**
 * Called when the application is starting, before any other application
 * objects have been created.  Implementations should be as quick as
 * possible (for example using lazy initialization of state) since the time
 * spent in this function directly impacts the performance of starting the
 * first activity, service, or receiver in a process.
 * If you override this method, be sure to call super.onCreate().
 */
public void onCreate() {
}

Вам нужно будет сообщить приложению, что вы используете пользовательский класс приложения, используя параметр android:name в теге файла манифеста Android.

person Ravi Vyas    schedule 01.03.2011

В большинстве приложений для Android существует концепция SplashScreen, которую можно использовать для выполнения такого поведения, и настоящий мотив этого SplashScreen заключается в том, чтобы выполнять такие задачи в фоновом режиме, одновременно рекламируя само приложение и различные вещи, связанные с ним.

person ingsaurabh    schedule 01.03.2011

Одним из вариантов было бы иметь не невидимую активность, а SplashScreen. Это имеет то преимущество, что пользователь уже видит, что что-то происходит, когда приложение запускается, поэтому у него не может сложиться впечатление, что оно не работает. Для примера см., например, этот класс; вы бы поместили doSomeInitStuff() примерно в строку 54

В противном случае, я думаю, вы можете просто не загружать макет в onCreate() первой активности, а затем оттуда вперед.

person Heiko Rupp    schedule 01.03.2011
comment
Нет, без загрузки макета не работает. Я пробовал это, и я просто получаю черный экран с заголовком. - person eidylon; 02.03.2011