Saltar al contenido
CrossFly es 100% open sourceSíguenos en GitHub
CrossFlyCrossFly
Empezar

Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.

El ciclo de vida

El ciclo de vida de CrossFly tiene tres niveles: la aplicación, la ventana (pantalla) y el componente.

Nivel 1 — aplicación: el bootstrap (Main)

Main es el ApplicationListener de libGDX. Cuando la plataforma arranca, libGDX llama a Main.create() en la paint thread, y el Main:

  1. detecta la plataforma e inicializa el runtime y la configuración de dispositivo;
  2. resuelve el nombre de la ventana principal (de un argumento classname o de getMainWindow());
  3. instancia esa ventana por reflexión (Class.forName(...) → newInstance()) y llama a su onShow().

Después de eso, libGDX llama a render() (en cada frame renderizado) y resize() — siempre en la paint thread.

Nivel 2 — ventana: onShow()

Cada pantalla es una subclase de Window que monta su UI en onShow() (con super.onShow()):

public class TelaHome extends Window {
   @Override public void onShow() throws Exception {
      super.onShow();
      setLayout(new VerticalLayout());
      add(LAY_AUTO, new Label("Início"));
   }
}

¿Por qué onShow() y no el constructor? En el constructor, los bounds y la jerarquía todavía no están listos — Screen.width/height y el tamaño de la ventana solo son válidos después. Montar la UI demasiado pronto lleva a medidas erróneas. (La pila de ventanas y la navegación están en La pila de ventanas.)

Nivel 3 — componente: onAdd(firstTime) / onRemove()

Cuando un componente entra en el árbol, el framework llama a onAdd(boolean firstTime); cuando sale, onRemove(). Es ahí donde inicializas y liberas recursos:

public class Relogio extends Component {
   private Timer timer;
   @Override public void onAdd(boolean firstTime) throws Exception {
      super.onAdd(firstTime);
      if (firstTime) timer = iniciarTimer();   // recursos que deben existir una sola vez
   }
   @Override public void onRemove() {
      if (timer != null) timer.cancel();        // siempre libera al salir
      super.onRemove();
   }
}

¿Qué distingue firstTime? Un componente puede ser añadido, eliminado y vuelto a añadir. firstTime == true solo en la primera vez — úsalo para el setup que no debe repetirse. onRemove() es el par de limpieza: cancela timers, listeners, cursores.

Regla general: no inicialices UI/recursos en el constructor. Usa onShow() (ventana) y onAdd(firstTime) (componente), donde los bounds y la jerarquía ya son válidos.

Main.create() (paint thread)

instancia MainWindow por reflexión

Window.onShow() — monta la UI

Component.onAdd(firstTime) — por hijo

vivo: onLayout / onPaint / eventos

Component.onRemove() — libera recursos

Ver también

¿Te resultó útil esta página?