Windows Phone 的设备状态

2012/2/9

您可以使用 DeviceStatus 类确定有关设备的状态信息,如设备的总内存、设备的硬件版本以及是否部署了物理键盘。此外,您还可以注册多个事件,以便在某些属性发生更改时通知您的应用程序。

在 Windows Phone OS 7.0 中,使用了 DeviceExtendedProperties 类来查询特定于设备的属性。在 Windows Phone OS 7.1 中,DeviceExtendedProperties 的大多数属性已弃用,而应改用新的 DeviceStatus 类。但是,在适当时,您仍然可以使用 DeviceExtendedProperties 中未弃用的属性。

重要说明重要说明:

有关如何使用此类的代码示例,请参阅 Windows Phone 的代码示例如何使用 Windows Phone 的 DeviceStatus 类上的设备状态示例

  • 常规设备信息

    您可以查询 DeviceStatus 属性以获取有关设备的信息,如内存总量、硬件版本以及设备制造商名称。

  • 在锁定屏幕之外运行的应用程序

    某些类型的应用程序(如旅行者用于显示日期和时间的简单警报时钟应用程序)通过在锁定屏幕之外运行来使用户获益。与询问用户是否同意组合在一起,您可以使用 PowerSource API 和 PowerSourceChanged 事件了解手机何时插入外部电源。

  • 键盘可用性

    您的应用程序可以选择支持横向或纵向模式,具体情况取决于硬件键盘是否可用。对于这些或其他应用程序,您可以使用 IsKeyboardPresent 属性、IsKeyboardDeployed 属性以及 KeyboardDeployedChanged 事件。

  • 监视内存使用情况

    开发应用程序时,您可以使用 ApplicationCurrentMemoryUsageApplicationPeakMemoryUsage 属性来监视内存使用情况,使用 DeviceTotalMemoryApplicationMemoryUsageLimit 属性来确定设备和应用程序的内存限制。没必要以非常小的间隔检查应用程序的内存使用情况。偶尔检查高峰内存使用量就足够了。如果您发现高峰内存使用量值超过允许的阈值,如技术认证要求的第 5.2 节中所述,则可以选择更加细微地监视内存使用情况以便帮助诊断问题。

    如果您的应用程序占用大量内存,则跟踪应用程序中主要对象(如页面和用户控件)的实例计数。如果有多个非最终的实例超过预期,则应该调查未释放这些实例的原因。

  • 应用程序不应该向用户呈现原始设备状态信息或不应该尝试动态分析或处理有关设备的设备状态信息。建议使用 DeviceStatus API 将原始设备状态信息发送到 Web 服务以便生成统计数据或使用情况数据。DeviceName 属性还可以用于标识设备以便减少特定于该设备的已知错误。

以下示例显示一种监视应用程序内存使用情况的方法。该方法设置一个计时器,该计时器每隔 10 秒显示应用程序的内存使用情况。

public partial class MainPage : PhoneApplicationPage
    {
        DispatcherTimer timer;

        // Constructor
        public MainPage()
        {
            InitializeComponent();
            timer = new DispatcherTimer();
            timer.Interval = new TimeSpan(0,0,10);
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();
        }

        void timer_Tick(object sender, EventArgs e)
        {
            try
            {
                // These are TextBlock controls that are created in the page’s XAML file.      
                MemoryTextBlock.Text = Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage.ToString();
                PeakMemoryTextBlock.Text = Microsoft.Phone.Info.DeviceStatus.ApplicationPeakMemoryUsage.ToString();
            }
            catch (Exception ex)
            {
                MemoryTextBlock.Text = ex.Message;
            }
        }
    }

显示: