Windows10 Dev - Arka Plan Yürütme
Evrensel Windows Platformu (UWP), uygulama ön planda çalışmıyorken uygulamaların bazı işlevleri gerçekleştirmesine izin veren yeni mekanizmalar sunar. UWP ayrıca uygulamaların arka planda yürütme sürelerini uzatmak içinBackground Tasks and Triggers. Arka planda yürütme, uygulama yaşam döngüsünün gerçek tamamlayıcı kuyruğudur.
Arka Plan Görevlerinin önemli özellikleri şunlardır:
Bir arka plan görevi, bir sistem veya zaman olayı tarafından tetiklenir ve bir veya daha fazla koşulla sınırlandırılabilir.
Bir arka plan görevi tetiklendiğinde, ilişkili işleyicisi çalışır ve arka plan görevinin çalışmasını gerçekleştirir.
Arka plan görevi, arka plan görevini kaydeden uygulama askıya alındığında bile çalışabilir.
Standart uygulama platformunun bir parçasıdırlar ve esasen bir sistem olayına (tetikleyici) kaydolma becerisine sahip bir uygulama sağlarlar. Bu olay meydana geldiğinde, arka planda önceden tanımlanmış bir kod bloğu çalıştırırlar. Sistem tetikleyicileri, ağ bağlantısındaki veya sistem saat dilimindeki değişiklikler gibi olayları içerir.
Arka Plan Yürütme garanti edilmez, bu nedenle kritik işlevler ve özellikler için uygun değildir.
İşletim sisteminin aynı anda kaç tane arka plan görevinin çalıştırılabileceği konusunda bir sınırlaması vardır. Bu nedenle, tetikleyici çalıştırıldığında ve koşullar karşılandığında bile görev yine de çalışamaz.
Arka Plan Görevi Oluşturun ve Kaydedin
Bir arka plan görev sınıfı oluşturun ve uygulamanız ön planda olmadığında çalışması için kaydedin. Kodu uygulayan sınıflar yazarak arka planda çalıştırabilirsiniz.IBackgroundTaskarayüz. Aşağıdaki örnek kod, bir arka plan görev sınıfı için çok temel bir başlangıç noktasını gösterir.
public sealed class MyBackgroundTask : IBackgroundTask {
public void Run(IBackgroundTaskInstance taskInstance){
// write code
}
}
Arka plan görevine aşağıdaki şekilde erişim talep edebilirsiniz.
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;
}
Arka plan görevini oluşturmak ve kaydetmek için aşağıdaki kodu kullanın.
var task = new BackgroundTaskBuilder {
Name = "My Task",
TaskEntryPoint = typeof(BackgroundStuff.MyBackgroundTask).ToString()
};
var trigger = new ApplicationTrigger();
task.SetTrigger(trigger);
task.Register();
await trigger.RequestAsync();
Aşağıda verilen tüm adımları izleyerek basit bir arka plan görevi örneğini anlayalım.
Yeni bir boş UWP projesi oluşturun ‘UWPBackgroundDemo’ ve XAML dosyasına bir düğme ekleyin.
<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>
Aşağıda verilen button click arka plan görevinin kayıtlı olduğu olay uygulaması.
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();
}
}
}
Şimdi başka bir proje oluşturun, ancak bu sefer menüden Windows Çalışma Zamanı Bileşeni'ni (Evrensel Windows) seçin ve adı verin Background stuff bu projeye.
Aşağıda verilen C # kodudur. içerenMyBackgroundTask sınıf implantasyonu ve arka plan görevini çalıştıracaktır.
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);
}
}
}
Bu projeyi UWPBackgroundDemo proje, sağ tıklayın References > Add References Solution Explorer'da ve ekleyin BackgroundStuff proje.
Şimdi, gidelim Package.appxmanifest dosyası UWPBackgroundDemo Projelendirin ve aşağıdaki bilgileri Bildirimler sekmesine ekleyin.
Önce Arka Plan malzemeleri projesini oluşturun, ardından UWPBackgroundDemo proje.
Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdaki pencereyi göreceksiniz.
Tıkladığınızda button, arka plan görevini çalıştıracak ve pencerenizin sağ ucunda bir bildirim gösterecektir.