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:
- detecta la plataforma e inicializa el runtime y la configuración de dispositivo;
- resuelve el nombre de la ventana principal (de un argumento
classnameo degetMainWindow()); - instancia esa ventana por reflexión (
Class.forName(...)→newInstance()) y llama a suonShow().
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) yonAdd(firstTime)(componente), donde los bounds y la jerarquía ya son válidos.
Ver también
- Aplicar: Navegar entre pantallas
- Siguiente: Estado y flujo de datos