2012-02-15 11 views
30

Sono nuovo di Android e stavo studiando il framework e mi ha costretto a fare questa domanda. Poiché stiamo estendendo l'attività in Android, ci deve essere main da qualche parte in Activity o c'è una classe nascosta che Activity implementa che contiene main.Dov'è main() in Android?

Ho cercato ovunque ma non sono riuscito a trovarlo. Apprezzerei se qualcuno potesse dare una chiara idea al riguardo.

risposta

12

Android utilizza il linguaggio java, ma viene eseguito utilizzando un modello runtime modificato. Come altri hanno già detto, c'è un manifest incluso in ogni pacchetto. Il punto di avvio è specificato in questo manifest. Vai al sito Android e fai le esercitazioni di base. Questo ti consentirà di capire come funziona il processo di creazione/distribuzione/esecuzione e il ciclo di vita delle app di base.

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

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

+0

01 Apprezzo la tua risposta ma se è una classe java come è che non ha main e inizia –

+0

La prima app Android deve iniziare con Activity (che è la classe java estende Activity) ... Quindi oncreate call first –

2

In Android, il sistema operativo utilizza Dalvik virtual machine. Il punto di accesso principale all'esecuzione dell'applicazione è incapsulato all'interno del framework. Potresti dare un'occhiata a "What is Android?"

In effetti, ogni attività in Android può essere considerata una singola applicazione a sé stante con un ciclo di vita a sé stante.

+0

yes .... è più astratto Apprezzo la tua risposta, ma se è una classe java, com'è che non ha main e inizia. –

2

Si indica quale si esegue all'avvio nel file manifest. Non esiste una funzione main() perché non è necessario. main() può essere una convenzione utilizzata per le app java "normali", ma non per cose come le applet del browser. Il sistema crea l'oggetto attività e chiama i metodi al suo interno, che possono o non possono essere chiamati principali. In questo caso, non lo è.

onCreate è diverso da un metodo main() e da un costruttore, in quanto può essere chiamato due volte su una singola attività, ad esempio se il processo viene interrotto e l'utente torna all'attività. Vedi this

Molte cose che potreste pensare come "applicazioni" Java non hanno il loro metodo main(). Ad esempio, IIRC, servlet, WAR e simili non hanno metodi main() - il metodo main(), se ce n'è uno, è nel contenitore.

+0

Apprezzo la tua risposta ma se è una classe java come è che non ha main e inizia –

49

Nei programmi Java di base è necessario un metodo main(), poiché durante l'esecuzione del codice byte la JVM cercherà il metodo main() nella classe e inizierà a eseguirlo.

Nel caso di Android, la macchina virtuale Dalvik è progettato per trovare una classe che è una sottoclasse di Activity e che è impostato come un avvio per avviare l'esecuzione dell'applicazione dal suo metodo onCreate(), quindi non c'è bisogno di un metodo main().

Per ulteriori informazioni, consultare il ciclo di vita di Activity.

+1

sì..grazie che una buona spiegazione –

+1

@BasimallaSebastin ti preghiamo di accettarla come risposta se questa risponde meglio alla tua domanda. – wvdz

+0

La tua spiegazione descrive come Android decide quale attività deve essere avviata quando l'utente apre un'app, ma ciò non ha nulla a che fare con il processo di avvio del framework dell'applicazione sottostante (che in realtà è piuttosto complicato). Il metodo 'main()' si trova nella classe di framework Android 'android.app.ActivityThread'. Questo metodo crea il 'Thread 'Main (UI), crea un' Looper' su di esso e avvia il loop degli eventi. Ci sono altre parti del framework Android che si occupano di avviare/arrestare processi OS, avviare applicazioni e attività e servizi e altri componenti, ecc. –

7

Leggi this blog per capire come un'applicazione Android inizia:

Durante l'avvio del sistema Android kernel Linux prima chiama il processo di "init". init legge i file "/init.rc" e "init.device.rc". "init.device.rc" è specifico del dispositivo, sul dispositivo virtuale questo file è chiamato "init.goldfish.rc".

init.rc avvia il processo "Zygote" tramite il programma "/ system/bin/app_process". Zygote carica le classi Java di base e esegue l'elaborazione iniziale di esse. Queste classi possono essere riutilizzate dall'applicazione Android e pertanto questo passaggio le rende più veloci all'inizio di . Una volta terminato il lavoro iniziale di Zygote, il processo ascolta il socket e attende le richieste.

Se si guarda nella classe ZyogoteInit, troverete il metodo principale.

Come altri hanno menzionato, questo metodo main() è coinvolto nella configurazione dell'ambiente dell'app Android. Per quanto riguarda lo sviluppatore, il punto di partenza è il metodo onCreate() dell'attività di avvio.

4

In realtà, il metodo main() è la classe di framework Android android.app.ActivityThread. Questo metodo crea la Main (UI) Thread per un processo del sistema operativo, imposta lo Looper su di esso e avvia il ciclo degli eventi.

Il framework Android è responsabile della creazione e della distruzione dei processi del sistema operativo, dell'avvio di applicazioni, dell'avvio di attività, servizi e altri componenti. Lo ActivityManager fa parte del framework Android ed è responsabile del coordinamento e della gestione di diversi componenti.

L'architettura di Android è leggermente diversa da quella a cui si può accedere da applicazioni Java autonome. La più grande differenza è che tutti i componenti (Activity, Service, BroadcastReceiver, ecc.) Non vengono necessariamente eseguiti nello stesso processo del sistema operativo o nella stessa macchina virtuale (VM). È possibile avere componenti da una singola applicazione in esecuzione in diversi processi del sistema operativo ed è anche possibile avere componenti da diverse applicazioni in esecuzione nello stesso processo del sistema operativo. Nella Java tradizionale, il metodo main() è il metodo richiamato dalla macchina virtuale dopo che il processo del sistema operativo è stato creato e la macchina virtuale ha completato l'inizializzazione.

+2

Questa è la risposta corretta. –