Xamarin.Forms 的 Application 基类自带静态 Properties 字典,专门用于跨应用生命周期保存简单数据。
- 字典采用
string作为键,object作为值。 - 数据会自动持久化保存到设备本地,应用重启后可以读取恢复。
- 适合存储少量简单配置、文本状态;不适合存大量数据、图片、复杂对象。
修改 App.xaml.cs
双击打开 App.xaml.cs,清空原有模板代码,替换如下代码:
using System;
using Xamarin.Forms;
namespace AppLifecycleTutorial
{
public partial class App : Application
{
const string displayText = "displayText";
public string DisplayText { get; set; }
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override void OnStart()
{
Console.WriteLine("OnStart");
// 应用启动时,判断键是否存在,存在则读取恢复
if (Properties.ContainsKey(displayText))
{
DisplayText = (string)Properties[displayText];
}
}
protected override void OnSleep()
{
Console.WriteLine("OnSleep");
// 应用进入后台/休眠时,保存数据到Properties字典
Properties[displayText] = DisplayText;
}
protected override void OnResume()
{
Console.WriteLine("OnResume");
}
}
}
Code language: PHP (php)
代码说明
- 定义常量
displayText作为字典的key,避免硬编码字符串出错。 OnStart:应用首次启动触发;判断字典中是否存在key,存在则读取赋值给属性。OnSleep:应用退到后台、即将被系统回收时触发,在这里保存状态。OnResume:应用从后台切回前台;此时数据还在内存,不需要从Properties重新加载。重要:读取前一定要用ContainsKey判断key是否存在,防止空引用异常。
修改 MainPage.xaml
打开 MainPage.xaml,替换全部代码:
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="[http://xamarin.com/schemas/2014/forms](http://xamarin.com/schemas/2014/forms)"
xmlns:x="[http://schemas.microsoft.com/winfx/2009/xaml](http://schemas.microsoft.com/winfx/2009/xaml)"
x:Class="AppLifecycleTutorial.MainPage">
<StackLayout Margin="20,35,20,20">
<Entry x:Name="entry"
Placeholder="Enter text here"
Completed="OnEntryCompleted" />
</StackLayout>
</ContentPage>
Code language: HTML, XML (xml)
页面包含一个输入框Entry,绑定Completed回车完成事件。
修改 MainPage.xaml.cs
打开后台代码文件,添加 OnAppearing 重写方法和 OnEntryCompleted 事件:
protected override void OnAppearing()
{
base.OnAppearing();
// 页面显示时,读取App全局保存的文本,赋值给输入框
entry.Text = (Application.Current as App).DisplayText;
}
void OnEntryCompleted(object sender, EventArgs e)
{
// 回车确认输入,将输入框文本存入App全局属性
(Application.Current as App).DisplayText = entry.Text;
}
Code language: JavaScript (javascript)
代码说明
OnAppearing:页面即将显示时执行,读取App中保存的文本,回填到Entry输入框。OnEntryCompleted:按下键盘回车触发,把输入框内容存入App的DisplayText属性。- 当App进入后台,
OnSleep会自动把该属性写入Properties持久化存储。
Previous: Xamarin.Forms 弹出窗口