Windows10 Dev - การดำเนินการเบื้องหลัง
แพลตฟอร์ม Universal Windows (UWP) แนะนำกลไกใหม่ซึ่งช่วยให้แอปพลิเคชันทำงานบางอย่างได้ในขณะที่แอปพลิเคชันไม่ได้ทำงานอยู่เบื้องหน้า UWP ยังเพิ่มความสามารถของแอปพลิเคชันในการขยายเวลาการดำเนินการในพื้นหลังสำหรับBackground Tasks and Triggers. การดำเนินการเบื้องหลังเป็นส่วนเสริมที่แท้จริงของวงจรชีวิตของแอปพลิเคชัน
คุณสมบัติที่สำคัญของงานเบื้องหลัง ได้แก่ -
งานเบื้องหลังถูกทริกเกอร์โดยระบบหรือเหตุการณ์เวลาและสามารถถูก จำกัด โดยเงื่อนไขอย่างน้อยหนึ่งข้อ
เมื่องานเบื้องหลังถูกทริกเกอร์ตัวจัดการที่เกี่ยวข้องจะรันและดำเนินการกับงานเบื้องหลัง
งานพื้นหลังสามารถทำงานได้แม้ว่าแอปที่ลงทะเบียนงานพื้นหลังจะถูกระงับ
เป็นส่วนหนึ่งของแพลตฟอร์มแอปพลิเคชันมาตรฐานและโดยพื้นฐานแล้วจะให้แอปที่มีความสามารถในการลงทะเบียนสำหรับเหตุการณ์ของระบบ (ทริกเกอร์) เมื่อเหตุการณ์นั้นเกิดขึ้นพวกเขาจะเรียกใช้บล็อกโค้ดที่กำหนดไว้ล่วงหน้าในพื้นหลัง ทริกเกอร์ของระบบรวมถึงเหตุการณ์ต่างๆเช่นการเปลี่ยนแปลงในการเชื่อมต่อเครือข่ายหรือเขตเวลาของระบบ
ไม่รับประกันการดำเนินการเบื้องหลังดังนั้นจึงไม่เหมาะสำหรับฟังก์ชันและคุณสมบัติที่สำคัญ
ระบบปฏิบัติการมีข้อ จำกัด เกี่ยวกับจำนวนงานเบื้องหลังที่สามารถทำงานได้ในเวลาเดียวกัน ดังนั้นแม้ว่าทริกเกอร์จะเริ่มทำงานและตรงตามเงื่อนไข แต่งานก็ยังไม่สามารถรันได้
สร้างและลงทะเบียนงานเบื้องหลัง
สร้างคลาสงานพื้นหลังและลงทะเบียนให้ทำงานเมื่อแอปของคุณไม่ได้อยู่เบื้องหน้า คุณสามารถรันโค้ดในพื้นหลังได้โดยเขียนคลาสที่ใช้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>
ด้านล่างคือไฟล์ button click การใช้งานเหตุการณ์ที่มีการลงทะเบียนงานเบื้องหลัง
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 Runtime Component (Universal 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 โครงการคลิกขวาที่ References > Add References ใน Solution Explorer และเพิ่ม BackgroundStuff โครงการ.
ตอนนี้ให้เราไปที่ Package.appxmanifest ไฟล์ของ UWPBackgroundDemo โครงการและเพิ่มข้อมูลต่อไปนี้ในแท็บการประกาศ
ขั้นแรกให้สร้างโครงการสิ่งที่เป็นพื้นหลังจากนั้นสร้างและดำเนินการไฟล์ UWPBackgroundDemo โครงการ.
เมื่อโค้ดด้านบนถูกคอมไพล์และรันคุณจะเห็นหน้าต่างต่อไปนี้
เมื่อคุณคลิกไฟล์ buttonมันจะเรียกใช้งานพื้นหลังและจะแสดงการแจ้งเตือนที่ด้านขวาสุดของหน้าต่างของคุณ