當我們開發Android應用程序時,我們總是從主要活動的onCreate()
方法開始。在調用onCreate()
之前,顯然應該完成一些初始化。我的問題是:什麼是Android應用程序的入口點(或main
方法)? Dalvik VM在開始時會調用什麼(即它何時完成自己的初始化,並且將要將控制權交給應用程序)?我在哪裏可以找到這main
的代碼?Android應用程序的入口點
回答
第一「進入」點是金士頓指出了應用程序類。
但是,獲得第一個起點的最簡單方法是在調試onCreate時檢查堆棧。
你可以檢查儀器,這聽起來有點像你想要的。
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方法。
我不知道它自己,但它聽起來是個有趣的問題。 This is the code觸發一個新的Activity
和下面的代碼,你會end up in JNI code
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源代碼可用,但它是一個有點棘手得到它,因爲它的不良記錄。您將擁有to install repo
然後下載framework/base
項目
是的。除此之外,你可以看看'。/ frameworks/base/core/java/android/app/ActivityThread.java','。/ frameworks/base/core/java/android/os/Looper.java','./ frameworks/base/core/java/android/app/ActivityThread.java','。/ frameworks/base/core/java/android/os/Message.java','./frameworks/base/core/java/android/ os/Handler.java'等。僅舉幾例。 – dacongy 2012-04-07 19:39:00
@dacongy是:)我不知道JNI不幸,所以我不知道在哪裏搜索 – Raffaele 2012-04-07 19:44:10
實際上,我從以下「@stefan bachert」提供的stacktrace的答案中獲得類名:) – dacongy 2012-04-07 19:47:57
在覈心Java程序中,我們需要一個main()方法,因爲在執行字節代碼時,JVM(Java虛擬機)將搜索main()方法並開始在那裏執行。
在Android中,(DVM)Dalvik虛擬機設計用於查找一個類,該類是Activity的一個子類,它被設置爲LAUNCHER以從onCreate()方法開始執行應用程序,所以不需要main()方法。
- 1. 應用程序入口點
- 2. 多個應用程序的入口點
- 3. java web應用程序的入口點
- 4. 與第二入口點的Android應用程序 - 帶到前面
- 5. Express.js應用程序入口點
- 6. C#應用程序域:從入口點
- 7. Premake4實用程序和應用程序入口點
- 8. Android應用程序重點
- 9. MATLAB或SciLab中用戶友好的應用程序入口點
- 10. 如何禁用MFC應用程序的WinMain入口點?
- 11. 「程序入口點ucrtbase_stdio_common」
- 12. Android應用程序中的Metro接口
- 13. Android應用程序的音頻接口
- 14. Android應用程序的HTTP接口
- 15. Android:將入口點活動更改爲應用程序更新應用程序更新
- 16. AppNameAppDelegate.h和.m是所有應用程序的入口點嗎?
- 17. 應用程序客戶端jar的多入口點(mainclass)
- 18. 在Visual Studio中的Qt應用程序 - 入口點
- 19. 在WinForm應用程序中移動DLL的入口點
- 20. Android:應用程序死亡後,如何爲新啓動設置入口點?
- 21. Android應用程序的多點觸控
- 22. Multidexing android應用程序的缺點
- 23. 港口Android應用程序到桌面?
- 24. 港口iPhone應用程序到Android
- 25. 港口Android應用程序黑莓10
- 26. Android:捕捉應用程序出口
- 27. 從Windows窗體啓動UWP應用程序 - 入口點?
- 28. 如何在Visual Studio中找到應用程序入口點(C++)
- 29. 如何在Facebook應用程序中驗證多個入口點?
- 30. 如何改善控制檯應用程序入口點
我曾嘗試過。我在這裏尋找更多「正式記錄」的答案。此外,Android框架的代碼是否可用(我的意思是,那些來自android。*的類)? – dacongy 2012-04-07 19:18:03
所有的android代碼都可用。它需要一段時間來下載並構建它,但你可以按照這裏的文檔:http://source.android.com/source/initializing.html – kingston 2012-04-07 19:20:22
順便說一句,如果你想下載嚴格按照指令在所有情況下,但關於安裝Java sdk。您也可以檢查此:http://stackoverflow.com/questions/9741293/error-installing-java-on-ubuntu-10-64bit – kingston 2012-04-07 19:35:00