Windows Phone 8.1 後臺任務

Windows Phone 8.1 應用能夠添加多個後臺任務,以輔助應用完成某些任務。async

(1)新建前臺應用ide

後臺任務是依託於前臺應用的,因此必須擁有一個前臺應用。測試

該前臺應用的功能很簡單,就是讀取文件中保存的文本;然後臺任務就是將當前時間寫入文件中。ui

前臺界面:spa

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>

    <Viewbox Margin="20,0">
        <TextBlock x:Name="timeTextBlock"
                   Text="Time"/>
    </Viewbox>

    <Grid Grid.Row="1" Margin="20,0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Button x:Name="registerButton"
                Content="Register Task"
                Margin="0,0,5,0"
                HorizontalAlignment="Stretch"
                Click="registerButton_Click"/>
        <Button x:Name="unregisterButton" Grid.Column="1"
                Content="Unregister Task"
                Margin="5,0,0,0"
                HorizontalAlignment="Stretch"
                Click="unregisterButton_Click"/>
    </Grid>
</Grid>

打開應用時就讀取文本信息:code

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    await ShowFileText();
}

private async Task ShowFileText()
{
    file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Time.txt", CreationCollisionOption.OpenIfExists);
    timeTextBlock.Text = await FileIO.ReadTextAsync(file);
}

 

(2)添加一個 Windows Runtime Component 項目blog

後臺任務必須爲 Windows Runtime Component。繼承

 

(3)編寫一個繼承自 IBackgroundTask 接口的類接口

在後臺任務的項目中新建一個類,並繼承 IBackgroundTask 接口,實現 Run 方法,該類還必須爲 sealed:string

public sealed class WritingTask: IBackgroundTask
{
    public async void Run(IBackgroundTaskInstance taskInstance)
    {
        var deferral = taskInstance.GetDeferral();

        await WriteTimeToFile("Time.txt");

        deferral.Complete();
    }

  private async Task WriteTimeToFile(string path)
  {
        var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting);
        await FileIO.WriteTextAsync(file, DateTimeOffset.Now.ToString());
    }
}

Run 方法就是後臺任務執行時的方法。

 

(4)前臺應用 Manifest 中添加後臺任務

能夠設置觸發器的類型,記得設置後臺任務的入口點。

而後前臺應用添加後臺任務項目的引用。

 

(5)前臺應用對後臺任務進行註冊與解除註冊

最後的一步也就是在前臺應用中對後臺任務進行註冊了:

private async void registerButton_Click(object sender, RoutedEventArgs e)
{
    BackgroundExecutionManager.RemoveAccess();
    await BackgroundExecutionManager.RequestAccessAsync();

    RegisterTask();
}

private static void RegisterTask()
{
    SystemTrigger triger = new SystemTrigger(SystemTriggerType.TimeZoneChange, false);

    BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
    taskBuilder.Name = "WritingTask";
    taskBuilder.SetTrigger(triger);
    taskBuilder.TaskEntryPoint = typeof(ZMyBackgroundTasks.WritingTask).FullName;
    taskBuilder.Register();
}

這裏選擇的觸發器爲「當時區改變時」,這只是爲了方便測試,你能夠根據須要自行選擇。

解除註冊的方法爲:

private void unregisterButton_Click(object sender, RoutedEventArgs e)
{
    var task = BackgroundTaskRegistration.AllTasks.Values.First();
    task.Unregister(true);
    BackgroundExecutionManager.RemoveAccess();
}
相關文章
相關標籤/搜索