Windows Phone 8.1后台任务

痛定思痛。 2022-08-06 09:26 282阅读 0赞

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

1.创建后台任务

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

件:

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

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

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

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

20150111134835120

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

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

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

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

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

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

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

的枚举种类。

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

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

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

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

对应MSDN解释:各类触发器

20150111105612972

20150111105540415

开始动手步骤:

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

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

public sealed class BackTask:IBackgroundTask

{

  1. BackgroundTaskDeferral deferral = null;
  2. public async void Run ( IBackgroundTaskInstance taskInstance )
  3. \{deferral = taskInstance.GetDeferral();....................\}

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. var result = await BackgroundExecutionManager.RequestAccessAsync();
  2. 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 条评论,282人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Windows Phone 8.1后台任务

    实现任务接口的前提认识: 1.创建后台任务 当然光是你创建了后台任务是没有用的,让系统认识到你创建的是后台任务,并且让它承认这是后台任务才是必要条 件: 这个时候

    相关 Windows Phone is here

    自从微软发布了Windows Phone以后,每天都在报纸上刊登广告,持续已经差不多一个月了。对于微软来说,这个攻势极为少见的。广告如下: [![wm1][]][wm1 1]