Точка входа приложения для Android

Когда мы разрабатываем приложение для Android, мы всегда начинаем с onCreate() основной активности. Очевидно, что есть некоторые инициализации, которые необходимо выполнить перед вызовом функции onCreate() . Мой вопрос: какова точка входа (или main метод) приложения Android? Что делает Dalvik VM в самом начале (т. Е. Когда он заканчивает инициализацию самостоятельно и собирается передать управление в приложение)? Где я могу найти код этого main ?

Первой точкой входа является класс приложения, о котором указал Кингстон.

Однако самой простой задачей, чтобы получить первую начальную точку, является проверка стека при отладке onCreate.

Вы можете проверить Instrumentation, этот звук походит на то, что вы хотите.

http://developer.android.com/reference/android/app/Instrumentation.html

 MainActivity.onCreate(Bundle) line: 12 Instrumentation.callActivityOnCreate(Activity, Bundle) line: 1047 ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2627 ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2679 ActivityThread.access$2300(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 125 ActivityThread$H.handleMessage(Message) line: 2033 ActivityThread$H(Handler).dispatchMessage(Message) line: 99 Looper.loop() line: 123 ActivityThread.main(String[]) line: 4627 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] Method.invoke(Object, Object...) line: 521 ZygoteInit$MethodAndArgsCaller.run() line: 868 ZygoteInit.main(String[]) line: 626 NativeStart.main(String[]) line: not available [native method] 

Вы должны расширить класс Application и переопределить метод onCreate.

Для справки: класс приложения

Я сам этого не знаю, но это звучит интересный вопрос. Это код, который запускает новое действие и после кода, вы попадете в код JNI

 public void startActivityForResult(Intent intent, int requestCode) { if (mParent == null) { Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this, intent, requestCode); if (ar != null) { mMainThread.sendActivityResult( mToken, mEmbeddedID, requestCode, ar.getResultCode(), ar.getResultData()); } if (requestCode >= 0) { // If this start is requesting a result, we can avoid making // the activity visible until the result is received. Setting // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the // activity hidden during this time, to avoid flickering. // This can only be done when a result is requested because // that guarantees we will get information back when the // activity is finished, no matter what happens to it. mStartedActivity = true; } } else { mParent.startActivityFromChild(this, intent, requestCode); } } 

Исходный код Android доступен, но немного сложно получить его, потому что он плохо документирован. Вам нужно будет установить repo а затем загрузить проект framework/base

В основных программах Java нам нужен метод main (), потому что при выполнении байтового кода JVM (Java Virtual Machine) будет искать метод main () в классе и запускать его там.

В Android виртуальная машина Dalvik (DVM) предназначена для поиска класса, который является подклассом Activity и который устанавливается как LAUNCHER для запуска выполнения приложения из метода onCreate (), поэтому нет необходимости в Main ().