Como referencia a continuación se muestra una implementación de la clase Application.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class App : Xamarin.Forms.Application { public App () { MainPage = new ContentPage { Title = "Ejemplo de ciclo de application" }; } protected override void OnStart() { // Se ejecuta al iniciar la aplicación Debug.WriteLine ("OnStart"); } protected override void OnSleep() { //Se ejecuta cuando la aplicación entra en reposo Debug.WriteLine ("OnSleep"); } protected override void OnResume() { // Se ejecuta al recuperar el estado Debug.WriteLine ("OnResume"); } } |
Esta clase es instanciada para cada una de las plataformas del proyecto y se le pasa el método LoadApplication el cual es donde se carga y se visualiza el MainPage al usuario. El código de cada plataforma se muestra en las siguientes ejemplos. Las soluciones de Xamarin.Forms contienen todo este código preconfigurado para la aplicación.
Proyecto iOS
La clase AppDelegate de iOS hereda de FormsApplicationDelegate y debería:
- Llamar al metodo LoadApplication con una instancia de la clase App.
- Siempre devolver base.FinishedLaunching(app, options);
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[Register ("AppDelegate")] public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate { public override bool FinishedLaunching (UIApplication app, NSDictionary options) { global::Xamarin.Forms.Forms.Init (); LoadApplication (new App ()); return base.FinishedLaunching (app, options); } } |
Proyecto Android
En Android la clase MainActivity hereda de FormsApplicationActivity. En el método OnCreate anula el método LoadApplication que es llamado con una instancia de la clase App.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Activity (Label = "App Lifecycle Sample", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity { protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); global::Xamarin.Forms.Forms.Init (this, bundle); LoadApplication (new App ()); } } |
Proyecto Universal Windows (UWP) para Windows 10
Puesto que Windows 8.1 nona sido un sistema operativo muy extendido y que muchísima gente migro rápidamente a Windows 10, no entraré en detalle en los sistemas operativos que vienen quedándose obsoletos.
La página principal del proyecto UWP hereda de WindowsPage. Esto implica XAML y C# para la clase MainPage que referencia a la clase FormsApplicationPage.
El código XAML usa un namespace personalizado de forma que el elemento principal refleja la clase FormsApplicationPage.
1 2 3 4 5 |
<forms:WindowsPage ... xmlns:forms="using:Xamarin.Forms.Platform.UWP" ...> </forms:WindowsPage> |
El código C# tiene que llamar al método LoadApplication para crear una instancia de la clase App. Es recomendable usar explícitamente el namespace de la aplicación porque las aplicaciones UWP tienen su propia clase App que no tiene relación alguna con Xamarin.Forms.
1 2 3 4 5 6 7 8 9 |
public sealed partial class MainPage { public MainPage() { InitializeComponent(); LoadApplication(new TU_NAMESPACE.App()); } } |