zoukankan      html  css  js  c++  java
  • Windows Phone 8.1 后台任务

    Windows Phone 8.1 应用可以添加多个后台任务,以辅助应用完成某些任务。

    (1)新建前台应用

    后台任务是依托于前台应用的,所以必须拥有一个前台应用。

    该前台应用的功能很简单,就是读取文件中保存的文本;而后台任务就是将当前时间写入文件中。

    前台界面:

    <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>

    打开应用时就读取文本信息:

    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 项目

    后台任务必须为 Windows Runtime Component。

    (3)编写一个继承自 IBackgroundTask 接口的类

    在后台任务的项目中新建一个类,并继承 IBackgroundTask 接口,实现 Run 方法,该类还必须为 sealed:

    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();
    }
  • 相关阅读:
    EasyDarwin云平台:EasyCamera开源摄像机接入海康威视摄像机PS流转ES流
    详解Base64编码和解码
    codeblocks主题修改(vim)
    破解swf文件
    StarUML使用说明-指导手册
    codeBlocks编译undefined reference to错误
    C_文件包含.h文件和包含.c文件总结
    C的面向对象编程
    如何在Windows环境搭建Object C开发环境
    net开源项目
  • 原文地址:https://www.cnblogs.com/xiaoshi3003/p/3763281.html
Copyright © 2011-2022 走看看