2012-02-15 104 views
30

我是Android新手,正在研究框架,它迫使我問這個問題。由於我們在Android中擴展活動,因此必須在Activity的某個地方有main或者Activity實現的隱藏類包含mainAndroid中的main()在哪裏?

我四處張望,卻找不到它。如果任何人能夠對此有明確的想法,我將不勝感激。

回答

12

Android使用java語言,但使用修改的運行時模型執行。正如其他人所說,每個套餐都有一個清單。該清單中指定了啓動點。轉到android網站,並執行基本教程。這將幫助您瞭解創建/部署/運行流程和基本應用生命週期。

2
onCreate() Method....See lifecycle of android class (Activity)..... 

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

+0

我很感謝你的回答,但是如果它的一個java類是如何它沒有主,並且它開始 – 2012-02-15 12:35:27

+0

第一個Android應用程序必須以Activity(它是java class extends Activity)開始......然後創建第一個呼叫 – 2012-02-15 12:38:48

2

在Android中,操作系統使用Dalvik虛擬機。執行應用程序的主要入口點被封裝在框架中。您可能想看看「What is Android?

實際上,Android中的每個Activity都可以被認爲是一個獨立的應用程序,並且擁有自己的生命週期。

+0

yes ....這更抽象。我很欣賞你的答案,但如果它的Java類是如何,它沒有主,它開始。 – 2012-02-15 12:34:12

2

你可以告訴它在清單文件中啓動時運行哪一個。沒有main()函數,因爲不必這樣做。 main()可能是用於「常規」Java應用程序的慣例,但它不適用於諸如瀏覽器小程序之類的東西。系統創建活動對象並調用其中的方法,該方法可能被稱爲main,也可能不被稱爲main。在這種情況下,事實並非如此。

onCreatemain()方法不同,並且從構造函數中可以在單個活動上調用兩次,例如,如果進程被終止並且用戶導航回活動。請參閱this

許多您可能認爲是Java「應用程序」的東西沒有自己的main()方法。例如,IIRC,servlet,WAR等沒有main()方法 - main()方法(如果有的話)位於容器中。

+0

我很感謝你的答案,但如果它的Java類是如何,它沒有主,它開始 – 2012-02-15 12:35:11

49

在覈心Java程序中,我們需要一個main()方法,因爲在執行字節碼時,JVM將在類中搜索main()方法並開始在那裏執行。

在Android的情況下,Dalvik虛擬機的設計目的是爲了找到一個類Activity的子類,它被設置爲啓動器以從其onCreate()方法開始執行應用程序,所以沒有必要的main()方法。請致電Activity

+1

是的..謝謝,一個很好的解釋 – 2012-02-15 12:37:27

+1

@BasimallaSebastin請接受這個答案,如果這最好地回答你的問題。 – wvdz 2015-04-15 12:23:23

+0

您的解釋描述了Android如何決定在用戶​​打開應用程序時要啓動哪個「Activity」,但這與底層應用程序框架啓動過程無關(實際上這非常複雜)。 'main()'方法在Android框架類「android.app.ActivityThread」中。這個方法創建Main(UI)'Thread',設置一個'Looper'並啓動事件循環。還有一些Android框架的其他部分涉及啓動/停止OS進程,啓動應用程序和活動以及服務和其他組件等。 – 2017-08-15 13:28:05

7

this博客條目瞭解Android應用程序啓動如何:

在Android系統的啓動Linux內核首先調用 過程「初始化」。 init讀取文件「/init.rc」和「init.device.rc」。 「init.device.rc」是設備特定的,在虛擬設備上,這個文件 被稱爲「init.goldfish.rc」。

init.rc通過程序「/ system/bin/app_process」啓動進程「Zygote」。 Zygote加載核心Java類,並對其執行初始處理。這些類可以通過Android應用程序 重複使用,因此這一步使它們更快到 開始。一旦Zygote的初始工作完成,該進程就會偵聽一個套接字並等待請求。

如果你看ZyogoteInit類,你會發現主要的方法。

正如其他人所說的,這個main()方法涉及設置Android應用程序環境。就開發人員而言,起點是啓動器活動的onCreate()方法。

4

實際上,main()方法是Android框架類android.app.ActivityThread。此方法爲OS進程創建主(UI)Thread,在其上設置Looper並啓動事件循環。

Android框架負責創建和銷燬操作系統進程,啓動應用程序,啓動活動,服務和其他組件。 ActivityManager是Android框架的一部分,它負責協調和管理不同的組件。

Android的體系結構與您可能從獨立Java應用程序中使用的體系結構有所不同。最大的區別是,所有組件(ActivityServiceBroadcastReceiver等)不一定運行在同一個OS進程或同一個虛擬機(VM)中。可以使單個應用程序中的組件運行在不同的OS進程中,並且還可以讓來自不同應用程序的組件運行在相同的OS進程中。在傳統Java中,main()方法是在創建OS進程並且虛擬機完成其初始化之後由虛擬機調用的方法。

+2

這是正確的答案。 – 2018-01-26 07:05:24