Xamarin.Forms 應用程式生命週期教學課程
在嘗試此教學課程之前,您應該已成功完成:
- 建置您的第一個 Xamarin.Forms 應用程式 快速入門。
- StackLayout 教學課程。
- 項目教學課程。
在本教學課程中,您會了解如何:
- 回應應用程式的啟動、睡眠或恢復。
- 在生命週期狀態變更期間保留資料。
您將會使用 Visual Studio 2019 或 Visual Studio for Mac 來建立能示範如何在生命週期狀態變更期間保留資料的簡單應用程式。 下列螢幕擷取畫面顯示的是最終的應用程式:
回應生命週期狀態變更
若要完成此教學課程,您應該有 Visual Studio 2019 (最新版本),並已安裝 [使用 .NET 進行行動開發] 工作負載。 此外,您還需要配對的 Mac 才能在 iOS 上建置教學課程應用程式。 如需安裝 Xamarin 平台的相關資訊,請參閱安裝 Xamarin。 如需有關將 Visual Studio 2019 連線至 Mac 建置主機的相關資訊,請參閱為 Xamarin.iOS 開發與 Mac 配對。
啟動 Visual Studio,並建立名為 AppLifecycleTutorial 的新空白Xamarin.Forms應用程式。
重要
本教學課程中的 C# 和 XAML 程式碼片段,要求將解決方案命名為 AppLifecycleTutorial。 當您從本教學課程將程式碼複製到解決方案時,使用不同的名稱會導致建置錯誤。
如需有關建立之 .NET Standard 連結庫的詳細資訊,請參閱快速入門深入探討中的Xamarin.Forms應用程式剖析Xamarin.Forms。
在 [方案總管] 中的 [AppLifecycleTutorial] 專案中,展開 App.xaml,然後按兩下 App.xaml.cs 將其開啟。 然後在 App.xaml.cs 中,更新
OnStart
、OnSleep
和OnResume
覆寫,如下所示:protected override void OnStart() { Console.WriteLine("OnStart"); } protected override void OnSleep() { Console.WriteLine("OnSleep"); } protected override void OnResume() { Console.WriteLine("OnResume"); }
此程式碼會使用可指出何時叫用每個方法的
Console.WriteLine
陳述式來更新應用程式生命週期方法覆寫:OnStart
方法會在應用程式啟動時叫用。OnSleep
方法會在應用程式進入背景狀態時叫用。OnResume
方法會在應用程式從背景繼續時叫用。
注意
「沒有」任何終止應用程式的方法。 在正常情況下,會從
OnSleep
方法進行應用程式終止。在 Visual Studio 工具列中,按下 [啟動] 按鈕 (類似於 [播放] 按鈕的三角形按鈕),以啟動所選遠端 iOS 模擬器或 Android 模擬器內的應用程式。 啟動應用程式時會叫用
OnStart
方法,且 OnStart 會輸出到 Visual Studio 的 [輸出] 視窗:[Mono] Found as 'java_interop_jnienv_get_object_array_element'. OnStart [OpenGLRenderer] HWUI GL Pipeline
當應用程式在背景執行時 (藉由點選 iOS 或 Android 上的 [首頁] 按鈕),會叫用
OnSleep
方法:[EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0) OnSleep [Mono] Image addref System.Runtime.Serialization[0x83ee19c0] -> System.Runtime.Serialization.dll[0x83f57b00]: 2
然後,當應用程式從背景繼續時 (在 iOS 上點選應用程式圖示,在 Android 上點選 [概觀] 按鈕,然後選取 AppLifecycleTutorial 應用程式),會叫用
OnResume
方法:Thread finished: <Thread Pool> #5 OnResume [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)
注意
這些程式碼區塊會顯示在 Android 上執行應用程式時的範例輸出。
在 Visual Studio 中,停止應用程式。
如需應用程式生命週期的詳細資訊 Xamarin.Forms ,請參閱 Xamarin.Forms 應用程式生命週期。
在生命週期狀態變更期間保留資料
Application
子類別具有靜態 Properties
字典,可用來在生命週期狀態變更期間儲存資料。 此字典使用 string
索引鍵並儲存 object
值。 字典會自動儲存至裝置,並在應用程式重新啟動時重新填入。
重要
Properties
字典只可序列化基本類型以便儲存。
您將在此練習中修改應用程式,使其在背景執行時保存來自 Entry
的文字,並在重新啟動應用程式時,將文字還原至 Entry
。
在 [方案總管] 中的 [AppLifecycleTutorial] 專案中,展開 App.xaml,然後按兩下 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[displayText] = DisplayText; } protected override void OnResume() { Console.WriteLine("OnResume"); } } }
此程式碼會定義
DisplayText
屬性及displayText
常數。 當應用程式在背景執行或已終止時,OnSleep
方法覆寫會將DisplayText
屬性值新增至Properties
字典 (根據displayText
的索引鍵)。 然後,當應用程式啟動時,如果Properties
字典包含displayText
索引鍵,索引鍵的值就會還原到DisplayText
屬性。重要
請務必先檢查
Properties
字典是否有索引鍵,再進行存取,以避免發生意外的錯誤。在
OnResume
方法多載中,您不需要從Properties
字典還原資料。 這是因為應用程式在背景執行時,應用程式和其狀態仍在記憶體中。在 [方案總管] 的 AppLifecycleTutorial 專案中,按兩下 MainPage.xaml 將其開啟。 然後在 MainPage.xaml 中,移除所有範本程式碼,並取代為下列程式碼:
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="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>
此程式碼會以宣告的方式定義頁面的使用者介面,其包含
StackLayout
中的Entry
。Entry.Placeholder
屬性會指定Entry
第一次顯示時呈現的預留位置文字,而名為OnEntryCompleted
的事件處理常式會向Completed
事件登記。 此外,Entry
具有以x:Name
屬性指定的名稱。 這可讓程式碼後置檔案使用其獲派的名稱來存取Entry
物件。在 [方案總管] 的 AppLifecycleTutorial 專案中展開 MainPage.xaml,然後按兩下 MainPage.xaml.cs 將其開啟。 然後,在 MainPage.xaml.cs 中,將
OnAppearing
方法的覆寫和OnEntryCompleted
事件處理常式新增至類別:protected override void OnAppearing() { base.OnAppearing(); entry.Text = (Application.Current as App).DisplayText; } void OnEntryCompleted(object sender, EventArgs e) { (Application.Current as App).DisplayText = entry.Text; }
OnAppearing
方法擷取App.DisplayText
屬性的值,並將其設定為Entry
的Text
屬性值。注意
OnAppearing
方法覆寫會在ContentPage
配置完成後 (但在變成可見狀態之前) 執行。 因此,這是設定檢視內容 Xamarin.Forms 的好位置。以 return 鍵完成
Entry
中的文字之後,OnEntryCompleted
會開始執行,而Entry
文字會儲存在App.DisplayText
屬性中。在 Visual Studio 工具列中,按下 [啟動] 按鈕 (類似於 [播放] 按鈕的三角形按鈕),以啟動所選遠端 iOS 模擬器或 Android 模擬器內的應用程式。
在
Entry
中輸入一些文字並按下 return 鍵。 然後,點選 [首頁] 按鈕來叫用OnSleep
方法,將應用程式放到背景。在 Visual Studio 中,停止應用程式後再次重新啟動,先前輸入到
Entry
中的文字將會還原:在 Visual Studio 中,停止應用程式。
如需將資料保存到屬性字典的詳細資訊,請參閱應用程式類別指南中的Xamarin.Forms屬性字典。
恭喜!
恭喜您完成此教學課程,您已學會如何:
- 回應應用程式的啟動、睡眠或恢復。
- 在生命週期狀態變更期間保留資料。
下一步
若要深入瞭解使用 Xamarin.Forms建立行動應用程式的基本概念,請繼續進行本機資料庫教學課程。
相關連結
在這個區段有遇到問題嗎? 如果有,請提供意見反應,好讓我們可以改善這個區段。