导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Windows Phone 8 空闲检测

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

当 Windows Phone 操作系统检测到用户或当前应用处于空闲状态时,可以采取措施以减少设备的耗电量。根据您正在创建的应用类型,可能需要为用户或应用禁用空闲检测。 本主题说明如何修改操作系统的空闲行为。

重要说明重要说明:

此 Windows Phone 功能有认证要求,应用必须满足这些要求才有资格在 Windows Phone 应用商店 中列出。当您设计和测试应用时,应该考虑这些要求。有关详细信息,请参见 Windows Phone 的应用认证要求

本主题包括以下部分。

在当前版本中,如果用户已允许手机锁定,那么会将应用视为处于空闲状态。在将来的版本中,限定应用处于空闲状态的条件可能会发生更改。启用应用空闲检测时,操作系统将取消激活空闲的应用。禁用应用空闲检测会请求操作系统不执行此服务。通过将应用 PhoneApplicationService 对象的 ApplicationIdleDetectionMode 属性设置为 Disabled 来禁用应用空闲检测。 即使禁用了应用空闲检测,操作系统仍然可能会由于其他原因(如电池用尽)取消激活应用。

请勿禁用空闲检测来加快手机解锁后应用的恢复时间或在手机锁定时保持应用的状态。当锁定屏幕启动时,Windows Phone 应用将进入休眠状态;当手机解锁时,该应用则会迅速恢复到与他们进入休眠状态时的完全相同状态。这一切均自动完成,无需消耗电池的电量,也不会因禁用空闲检测带给用户潜在的隐藏数据计划成本。

禁用 Windows Phone 应用空闲检测的适当理由包括:手机锁定时核心功能仍需继续运行(例如,运动跟踪应用),或在锁定状态下以后台代理不支持的方式播放音频。

警告说明警告:

不要为加速应用回收而禁用空闲检测。这样做不会提高性能或改善应用的维护状态,反而会导致应用更快速地消耗设备电量,从而造成负面的用户体验。

禁用应用空闲检测的应用的清单

如果 Windows Phone 应用禁止在锁定屏幕状态下运行应用空闲检测,则应该执行以下任务减少锁定屏幕启动时应用的耗电量。

  1. 实现应用的根 PhoneApplicationFrame 对象的 Obscured 事件处理程序。在锁定屏幕启动时或某些其他操作(如收到来电)遮盖了正在运行的应用架构时,会引发此事件。在 Obscured 事件处理程序中执行以下步骤。

  2. 使用 Timer.DisposeDispatcherTimer.Stop 停止所有活动的计时器。

  3. 调用 Storyboard.PauseStoryboard.Stop 以停止所有动画。

  4. 通过调用 Stop() 停止加速度计。

  5. 通过调用 Stop() 停止位置服务。

  6. 通过将 PowerMode 属性设置为 Off 来关闭 FM 收音机。

  7. 向您的应用发出信号:不应执行新网络请求和独立存储操作。

  8. 实现 Unobscured 事件处理程序。锁定屏幕未启用时,会引发这个事件。在此事件处理程序中,应该重新启动所有已通过 Obscured 事件处理程序停止的进程。

禁用应用空闲检测的 XNA Framework 游戏清单

如果 XNA for Windows Phone 游戏禁止在锁定屏幕状态下运行应用空闲检测,则应该执行以下任务减少锁定屏幕启动时应用的耗电量。

  1. 向应用发出信号,要求其不执行任何操作便立即从 Microsoft.Xna.Framework.Game.Update 方法中返回。

  2. Microsoft.Xna.Framework.Game.InactiveSleepTime 属性设置为 1 秒钟。

禁用应用空闲检测时的其他注意事项

以下列表显示了一些禁用空闲检测的应用的重要信息。

  • 应该谨慎使用该功能,因为手机锁定时运行的应用会继续消耗设备的电池。

  • 如果应用使用 MediaElement 对象,则应该在 Obscured 事件处理程序中将其 MediaElement.Source 属性设置为空,然后还原 Unobscured 事件中的前一个值,以确保 MediaElement 不会在启用锁定屏幕时消耗资源。

  • 锁定屏幕启用时,加速度计不会返回数据。

  • 初始化 PhoneApplicationFrame 对象之前无法设置 ApplicationIdleDetectionMode

  • 请在禁用 UserIdleDetectionModeApplicationIdleDetectionMode 之前,总是询问用户是否希望这样做。应用不应假设用户希望作出此行为。

  • 在当前的版本中,禁用应用空闲检测以后,无法在单个应用实例中启用。这样做将引发异常。在未来的版本中会支持此功能,所以当应用不再需要进行应用空闲检测时可以选择将其禁用,并捕捉预期的异常。以下代码片段显示了这种实现。

            // Custom function to turn off idle detection. This will throw an exception in the current release.
            public void TryReenableApplicationIdleDetection()
            {
                bool didEnable = false;
                try
                {
                    Microsoft.Phone.Shell.PhoneApplicationService.Current.ApplicationIdleDetectionMode =
                        Microsoft.Phone.Shell.IdleDetectionMode.Enabled;
                    didEnable = true;
                }
                catch (InvalidOperationException ex)
                {
                    // This exception is expected in the current release.
                }
    
                // Possibly use the value of didEnable to decide what to do next.
                // If it is 'true', then your app will be deactivated. 
                // If it is 'false', then your app will keep running.
            }
    
    

通过将应用 PhoneApplicationService 对象的 UserIdleDetectionMode 属性设置为 Disabled 来禁用用户空闲检测。如果启用用户空闲检测,则当用户空闲时,操作系统会进入低电量使用状态。禁用该属性会请求操作系统不执行此服务。如果您的应用需要在用户没有与屏幕或硬件按键物理交互时继续运行,则可以使用该属性来禁用用户空闲检测。示例方案包括反复导航使用加速度计进行输入的应用和游戏。

应该谨慎使用该功能。当用户未使用手机时,禁用用户空闲检测的应用将继续运行并且消耗电池电量。建议禁用用户空闲检测的应用实现其自己的空闲检测形式并在适当的时候启用 UserIdleDetectionMode。例如,如果加速度计在一段时间内显示没有活动,则基于加速度计的游戏可能会启用用户空闲检测。

当用户在设备锁定超时期限(在设备的“设置”页面中指定)内未接触屏幕或硬件按键时,操作系统将其视为空闲。在将来的版本中,检测用户空闲状态的条件可能会发生更改。

显示:
© 2015 Microsoft