当 Windows Phone 操作系统检测到用户或当前应用处于空闲状态时,可以采取措施以减少设备的耗电量。根据创建的应用类型,可能需要为用户或应用禁用空闲检测。
启用应用空闲检测时,操作系统将取消激活空闲的应用。禁用应用空闲检测会请求操作系统不执行此服务。通过将应用 PhoneApplicationService 对象的 ApplicationIdleDetectionMode 属性设置为 Disabled 来禁用应用空闲检测。即使禁用了应用空闲检测,操作系统仍然可能会由于其他原因(如电池用尽)取消激活应用。

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

禁用空闲检测的应用的重要信息:
• 应该谨慎使用该功能,因为手机锁定时运行的应用会继续消耗设备的电池。

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

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

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

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

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

C#

// 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.
}