2012-02-15 20 views
30

Soy nuevo en Android, y estaba estudiando el marco y me obligó a hacer esta pregunta. Como estamos ampliando la Actividad en Android, tiene que haber main en algún lugar en Activity o hay una clase oculta que Activity implementa que contiene main.¿Dónde está main() en Android?

Miré a todas partes pero no pude encontrarlo. Agradecería si alguien pudiera dar una idea clara al respecto.

Respuesta

12

Android usa el lenguaje Java, pero se ejecuta utilizando un modelo de tiempo de ejecución modificado. Como otros han dicho, hay un manifiesto incluido en cada paquete. El punto de inicio se especifica en este manifiesto. Ve al sitio de Android y haz los tutoriales básicos. Esto lo pondrá en marcha con la comprensión del proceso de creación/implementación/ejecución y el ciclo de vida básico de la aplicación.

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

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

+0

Agradezco su respuesta, pero si es una clase de Java, ¿cómo es que no tiene main y comienza –

+0

La primera aplicación de Android debe comenzar con Activity (que es clase java extends Activity) ... Then oncreate call first –

2

En Android, el sistema operativo utiliza la máquina virtual Dalvik. El principal punto de entrada a la ejecución de la aplicación está encapsulado dentro del marco. Es posible que desee echar un vistazo a "What is Android?"

De hecho, cada actividad en Android se puede pensar que es una sola aplicación en sí misma con un ciclo de vida propio.

+0

yes .... eso es más abstracto. Aprecio tu respuesta, pero si es una clase Java, ¿cómo es que no tiene main y comienza? –

2

Dígale cuál ejecutar al iniciar en el archivo de manifiesto. No hay una función main() porque no tiene que ser así. main() puede ser una convención utilizada para aplicaciones java "regulares", pero no es para cosas como los applets de navegador. El sistema crea el objeto de actividad y llama a los métodos dentro de él, que pueden llamarse principal o no. En este caso, no lo es.

onCreate es diferente de un método main(), y de un constructor, en el que se puede invocar dos veces en una sola actividad, como si el proceso se cancela y el usuario vuelve a la actividad. Consulte this

Muchas cosas que podría considerar como una "aplicación" de Java no tienen su propio método main(). Por ejemplo, IIRC, servlets, WAR y similares no tienen métodos main(); el método main(), si lo hay, está en el contenedor.

+0

Agradezco su respuesta, pero si es una clase de Java, ¿cómo es que no tiene main y comienza –

49

En los programas centrales de Java, necesitamos un método main(), porque al ejecutar el código de bytes, la JVM buscará el método main() en la clase y comenzará a ejecutar allí.

En el caso de Android, la máquina virtual Dalvik está diseñado para encontrar una clase que es una subclase de Activity y que se establece como un lanzador para iniciar la ejecución de la aplicación de su método onCreate(), así que no hay necesidad de un método main().

Para obtener más información, consulte el ciclo de vida de Activity.

+1

sí ... gracias a una buena explicación –

+1

@BasimallaSebastin por favor acepte esta como la respuesta si esto responde mejor a su pregunta. – wvdz

+0

Su explicación describe cómo Android decide qué 'Actividad' ejecutar cuando el usuario abre una Aplicación, pero esto no tiene nada que ver con el proceso de inicio del marco de aplicación subyacente (que en realidad es bastante complicado). El método 'main()' está en la clase de marco de Android 'android.app.ActivityThread'. Este método crea el 'hilo' principal (UI), configura un 'Looper' en él e inicia el ciclo de evento. Hay otras partes del marco de Android que se ocupan de iniciar/detener los procesos del sistema operativo, iniciar aplicaciones y actividades y servicios y otros componentes, etc. –

7

Leer this entrada de blog para entender cómo se inicia una aplicación para Android:

Durante el inicio del sistema Android el núcleo de Linux llamada por primera vez el proceso "init". init lee los archivos "/init.rc" e "init.device.rc". "init.device.rc" es específico del dispositivo, en el dispositivo virtual este archivo se llama "init.goldfish.rc".

init.rc inicia el proceso "Zygote" a través del programa "/ system/bin/app_process". Zygote carga las clases principales de Java y realiza el procesamiento inicial de las mismas. Estas clases pueden ser reutilizadas por la aplicación de Android y, por lo tanto, este paso las hace más rápidas para comenzar en . Una vez que se realiza el trabajo inicial de Zygote, el proceso escucha un socket y espera las solicitudes.

Si mira en la clase ZyogoteInit, encontrará el método principal.

Como han mencionado otros, este método main() está involucrado en la configuración del entorno de la aplicación Android. En lo que respecta a un desarrollador, el punto de partida es el método onCreate() de la actividad del Iniciador.

4

En realidad, el método main() es la clase de marco de Android android.app.ActivityThread. Este método crea la Main (UI) Thread para un proceso de sistema operativo, configura el Looper en él e inicia el bucle de evento.

El framework Android es responsable de crear y destruir los procesos del sistema operativo, iniciar aplicaciones, iniciar actividades, servicios y otros componentes. El ActivityManager es parte del marco Android y es responsable de coordinar y administrar los diferentes componentes.

La arquitectura de Android es un poco diferente de lo que puede estar acostumbrado a partir de aplicaciones Java independientes. La mayor diferencia es que todos sus componentes (Activity, Service, BroadcastReceiver, etc.) no necesariamente se ejecutan en el mismo proceso del sistema operativo o en la misma máquina virtual (VM). Es posible tener componentes de una sola aplicación ejecutándose en diferentes procesos de sistema operativo y también es posible tener componentes de diferentes aplicaciones ejecutándose en el mismo proceso de sistema operativo. En Java tradicional, el método main() es el método que llama la máquina virtual una vez que se ha creado el proceso del sistema operativo y la máquina virtual ha completado su inicialización.

+2

Esa es la respuesta correcta. –