tamaño studio programacion móviles letra fuente español desarrollo curso cambiar aplicaciones android entry-point

studio - ¿Cómo puede el código fuente de Android no tener un método principal y aún ejecutarse?



manual programacion android español pdf (13)

He visto esto en algunos tutoriales ahora ... pero, ¿cómo puede el código fuente de Android no tener un método principal y aún funcionar?

Por ejemplo (de http://developer.android.com/guide/tutorials/hello-world.html ):

public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }

Eso corre pero no hay main !!!

También pensé que usar cosas como onCreate (o formLoad, etc.) era malo porque un constructor debería hacer ese trabajo y tales métodos incorporados pueden a veces oler mal. Pero onCreate es un punto de entrada? Incluso sin un principal?

¿Qué pasa si hay más de una actividad ... hay una jerarquía para estos controladores de eventos integrados? OnCreate triunfa sobre todo lo demás? De lo contrario, ¿cómo sabría la aplicación qué ejecutar o dónde ingresar al programa?

¡Gracias!


Eso corre pero no hay main !!!

Por supuesto. Muchas cosas que podría pensar 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() método main() , si existe, está en el contenedor.

Pero onCreate es un punto de entrada?

onCreate() es un método.

¿Qué pasa si hay más de una actividad ... hay una jerarquía para estos controladores de eventos integrados?

Realmente no.

OnCreate triunfa sobre todo lo demás?

Realmente no.

De lo contrario, ¿cómo sabría la aplicación qué ejecutar o dónde ingresar al programa?

Una aplicación no "sabe qué ejecutar o dónde ingresar al programa".

Una aplicación de Android es una cesta de componentes. Algunos componentes pueden estar vinculados a iconos en un lanzador de pantalla de inicio. Algunos componentes pueden estar vinculados a los temporizadores programados, como los trabajos cron o las tareas programadas de Windows. Algunos componentes pueden estar relacionados con eventos del sistema, como cuando el dispositivo se coloca o se retira de una base para automóvil. Esos componentes se crearán y utilizarán automáticamente cuando sea apropiado (por ejemplo, cuando un usuario toca el ícono en el iniciador de la pantalla de inicio). Sin embargo, otros componentes solo se crean y usan cuando su código los solicita específicamente.

Pensar en una aplicación de Android como si fuera un programa monolítico de Java en modo consola no le causará ningún problema.


Cada aplicación tendrá su propia máquina virtual. Para ejecutar una aplicación, dentro de su espacio (VM), debe tener un método principal.

Las actividades no son las clases reales que deben invocarse para el inicio de la aplicación. Existe una clase llamada Aplicación, que será la clase raíz para el lanzamiento de una aplicación.

Si no hay un método principal, ¿cómo puede una máquina virtual reconocer cómo iniciar una aplicación?

Framework tiene clases llamadas Process, VMRuntime, que son responsables de iniciar una aplicación. Que de hecho tratan con el método principal.

Para una mejor comprensión, estudia el servicio Zygote de Android. se ocupa del servicio Applicationmanager, ActivityStack Activity Threadds, etc.


Creo que la respuesta de Jonathon va en la dirección correcta. Él dice que el sistema operativo espera una cierta estructura. Hay un nombre para esa estructura que es una "máquina de estado". En este caso, Android lo llama el "ciclo de vida de la actividad". Rob proporciona un enlace a la documentación que contiene un diagrama importante de esa máquina de estado, aunque el texto está un poco seco. Una búsqueda rápida también me encontró el siguiente enlace que lo explica claramente: http://www.android-app-market.com/android-activity-lifecycle.html


El marco de la interfaz de usuario de Android encapsula algunos detalles comunes de Java, puede estudiar el código fuente del marco de la interfaz de usuario de Android


En Java, hay un main aunque no esté listado como main() . La página que aparece después de hacer clic en el icono, sea cual sea su nombre, es main() .


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

En Android, la Máquina Virtual Dalvik está diseñada para encontrar una clase que sea una subclase de Actividad y que esté configurada para iniciar la ejecución de la aplicación desde su método onCreate (), por lo que no es necesario un método main ().

El orden en el que los métodos de llamadas de la máquina virtual Dalvik se basa en el orden de prioridades denominado ciclo de vida de Android. Para obtener más información sobre el ciclo de vida de Android, consulte el enlace a continuación Ciclo de vida de Android: https://developer.android.com/guide/components/activities/activity-lifecycle.html


En realidad, este tipo de patrón no es peculiar de Android, pero ocurre cuando tienes un marco en el medio. Algunos ejemplos básicos son Applets y Servlets de Java. Algunas de las respuestas ya proporcionadas dan la respuesta correcta, pero trataré de elaborar un poco.

Cuando inicia una aplicación Java, inicia una JVM y luego necesita cargar algo en ella: por lo tanto, necesita un método estático (el principal) porque no hay objetos (aún) que viven en la JVM a los que pueda referirse.

Si tiene algún tipo de marco en el medio, es el marco que iniciará la JVM y comenzará a poblarlo con sus propios objetos de servicio: escribir su código significa escribir sus propios objetos (que serán subclases de la "plantilla" dada) ). Sus objetos pueden entonces ser inyectados (cargados) por el marco. Los objetos del servicio marco administran el ciclo de vida de los objetos inyectados llamando a los métodos del ciclo de vida definidos en la superclase de "plantilla".

Así, por ejemplo, cuando proporciona un applet a un navegador, no inicia un método principal estático: solo proporciona una subclase de java.applet.Applet que implementa algunos métodos de instancia que actúan como devolución de llamada para administrar el ciclo de vida (inicio, pintura , detener...). Es el navegador que iniciará la JVM, instanciará lo que se necesita para lanzar un applet, cargará su applet y llámelo.

De manera similar, con los servlets usted subclasifica la clase javax.servlet.http.HttpServlet e implementa algunos métodos de instancia (no estáticos) (doGet, doPost ...). El contenedor web (por ejemplo, Tomcat) se encargará de iniciar la JVM, crear una instancia de lo que se necesita para iniciar un servlet, cargar su servlet y llamarlo.

El patrón en Android es prácticamente el mismo: lo que haces es crear una subclase de android.app.Activity. Cuando inicia una aplicación, el sistema busca en el manifiesto para averiguar qué actividad debe iniciarse, luego el "marco" lo carga y llama a sus métodos de instancia (onCreate, onPause, onResume ...).



Hay un tipo principal, simplemente está fuera de tus manos. Después de todo, no hay nada especial acerca de una función main en cualquier idioma. Es solo el punto de entrada donde tu código comienza a ejecutarse. El sistema operativo Android espera que las aplicaciones tengan una cierta estructura y llama a su código según las convenciones que siga.


Los applets tampoco tienen métodos main (). Sólo depende de cómo está empaquetado su código.


Si bien no hay un punto de entrada principal específico, los filtros de intento describen qué actividad se inicia cuando se inicia la aplicación. Se controlan en AndroidManifest.xml como se describe aquí:

http://developer.android.com/guide/topics/intents/intents-filters.html

donde se describe un ejemplo de aplicación de bloc de notas:

Este filtro declara el punto de entrada principal en la aplicación Notas. La acción PRINCIPAL estándar es un punto de entrada que no requiere ninguna otra información en la Intención (sin especificación de datos, por ejemplo), y la categoría LANZADOR dice que este punto de entrada debería aparecer en el iniciador de aplicaciones.



Usted le dice cuál ejecutar en el inicio en el archivo de manifiesto. No hay main () porque no tiene que haberlo, main puede ser una convención utilizada para aplicaciones java "normales", pero no para cosas como applets de navegador. El sistema crea el objeto de actividad y llama a métodos dentro de él, que pueden o no llamarse main. En este caso, no lo es.

onCreate es diferente de un principal y de un constructor, ya que puede invocarse dos veces en una sola actividad, como si el proceso se interrumpe y el usuario vuelve a la actividad. Consulte http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle