Windows10-development-background-execution

提供:Dev Guides
移動先:案内検索

Windows10 Dev-バックグラウンド実行

ユニバーサルWindowsプラットフォーム(UWP)には、アプリケーションがフォアグラウンドで実行されていないときにアプリケーションがいくつかの機能を実行できるようにする新しいメカニズムが導入されています。 UWPは、 Background Tasks and Triggers のバックグラウンドで実行時間を延長するアプリケーションの機能も向上させます。 バックグラウンド実行は、アプリケーションのライフサイクルを補完する真のテールです。

バックグラウンドタスクの重要な機能は次のとおりです-

  • バックグラウンドタスクは、システムまたはタイムイベントによってトリガーされ、1つ以上の条件によって制約される可能性があります。
  • バックグラウンドタスクがトリガーされると、関連するハンドラーが実行され、バックグラウンドタスクの作業を実行します。
  • バックグラウンドタスクは、バックグラウンドタスクを登録したアプリが中断されている場合でも実行できます。
  • これらは標準のアプリケーションプラットフォームの一部であり、基本的にアプリにシステムイベント(トリガー)に登録する機能を提供します。 そのイベントが発生すると、バックグラウンドで事前定義されたコードブロックが実行されます。 システムトリガーには、ネットワーク接続の変更やシステムタイムゾーンなどのイベントが含まれます。
  • バックグラウンド実行は保証されていないため、重要な機能や機能には適していません。 *OSには、同時に実行できるバックグラウンドタスクの数に制限があります。 そのため、トリガーが起動されて条件が満たされた場合でも、タスクは実行できません。

バックグラウンドタスクの作成と登録

バックグラウンドタスククラスを作成し、アプリがフォアグラウンドにないときに実行するように登録します。* 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ファイルにボタンを1つ追加します。
<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 プロジェクトを追加します。

Background stuff Sec

  • 次に、 UWPBackgroundDemo プロジェクトの Package.appxmanifest ファイルに移動し、[宣言]タブに次の情報を追加します。

背景資料

  • 最初にバックグラウンドスタッフプロジェクトをビルドしてから、 UWPBackgroundDemo プロジェクトをビルドして実行します。
  • 上記のコードをコンパイルして実行すると、次のウィンドウが表示されます。

背景のもの

  • *ボタン*をクリックすると、バックグラウンドタスクが実行され、ウィンドウの右端に通知が表示されます。