- Windows 10 開發教程
- Windows 10 - 家庭版
- Windows 10 - 簡介
- Windows 10 – UWP
- Windows 10 – 第一個應用
- Windows 10 - 應用商店
- Windows 10 - XAML 控制元件
- Windows 10 - 資料繫結
- Windows 10 - XAML 效能
- Windows 10 - 自適應設計
- Windows 10 - 自適應 UI
- Windows 10 - 自適應程式碼
- Windows 10 - 檔案管理
- Windows 10 - SQLite 資料庫
- Windows 10 – 通訊
- Windows 10 - 應用本地化
- Windows 10 - 應用生命週期
- Windows 10 - 後臺執行
- Windows 10 - 應用服務
- Windows 10 - Web 平臺
- Windows 10 - 連線體驗
- Windows 10 - 導航
- Windows 10 - 網路
- Windows 10 - 雲服務
- Windows 10 - 即時磁貼
- Windows 10 - 共享契約
- Windows 10 - 移植到 Windows
- Windows 10 有用資源
- Windows 10 - 快速指南
- Windows 10 - 有用資源
- Windows 10 - 討論
Windows 10 開發 - 後臺執行
通用 Windows 平臺 (UWP) 引入了新的機制,允許應用程式在應用程式未在前臺執行時執行某些功能。UWP 還增強了應用程式在後臺擴充套件其執行時間的能力,例如 **後臺任務和觸發器**。後臺執行是應用程式生命週期的真正補充部分。
後臺任務的重要特性如下:
後臺任務由系統或時間事件觸發,並且可以受到一個或多個條件的限制。
當後臺任務被觸發時,其關聯的處理程式執行並執行後臺任務的工作。
即使註冊了後臺任務的應用處於掛起狀態,後臺任務也可以執行。
它們是標準應用程式平臺的一部分,本質上為應用程式提供了註冊系統事件(觸發器)的能力。當該事件發生時,它們在後臺執行預定義的程式碼塊。系統觸發器包括網路連線更改或系統時區等事件。
後臺執行並非得到保證,因此不適用於關鍵功能和特性。
作業系統對同時執行的後臺任務數量有限制。因此,即使觸發器被觸發並且條件滿足,任務仍然可能無法執行。
建立和註冊後臺任務
建立一個後臺任務類並將其註冊為在您的應用不在前臺時執行。您可以透過編寫實現 **IBackgroundTask** 介面的類來在後臺執行程式碼。以下示例程式碼展示了一個非常基本的後臺任務類的起點。
public sealed class MyBackgroundTask : IBackgroundTask {
public void Run(IBackgroundTaskInstance taskInstance){
// write code
}
}
您可以按如下方式請求後臺任務的訪問許可權。
var access = await BackgroundExecutionManager.RequestAccessAsync();
switch (access) {
case BackgroundAccessStatus.Unspecified:
break;
case BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity:
break;
case BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity:
break;
case BackgroundAccessStatus.Denied:
break;
default:
break;
}
要構建和註冊後臺任務,請使用以下程式碼。
var task = new BackgroundTaskBuilder {
Name = "My Task",
TaskEntryPoint = typeof(BackgroundStuff.MyBackgroundTask).ToString()
};
var trigger = new ApplicationTrigger();
task.SetTrigger(trigger);
task.Register();
await trigger.RequestAsync();
讓我們透過以下所有步驟瞭解一個簡單的後臺任務示例。
建立一個新的空白 UWP 專案 **“UWPBackgroundDemo”**,並在 XAML 檔案中新增一個按鈕。
<Page
x:Class = "UWPBackgroundDemo.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:UWPBackgroundDemo"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button x:Name = "button" Content = "Button"
HorizontalAlignment = "Left" Margin = "159,288,0,0"
VerticalAlignment = "Top" Click = "button_Click"/>
</Grid>
</Page>
以下是 **按鈕點選** 事件的實現,其中註冊了後臺任務。
using System;
using Windows.ApplicationModel.Background;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace UWPBackgroundDemo {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page {
public MainPage() {
this.InitializeComponent();
}
private async void button_Click(object sender, RoutedEventArgs e) {
var access = await BackgroundExecutionManager.RequestAccessAsync();
switch (access){
case BackgroundAccessStatus.Unspecified:
break;
case BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity:
break;
case BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity:
break;
case BackgroundAccessStatus.Denied:
break;
default:
break;
}
var task = new BackgroundTaskBuilder {
Name = "My Task",
TaskEntryPoint = typeof(BackgroundStuff.MyBackgroundTask).ToString()
};
var trigger = new ApplicationTrigger();
task.SetTrigger(trigger);
var condition = new SystemCondition(SystemConditionType.InternetAvailable);
task.Register();
await trigger.RequestAsync();
}
}
}
現在建立一個新的專案,但這次從選單中選擇 Windows 執行時元件(通用 Windows),併為該專案命名為 **Background stuff**。
以下是 C# 程式碼,其中包含 **MyBackgroundTask** 類實現,它將執行後臺任務。
using Windows.ApplicationModel.Background;
using Windows.UI.Notifications;
namespace BackgroundStuff {
public sealed class MyBackgroundTask : IBackgroundTask {
public void Run(IBackgroundTaskInstance taskInstance) {
SendToast("Hi this is background Task");
}
public static void SendToast(string message) {
var template = ToastTemplateType.ToastText01;
var xml = ToastNotificationManager.GetTemplateContent(template);
var elements = xml.GetElementsByTagName("Test");
var text = xml.CreateTextNode(message);
elements[0].AppendChild(text);
var toast = new ToastNotification(xml);
ToastNotificationManager.CreateToastNotifier().Show(toast);
}
}
}
為了使該專案在 **UWPBackgroundDemo** 專案中可用,請在解決方案資源管理器中右鍵單擊 **引用 > 新增引用**,並新增 **BackgroundStuff** 專案。
現在,讓我們轉到 **UWPBackgroundDemo** 專案的 **Package.appxmanifest** 檔案,並在“宣告”選項卡中新增以下資訊。
首先構建 Background stuff 專案,然後構建並執行 **UWPBackgroundDemo** 專案。
當以上程式碼編譯並執行時,您將看到以下視窗。
當您單擊 **按鈕** 時,它將執行後臺任務,並在視窗的右側顯示通知。