Windows Phone 8.1后台任务

实现任务接口的前提认识:

1.创建后台任务

当然光是你创建了后台任务是没有用的,让系统认识到你创建的是后台任务,并且让它承认这是后台任务才是必要条

件:

这个时候就是要实现IBackgroundTask类了,实现其中的Run()方法了。

Run 方法是一个需要的入口点,当触发指定事件时,将调用该入口点;每个后台任务都需要该方法。

2.那我们具体创建啥后台任务呢,就像我们天天嚷着要做事做事,那具体做啥事呢?

直接看图就知道了(支持的任务类型即是我们所能在后台做到的事情):



3.任务创建好了,也能让系统承认这是后台任务了,接下来怎么让它运行呢,让它在什么条件和前提下运行呢?

触发器这个时候就来了。当它检测到我们执行了某些特定的行为时候,它就去触发后台任务了。

比如,我们双击屏幕或按电源键点亮手机的时候,触发器检测到这一行为的发生,然后就去叫等待运行的后台任务,

告诉它,哥们这个时候该运行了,然后后台任务就启动了。

后台任务触发器,都在Windows.ApplicationModel.Background命名空间下

至于触发器能检测到的行为种类,在其对应的Type枚举属性中。比如SystemTrigger触发类能检测到行为种类就是其

对应的TriggerType属性中枚举的。而TriggerType的类型是SystemTriggerType,所以即是SystemTriggerType代表

的枚举种类。

注意下图展示的只是Windows.ApplicationModel.Background命名空间下的不同类。

不光是触发器类型,还有其他类。其实一看也知道,带Trigger字眼的才是触发器类型。

其他类中尤指BackgroundTaskBuilder类和BackgroundTaskDeferral类用的较多。前者是用来注册后台任务,后者是

用来延迟,保证后台任务能运行结束,而不会进程意外终止的。

对应MSDN解释:各类触发器



开始动手步骤:

1.当然就是创建后台任务了。

a.解决方案中添加一个运行时组件项目。在里面类文件,比如这边的BackTask.cs,实现IBackgroundTask接口

  public sealed class BackTask:IBackgroundTask

  {

     BackgroundTaskDeferral deferral = null;

     public async void Run ( IBackgroundTaskInstance taskInstance )

     {deferral = taskInstance.GetDeferral();....................}

  }

b.在类中实现继承自接口的Run()方法

c.deferral用来延迟后台任务,以便后台任务能完成结束

  taskInstance.GetDeferral()获取延迟之后当然结束之后要释放延迟的喽:deferral.Complete()


2.后台创建好了,编译下,最后生成的.winmd后缀的文件则是我们需要的,一般在运行时组件项目的bin->Debug中

  WP8.1项目就需要引用它了,右击添加引用,按文件路径找到后添加即可。

  同时呢,要在Package.appxmanifest清单文件的声明选项卡中,下拉列表中选择后台任务,添加即可,勾选对应任

  务类型,写上对应的入口(运行时组件项目名.类名)。具体呈现结果如 上面VS清单截图所示


3.之后要对后台任务进行注册。之前清单文件的配置只是告诉系统允许那些后台任务,并没有进行注册。

  就像去银行办银行卡一样,你不能只跟工作人员说要办卡就给你卡了。要先去取一下排队号码(这就相当于触发器

  了),再然后就是填办卡申请单,这样才真正的表示你已经进入办卡的流程了,等号码轮到你(触发器触发),你就

  可以去完成办卡了--当然这个例子举得不是很好,对于触发器的类型没有考虑进去,但是能说明一方面问题就好

具体注册后台任务的这块代码写的位置按需求而定。

如果之前需要判断后台任务已经注册存在了,可以加:

foreach (IBackgroundTaskRegistration task in BackgroundTaskRegistration.AllTasks.Values)
{
    if (task.Name == TASKNAME)
    {
        //task.Unregister(true);//你可以取消注册
        //或者进行 另外的一些逻辑判断和信息显示       
    }
}


在注册后台任务前,不要忘了调用BackgroundExecutionManager.RequestAccessAsync()方法,必须调用了该方法并

返回BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity后才能注册后台任务

var result = await BackgroundExecutionManager.RequestAccessAsync();
if (result == BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity){..............}

触发器也要在这个时候伴随着注册后台事件开始写了,因为在后台任务注册之前,要先设定好后台任务是由那个触发

器触发的(对应上面说的办银行卡的流程理解),也就是说

BackgroundTaskBuilder taskbd = new BackgroundTaskBuilder();

task.SetTrigger(trigger)要在task.Register()之前


嗯...以上就是我在网上查阅相关的资料和博客总结的认识,不一定很对,但是记下来方便以后查阅和修改,还有就

是错误大家可以指出来让我改正。

以下就给大家几个我看的感觉不错的相关链接,大家可以学习:

1.周家安老师的:【WP开发】在手机屏幕点亮时播放声音

2.王磊老师的: Windows 8 Store Apps (64) - 后台任务: 开发一个简单的后台任务

3.编程小梦的:windows phone 8.1 开发:后台任务详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值