WP7开发第一课:软件生命周期(其二)

简介:
  • 接下来讲解下:闲置侦测
  • 什么是系统闲置侦测呢?WP7系统在一段时间没有操作后,为节省电源,屏幕会变暗,而再经一段时间后,便会锁定设备,将屏幕整个关闭。进入了生命周期中的 Deactivated 事件。但如果我们应用播放音乐呢?这样肯定是不行的,于是出现了“系统闲置侦测”,要设定 Idle detection 。
  • WP7 中,Idle detection 有两种,一种是应用级别的,一股是用户级别的:
    • ApplicationIdleDetectinMode
    • UserIdleDetectionMode

ApplicationIdleDetection 是应用程序闲置状态侦测,例如经过一段时间没有使用的话,设备会进入锁定,并且引发应用程序的 Deactivated 事件,随后应用程序进入 tombstoning 墓碑状态(墓碑是记录死亡信息的);ApplicationIdleDetectionMode 便是设定设备进入锁定时,应用程序会不会进入 tombstoning 墓碑状态,如果设定为关闭,那么将不会引发应用程序的 Deacticated 事件,也不会将应用程序进入 tombstoning 墓碑状态 ;好处有:

  • 应用程序仍然在执行中
  • 当用户返回应用程序时,由于没有进入 tombstoning 墓碑状态,能够快速回复

而要注意的:

  • 应用程序仍然在执行,所以会继续的消耗电池的电力;请特别注意,设备同样会进入锁定状态,只是应用程序不会停止
  • 所有有关 UI 的更新动作应该要停止,以节省电力的消耗
  • 所有动画、Timer 等动作应该要停止
  • Sensor 将会停止回报(例如 accelerometer 将会停止回报目前的数值)
  • 在改变闲置侦测模式时,永远要先询问使用者是否同意

tombstoning 墓碑机制主要用于在后台运行程序,毕竟WP7尚未支持多任务处理,可以用此机制模拟多任务。墓碑机制感觉跟耶稣死亡,三天后再度复活差不多。

获取目前 ApplicationIdleDetectionMode 的状态,以及判断目前设备是不是被锁定。

由上图可知由外向内为:PhoneApplicationFrame-->时间、信号状态栏、Application bar 、 Page-->Content

 Obscured、UnObscured 事件,这两个事件便是发生在 PhoneApplicationFrmae 中:

 

Obscured事件便是当进入锁定时会引发的事件,在这个事件中,可以去做将 Storyboard、UI 的更新动作停止的相关动作。

using Microsoft.Phone.Shell; Pprivate void SetAppIdleDetectionDisable() { //將應用程式閒置狀態偵測關閉 PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDeectitonMode.Disabled; PhoneApplicationFrame root = (App.Current.RootVisual) as PhoneApplicationFrame; if (root != null) { root.Obscured += new EventHandler<ObscuredEventArgs>(root_Obscured); root.Unobscured += new EventHandler(root_Unobscured); } else MessageBox.Show("Error"); }

把闲置状态侦测关闭之后,接着就是取得 PhoneApplicationFrame ,而 PhoneApplicationFrame 时也是透过 App 类别来取得,取得之后由于在相关的事件必须要有对应的处理动作,因此必须要挂载相关的事件;其中 Obscured 事件便是当进入锁定时会引发的事件,在这个事件中,可以去做将 Storyboard、UI 的更新动作停止的相关动作,例如下面这边以一个 Timer 为例子,在这个事件中会进行关闭的动作

void root_Obscured(object sender, ObscuredEventArgs e) { Debug.WriteLine("Unobscured"); if (e.IsLocked) { //當應用程式被Lock screen覆蓋時要處理的動作,停止動畫(storyboard)、UI更新等動作 timer.Stop(); } }

 

在设备进入锁定时,能够把一些不需要用到的部分关闭,以节省电源。

看完了关闭之后,那如果要重新把闲置状态侦测给开启呢?设定回 Enable 就可以了?这个动作没有错,但是目前的 Windows Phone 7 版本尚未支持,目前闲置模式关闭之后,要重启的唯一方式就是整个应用程序必须要重新开启才行,这部分要特别留意。而 MSDN 中有提到,建议还是可以在应用程序中加入相关的程序代码,但同时要做错误处理,例如说

private void SetAppIdleDetectionEnable() { if (PhoneApplicationService.Current.ApplicationIdleDetectionMode != IdleDetectionMode.Enabled) { try { PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Enabled; } catch (InvalidOperationException ex) { //platform not souported MessageBox.Show("Can't enable application idledection"); } } }

这样在未来的更新中,系统支持上来之后,你的应用程序功能就可以立刻的正常运作了。

 UserIdleDetectionMode 部分:

源地址:http://www.cnblogs.com/zhangdongzi/archive/2011/08/24/2152595.html

这个部分是侦测使用者闲置的状态,使用的方式跟刚刚 ApplicationIdleDetection 是极其类似的,主要的差异性如下:

  • 以目前来说,使用者闲置是指『当用户没有触碰屏幕操作,或是点选硬件按键时』,Sensor 的部分目前即使有改变(例如说转向等等),也是视为闲置中,这个部分在未来的更新中可能会有变更
  • 当设定为 Disable 时,装置永远不会进入锁定
  • UserIdleDetectionMode 是支持 Disable 以及 Enable 的

关闭:

private void SetUserIdleDetectionDisable() { PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; }

重启:

private void SetUserIdleDetectionEnable() { if (PhoneApplicationService.Current.UserIdleDetectionMode != IdleDetectionMode.Enabled) { try { PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Enabled; } catch (Exception ex) { //platform not souported MessageBox.Show("Can't enable user idledection"); } } }

这样便可以达到停止闲置状态的侦测,这对于一些单纯利用 Sensor 来进行操作的应用程序是相当有用的。

 


本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/11/12/2246760.html,如需转载请自行联系原作者

目录
相关文章
|
移动开发 前端开发 JavaScript
HTML+CSS动画打造酷炫轮播图!(含源码)
HTML+CSS动画打造酷炫轮播图!(含源码)
|
编解码
西门子S7-200 SMART中断及中断指令概述
上篇文章我们学习了西门子S7-200 SMART如何使用存储卡复位CPU到出厂设置、固件升级和程序传输,本篇我们来介绍西门子S7-200 SMART的中断及中断指令。中断就是中止当前正在运行的程序,去执行为立刻响应的信号而编写的中断服务程序,执行完毕后再返回原来中止的程序并继续执行。西门子S7-200 SMART CPU最多支持38个中断事件,其中8个为预留。为了便于识别,系统给每一个中断事件都分配了一个编号,又称中断事件号。
西门子S7-200 SMART中断及中断指令概述
|
4天前
|
数据采集 人工智能 安全
|
14天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1145 152
|
19天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1804 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
730 152
|
7天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
515 5