[MAUI ] Ciclo de vida y Handlers

Introducción

 

Como vimos en el anterior post “MAUI, el futuro de Xamarin.Forms”, el cambio mas “relevante” para los desarrolladores, es el cambio de paradigma en cuanto a los renderers, ahora llamados Handlers.

También comentamos que los actuales renderers pueden seguir siendo usados en MAUI, pero desde Microsoft se nos insta a actualizar dichos componentes para poder contar con la mejora de rendimiento y seguir las guías de desarrollo que nos marcan.

Otro aspecto que cambia en este nuevo Framework, es el ciclo de vida las aplicaciones. En este post vamos a ver ejemplos de ambos aspectos con la Preview 2 de .NET 6

Ciclo de vida

 

En MAUI vamos a tener soporte multi-ventana, por eso, la jerarquía de las aplicaciones cambia a la siguiente:

 

APPLICATION > WINDOW > PAGE

 

A su vez, y dado que el interés de la comunidad era muy altos, se han cambiado los eventos relacionados con el ciclo de vida tanto de las Windows como de la Aplicación en si, los nuevos eventos son los siguientes:

 

  • Creating
  • Created
  • Attaching
  • Attached
  • Detaching
  • Detached
  • Destroying
  • Destroyed

 

Este aspecto del ciclo de vida esta en constante desarrollo, como se ha comentado, el cambio viene generado por las peticiones de la comunidad. Para obtener mas información de los eventos y estados, es recomendable seguir el siguiente Issue de el GitHub oficial de MAUI

Importante anotar, que el proceso de migración no migrara los antiguos métodos del ciclo de vida, pero si podemos seguir usándolos gracias a el paquete NuGet “Microsoft.Maui.Compatibility”

Renderers y Handlers

 

Como ya comentamos en el anterior post, MAUI introduce los nuevos renderers llamando Handlers los cuales nos permiten:

  • Desacoplar los componentes de Xamarin.Forms
  • Ganar en rendimiento y velocidad de cargar
  • Acceder a código nativo desde código multiplataforma

 

De estos aspectos, el mas llamativo es el de ganar rendimiento y velocidad de carga. Esto va a ser posible gracias a la eliminación del Assenbly Scanning.

 

El Assembly Scanning es algo que todas las aplicaciones desarrolladas bajo Xamarin.Forms tiene. Es el sistema por que cual forms, al iniciar la aplicación, recorre todos los componentes usados en la app, y viendo si algún render implica cambios en cada uno de los componentes.

En caso de que, si implique cambios, lo registraba para usarlo con los cambios. Pero para llegar a este punto debe recorrer todas las clases del proyecto.

Con MAUI el Assembly Scanning desaparece y se gana en rendimiento y velocidad.

 

Veamos como se usan los Handlers en MAUI.

En primer lugar, parecido a lo que se hace en Forms, debemos registrar el handler sobre el que vamos a actuar

Una vez registrado el componente, nos toca editarlo. Al usar los Handlers ya no tenemos el método “OnElementPropertyChanged” donde recorrer la propiedad que cambia para saber como actuar.

Ahora contaremos con una clase abstracta con una serie de métodos mucho mas directos y todo será publico para en caso de necesitarlo, poder sobrecargarlo

En este ejemplo podemos observar como la clase abstracta de un textView, directamente crea un evento sobre el método publico “TypedNativeView” donde editar el texto introducido.

 

Por ejemplo, este es el código de la interfaz publica de un Slider:

Como se puede observar son acciones mucho mas directas y que podremos sobrescribir sin ningún tipo de problema.

Además de esta interfaz, ahora internamente los handlers tiene “mappers” para las propiedades básicas de los controles, desde la cuales cambiar propiedades directamente. Ejemplo del mapper de un slider:

De esta manera, podemos crear nuestros propios controles desde cualquier sitio.

Ejemplo de un botón que en iOS tiene un color rojo

Como podemos observar en el ejemplo, entrando en la etiqueta __iOS__ nos guardamos la view Nativa como un UIButton sobre el cual ya podemos acceder a cualquier propiedad de este.

Aquí podemos anidar otras plataformas con sus diferentes etiquetas y en una sola clase tener un botón customizado para las diferentes plataformas.

 

 

¿Y la inyección de dependencias?

 

En este ultimo punto debemos remarcar que es algo OPCIONAL, si ya tenemos un inyector de dependencias, podemos seguir usándolo, pero MAUI se va a adaptar a otros frameworks ya existentes en Microsoft para la inyección de dependencias.

 

Maui usará un concepto de Host, similar al ya existente en ASP.NET, esto permite usar los contenedores y proveedores en nuestros Handlers. Así como configurar con el archivo de configuración de la aplicación y otras características como el ciclo de vida, los servicios integrados…etc.

 

El AppBuilder, estará oculto por defecto, pero se puede editar, para, de esta forma, ampliarlo registrando servicios nativos, configurar logs, registrar nuevos Handlers…etc

 

No te pierdas nuestro próximo evento sobre MAUI