• 接下来讲解下:闲置侦测
  • 什么是系统闲置侦测呢?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 部分:

这个部分是侦测使用者闲置的状态,使用的方式跟刚刚 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 来进行操作的应用程序是相当有用的。

来自:http://www.cnblogs.com/zhangdongzi/archive/2011/08/24/2152595.html

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

  1. 软件构造 第二章 第一节 软件生命周期和版本控制

    软件构造第二章 第一节 软件生命周期和版本控制 基本内容 Software Development Lifecycle (SDLC) Traditional software process mode ...

  2. wp7开发第一课:软件生命周期(其一)

    在window phone 7中软件生命周期跟以往的软件程序运行机制有所不同 ,你必须时刻关注有关生命周期的事件,这里借一张图来表示: 1:应用程序第一次启动(首页Tile或应用列表中启动)就开启一个 ...

  3. 软件测试常见概念(软件生命周期、软件开发模型、软件质量模型、软件缺陷管理、软件测试概述、软件测试分类、软件测试与软件开发、软件测试原则、黑盒测试方法、白盒测试方法、性能测试)

    文章目录 1. 软件概述 1.1 软件生命周期 1.2 软件开发模型 1.2.1 瀑布模型 1.2.2 快速原型模型 1.2.3 迭代模型(增量模型或演化模型) 1.2.4 螺旋模型 1.2.5 敏捷 ...

  4. 一个完整的软件项目开发流程,软件过程,软件生命周期

    一.开发流程图 1.需求分析 结构化分析 面向对象分析 2.原型设计 结构化设计 面向对象设计 3.程序开发 结构化开发 面向对象开发 4.程序测试 二.软件生命周期 软件分析 1.问题定义 确定好要 ...

  5. 软件开发生命周期中的设计阶段_什么是软件生命周期模型?软件测试和软件开发的关系分析!...

    软件生命周期这个词,对于大部分人应该比较陌生,但却不容忽视!正因为它的重要性,才有许多不同的软件开发生命周期模型,但是它们都有一个共同的特点,那就是在生命周期中的某一时刻,软件都会被测试.今天我就和大 ...

  6. 软件生命周期模型(瀑布型、V模型、W模型、敏捷开发模型)

    软件生命周期 软件生存周期的各项活动:需求分析.概要设计.详细设计.coding.测试.交付.验收.维护 软件开发模型 瀑布模型 定义:瀑布模型(Waterfall Model)是将软件生存周期的各项 ...

  7. 几种常用的软件生命周期模型与敏捷开发解读

    瀑布式开发和敏捷开发,看过软件工程相关的书籍的同学,对瀑布模型,增量模型 ,喷泉模型,W模型,V模型以及H模型都是知道一些的,那么现在提到更多的敏捷开发它们之间有什么不同和适用的范围,是否敏捷开发适用 ...

  8. 软件生命周期阶段有几个?常见软件生命周期模型有哪些?

    软件生命周期阶段及常见的软件生命周期模型,软件生命周期是指一个计算机软件从功能确定.设计,到开发 成功投入使用,并在使用中不断地修改.增补和完善,直到停止该软件的使用的全过程. 生命周期从收到应用软件 ...

  9. Day2运营思考:七大步骤助推软件生命周期闭环

    嘉宾:郭至为  整理:张雪蕊 出品:CSDN云原生(ID:csdn-cloud) Wojciech Urbański指出,在当今的专业IT媒体中有一个非常突出的话题,那就是在软件生命周期中的" ...

最新文章

  1. pfile和spfile的区别
  2. 用Graphviz来画图 1
  3. tornado环境搭建
  4. Parity Alternated Deletions
  5. 推荐四十多条纯干货 Java 代码优化建议
  6. html5 css svg,6款基于SVG的HTML5CSS3应用和动画
  7. 英特尔拥抱开源,岂能没有杀手锏?
  8. 数据结构 2-3-2 线性表的双链表实现
  9. 没有它,我们寸步难行——LBS的渊源与实践
  10. html2canvas图片坐标,html2canvas生成的图片偏移不完整的解决方法
  11. android studio for android learning (十四) android的数据的存储sharedPreferences
  12. Geolocation API
  13. 强烈推荐!Python 这个宝藏库 re 正则匹配
  14. Linux - send 出现 Resource temporarily unavailable
  15. 爬虫系列之爬取1688
  16. 粉丝经济大爆发居然真的来了
  17. C#开发:创建gif图片
  18. java 和 c# 下的RSA证书+AES+DES加解密实现
  19. java外包恒大,JAVA开发工程师
  20. 炫技:拼接列表、破碎二维数组——Python sum()函数隐藏技能花式玩法

热门文章

  1. ssrs行高_SSRS中的备用行颜色
  2. Oracle多表联查时,某个字段由逗号分割的字符串组成,关系是此字符串切割后,对应另一张表某个字段,如何实现一条sql完成查询?
  3. redis数据库操作(3)
  4. .NetCore中EFCore for MySql整理(二)
  5. ECNU 3263 丽娃河的狼人传说(差分约束)
  6. 【计算机基础】 经常使用的排序算法的时间复杂度和空间复杂度
  7. [傅里叶变换及其应用学习笔记] 十. 卷积与中心极限定理
  8. struts2权威指南学习笔记:struts2引入自定义库
  9. 【转载】10个有用的du命令行
  10. 2010年3月份第二周51aspx发布源码