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"); } }
然后,在每个特定于平台的项目中实例化此类,并将其传递到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状态下终止,而无需任何其他代码通知。