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 部分:
这个部分是侦测使用者闲置的状态,使用的方式跟刚刚 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开发第一课:软件生命周期(其二)相关推荐
- 软件构造 第二章 第一节 软件生命周期和版本控制
软件构造第二章 第一节 软件生命周期和版本控制 基本内容 Software Development Lifecycle (SDLC) Traditional software process mode ...
- wp7开发第一课:软件生命周期(其一)
在window phone 7中软件生命周期跟以往的软件程序运行机制有所不同 ,你必须时刻关注有关生命周期的事件,这里借一张图来表示: 1:应用程序第一次启动(首页Tile或应用列表中启动)就开启一个 ...
- 软件测试常见概念(软件生命周期、软件开发模型、软件质量模型、软件缺陷管理、软件测试概述、软件测试分类、软件测试与软件开发、软件测试原则、黑盒测试方法、白盒测试方法、性能测试)
文章目录 1. 软件概述 1.1 软件生命周期 1.2 软件开发模型 1.2.1 瀑布模型 1.2.2 快速原型模型 1.2.3 迭代模型(增量模型或演化模型) 1.2.4 螺旋模型 1.2.5 敏捷 ...
- 一个完整的软件项目开发流程,软件过程,软件生命周期
一.开发流程图 1.需求分析 结构化分析 面向对象分析 2.原型设计 结构化设计 面向对象设计 3.程序开发 结构化开发 面向对象开发 4.程序测试 二.软件生命周期 软件分析 1.问题定义 确定好要 ...
- 软件开发生命周期中的设计阶段_什么是软件生命周期模型?软件测试和软件开发的关系分析!...
软件生命周期这个词,对于大部分人应该比较陌生,但却不容忽视!正因为它的重要性,才有许多不同的软件开发生命周期模型,但是它们都有一个共同的特点,那就是在生命周期中的某一时刻,软件都会被测试.今天我就和大 ...
- 软件生命周期模型(瀑布型、V模型、W模型、敏捷开发模型)
软件生命周期 软件生存周期的各项活动:需求分析.概要设计.详细设计.coding.测试.交付.验收.维护 软件开发模型 瀑布模型 定义:瀑布模型(Waterfall Model)是将软件生存周期的各项 ...
- 几种常用的软件生命周期模型与敏捷开发解读
瀑布式开发和敏捷开发,看过软件工程相关的书籍的同学,对瀑布模型,增量模型 ,喷泉模型,W模型,V模型以及H模型都是知道一些的,那么现在提到更多的敏捷开发它们之间有什么不同和适用的范围,是否敏捷开发适用 ...
- 软件生命周期阶段有几个?常见软件生命周期模型有哪些?
软件生命周期阶段及常见的软件生命周期模型,软件生命周期是指一个计算机软件从功能确定.设计,到开发 成功投入使用,并在使用中不断地修改.增补和完善,直到停止该软件的使用的全过程. 生命周期从收到应用软件 ...
- Day2运营思考:七大步骤助推软件生命周期闭环
嘉宾:郭至为 整理:张雪蕊 出品:CSDN云原生(ID:csdn-cloud) Wojciech Urbański指出,在当今的专业IT媒体中有一个非常突出的话题,那就是在软件生命周期中的" ...
最新文章
- pfile和spfile的区别
- 用Graphviz来画图 1
- tornado环境搭建
- Parity Alternated Deletions
- 推荐四十多条纯干货 Java 代码优化建议
- html5 css svg,6款基于SVG的HTML5CSS3应用和动画
- 英特尔拥抱开源,岂能没有杀手锏?
- 数据结构 2-3-2 线性表的双链表实现
- 没有它,我们寸步难行——LBS的渊源与实践
- html2canvas图片坐标,html2canvas生成的图片偏移不完整的解决方法
- android studio for android learning (十四) android的数据的存储sharedPreferences
- Geolocation API
- 强烈推荐!Python 这个宝藏库 re 正则匹配
- Linux - send 出现 Resource temporarily unavailable
- 爬虫系列之爬取1688
- 粉丝经济大爆发居然真的来了
- C#开发:创建gif图片
- java 和 c# 下的RSA证书+AES+DES加解密实现
- java外包恒大,JAVA开发工程师
- 炫技:拼接列表、破碎二维数组——Python sum()函数隐藏技能花式玩法
热门文章
- ssrs行高_SSRS中的备用行颜色
- Oracle多表联查时,某个字段由逗号分割的字符串组成,关系是此字符串切割后,对应另一张表某个字段,如何实现一条sql完成查询?
- redis数据库操作(3)
- .NetCore中EFCore for MySql整理(二)
- ECNU 3263 丽娃河的狼人传说(差分约束)
- 【计算机基础】 经常使用的排序算法的时间复杂度和空间复杂度
- [傅里叶变换及其应用学习笔记] 十. 卷积与中心极限定理
- struts2权威指南学习笔记:struts2引入自定义库
- 【转载】10个有用的du命令行
- 2010年3月份第二周51aspx发布源码