Xamarin.Forms之应用类和应用生命周期

App Class

Application基类提供以下功能,这些功能在项目的默认App子类中公开:

  • MainPage属性,可以在其中设置应用程序的初始页面。
  • 持久属性字典,用于存储生命周期状态更改中的简单值。
  • 一个静态Current属性,其中包含对当前应用程序对象的引用。

字典属性

Application子类具有静态的Properties字典,该字典可用于存储数据,尤其是在OnStart,OnSleep和OnResume方法中使用的数据。 可以使用Application.Current.Properties从Xamarin.Forms代码中的任何位置进行访问。

属性字典使用字符串键并存储对象object值

例如,您可以在代码中的任何位置(选择项目,在页面的OnDisappearing方法或OnSleep方法中)设置持久性“ id”属性,如下所示:

Application.Current.Properties ["id"] = someClass.ID;

然后,您可以在OnStart或OnResume方法中使用此值以某种方式重新创建用户的体验。 属性字典存储对象,因此您需要在使用它之前强制转换其值。

if (Application.Current.Properties.ContainsKey("id"))
{
    var id = Application.Current.Properties ["id"] as int;
    // do something with id
}

在访问密钥之前,请始终检查key是否存在,以防止发生意外错误。

注:“属性”字典只能序列化基本类型以进行存储。 尝试存储其他类型(例如List <string>)可能会失败 且没有提示

持久化

属性字典会自动保存到设备中,当应用程序从后台返回或重新启动后,添加到字典中的数据将可用。

Xamarin.Forms 1.4在Application类上引入了另一个方法-SavePropertiesAsync()-可以调用该方法来主动保留Properties字典。 这是为了让您可以在重要更新后保存属性,而不用冒着崩溃或被操作系统杀死而使它们不被序列化的风险。

The Application class
下面显示了完整的Application类实现,以供参考:

public class App : Xamarin.Forms.Application
{
    public App ()
    {
        MainPage = new ContentPage { Title = "App Lifecycle Sample" }; // your page here
    }

    protected override void OnStart()
    {
        // Handle when your app starts
        Debug.WriteLine ("OnStart");
    }

    protected override void OnSleep()
    {
        // Handle when your app sleeps
        Debug.WriteLine ("OnSleep");
    }

    protected override void OnResume()
    {
        // Handle when your app resumes
        Debug.WriteLine ("OnResume");
    }
}
View Code

然后,在每个特定于平台的项目中实例化此类,并将其传递到LoadApplication方法,该方法是MainPage加载并显示给用户的位置。 

App Lifecycle

Application基类提供以下功能:

  • 生命周期方法OnStart,OnSleep和OnResume。
  • 页面导航事件PageAppearing,PageDisappearing。(可用于要跟踪页面在屏幕上出现/消失的情况)
  • 模态导航事件ModalPushing,ModalPushed,ModalPopping和ModalPopped。

生命周期方法

Application类包含三个虚拟方法,可以重写它们以响应生命周期更改:

  • OnStart - called when the application starts.
  • OnSleep - called each time the application goes to the background(程序进入后台时).
  • OnResume - called when the application is resumed, after being sent to the background(从后台恢复时).

注:没有终止应用程序的方法。 在正常情况下(即不是崩溃),应用程序将在OnSleep状态下终止,而无需任何其他代码通知

原文地址:https://www.cnblogs.com/peterYong/p/11976559.html