设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 服务器 > 系统 > 正文

WP7 - Runing App under the Locked Screen详述

发布时间:2021-01-05 12:31 所属栏目:52 来源:网络整理
导读:Windows Phone 7 – Runing App under the Locked Screen详述 在老狗分享了 这一篇关于如何让开发出来的App可以在 Locked Screen情形下还能继续执行,让我觉得非常有趣而且也带进了很多观念,所以我想把它做个更详细的说明, 协助我自己在阅读上更能快速掌握

Windows Phone 7 – Runing App under the Locked Screen详述


在老狗分享了 这一篇关于如何让开发出来的App可以在

Locked Screen情形下还能继续执行,让我觉得非常有趣而且也带进了很多观念,所以我想把它做个更详细的说明,

协助我自己在阅读上更能快速掌握。

先强调一个观念,所谓的支持Locked Screen下的运行:

“目前App正在执行,按下了Locked Screen的任务;或者是App在执行一段时间后,手机自动进入Locked Screen任务。”

这个是要先厘清的部分,支持的功能不是App在执行按了Windows键或Back键还能Work的情形。

[注]

该篇文章的内容,透过WP7 Emulator的测试其实感觉不太出来,建议如果你有WP7设备的话,测试比较会有感觉。

另外,也许你可以修改WP7 Emulator文件来取得设定关闭屏幕的时间,也许这样会有不错的测试效果。

在说明WP7支持App跑在Locked Screen下之前,还是要再一次提到关于原本WP7对于App运行生命周期的定义:

〉基本WP7 App的生命周期

之前在 一文中,有提到整个WP7 App的LifeCycle,大家可以参考。

而整个LifeCycle里,重点在于:WP7的App在执行阶段,将会随著用户点选Back键、Start键、进入Locked Screen或涉及启动

其他Lanucher、Chooser,将目前App进行Closing或是Tombstoning。这二者处理的不同将会影响程序内容与用户操作的习惯。

〉运行在Locked Screen下的WP7 App生命周期

由上述WP7 App的生命周期得知进入Locked Screen模式,App会自动进入tombstoning,然而App就被暂时停止了。

所以要支持Locked Screen下运行的App,主要一个重点是:它不再执行tombstoning。 也就是说,它跳过了Deactived? Event的流程

然而,让App不进入Deactived Event处理,这就表示在Locked Screen下App仍然使用与Unlocked Screen下相同的内存与资源,

但其实这样是不必要的,因此,在进入Locked Screen后除了要让App可以Work,另一个重点就是能有效节省资源的使用量

?

根据 所提到几项关键技术即可以完成在Locked Screen下运行:

(1) 设定PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled

(2) 处理App的RootFrame中二个重要事件:Obscured与Unobscured,分别处理Locked和Unlocked的任务

以下将分别说明:

-关键属性:“PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled”

?PhoneApplicationService (Microsoft.Phone.Shell)

该类任务在管理整个应用程序生命周期中各种方面的情形,包括:管理应用程序闲置(idle)时的行为、应用程序的状态(state)的管

理(例如:应用程序的Launching、Closing、Activated、Deactived)…等,并且它控制整个App运行的属性与事件。该类的使用,可

以在项目中的“App.xaml.cs”中常看到。其中PhoneApplicatoinService有几个非常重要的属性:

从以上的四个属性的说明,不难看出这次要实践的Locked Screen下继续运行的App该用的属性有那些了吧。没有错,就是最复杂的

“Current”属性。由于Current属性本身代表就是一个PhoneApplicatoinService实例后的对象,所以它也具有以上四个重要的属性。

为了支持让App在Locked Screen情形下仍然可以运行,就必须设定:“ApplicationIdleDetectionMode=IdleDetectionMode.Disabled”,

设定为Disabled之后,WP7 OS本身就不会自动在App进入Idle时,把App自动触发Deactived Event而变成Tombstone。这样一来,程序可以继续

执行,但程序如何结束与需要处理资源与性能的动作,变成要由开发人员来负责。

但要先注意一件事情,“ApplicationIdleDetectionMode被设定为Disabled时,没有办法把目前执行下转回Enabled,需要重新启动

该App才有办法设定(也就是PhoneApplicationFrame被初始化之后),否则会出现InvalidOperationException例外”。

另外,介绍二个用到的属性与类:

?IdleDetectionMode

?PhoneApplicationFrame (Microsoft.Phone.Controls)

由于WP7主要是以Silverlight页面模式运行,用户可以透过NavigationService来浏览不同Page中的内容,然而,其页面模式的主要核心内容是

一个Top-level的容器控件:PhoneApplicatoinFrame来管理Page的处理与浏览,另外它更可以控制PhoneApplicationPage控件。更详细相关页

页模式的运行可以参考:Frame and Page Navigation Overview for Windows Phone。

?

PhoneApplicationFrame管理目前App所有Page,因此,当Locked Screen被启动时,其实App被影响的就是Page中的内容与事件将会无法使用,

它类似在App上多加了一层薄膜(Locked程序)覆盖了原App上的Page,但是App上的PhoneApplicatoinFrame是有支持事件可以处理Locked Screen

所带来的触发事件。以下,将介绍二个重要的Event Handler,处理App进入Idle时的触发事件(Obscured)与由Idle进入App时触发事件(Unobscured)

?

-监测事件:“Obscured”与“Unobscured”

?Obscured / ObscuredEventArgs (EventHandler )

当Sell Chrome覆盖在Frame上时,触发该事件。举例来说:应用程序接收到Locked Screen事件时触发。

在Locked Screen下支持执行,代表App本身没有停止,只是上方多盖了一个Shell Chrome,在这个时候你是没有办法操作App画面上的功能,

所以建议可以把一些相关UI的特效、动画、网络连接(如果是Download功能的程序例外)等功能停止,降低手机电池的使用。

?Unobscured / EventArgs

当Shell Chrome不再覆盖在Frame上时,触发该事件。举例来说:当Locked Screen回到应用程序时触发。

由Locked Screen回到App时,盖在上面的Shell Chrome会消失,那么在Locked Screen时被停止的App上UI与功能都要被恢愎回来。

?

-------------------

以上提到的PhoneApplicationService、PhoneApplicatoinFrame类与Obscured、Unobscured事件处理都是要完成让App可支持在Screen锁定下,

仍可以继续执行的主要元素。

?

接着往下将简单介绍相关实践的程序:

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读