Windows Phone のアイドル検出

2012/02/09

Windows Phone のオペレーティング システムでは、ユーザーまたは現在のアプリケーションがアイドル状態になっていることを検出した場合に、デバイスの消費電力を抑制する措置を講じることができます。作成するアプリケーションの種類によっては、ユーザーまたはアプリケーションのアイドル検出を無効にする必要があります。このトピックでは、オペレーティング システムのアイドル動作を変更する方法について説明します。

重要な注重要な注:

この Windows Phone 機能には、Windows Phone Marketplace にアプリケーションを表示するための認定要件があります。アプリケーションの設計やテストを行う際には、これらの要件を考慮する必要があります。詳細については、「Windows Phone 7 アプリケーションの認定要件」を参照してください。

現在のリリースでは、ユーザーが電話のロックを許可している場合、アプリケーションはアイドル状態であると見なされます。将来のリリースでは、アプリケーションをアイドル状態と見なす条件が変更される可能性があります。アプリケーションのアイドル検出が有効になっている場合、オペレーティング システムはアイドル状態のアプリケーションを無効にします。アプリケーションのアイドル検出を無効にすると、オペレーティング システムはこのサービスを実行しません。アプリケーションのアイドル検出を無効にするには、アプリケーションの PhoneApplicationService オブジェクトの ApplicationIdleDetectionMode プロパティを Disabled に設定します。アプリケーションのアイドル検出が無効になっている場合でも、バッテリーの消耗などの他の理由で、オペレーティング システムによってアプリケーションが無効化される可能性があります。

Windows Phone OS 7.1 のアイドル検出の変更

Windows Phone OS 7.1 は、これまでアイドル検出を無効にすることによって対処していたほとんどのアプリケーション シナリオを可能にし、改善する多数の機能を備えています。これらの機能の詳細については、「Windows Phone のマルチタスキング」の高速アプリケーション切り替え、バックグラウンド オーディオ エージェント、スケジュール タスクのセクションを参照してください。

電話のロック解除後にアプリケーションの再開を高速化したり、電話のロック中にアプリケーションの状態を維持したりするには、アイドル検出を無効にしないでください。Windows Phone OS 7.1 を対象にするアプリケーションは、ロック画面になると休止状態になり、電話のロックが解除されると、休止に切り替わったときとまったく同じ状態で速やかに再開します。これは、すべて自動的に行われ、アイドル検出を無効にすることによって発生するバッテリーの消耗やユーザーへの隠れたデータ プラン コストの可能性もありません。

Windows Phone OS 7.1 アプリケーションでアイドル検出を無効にする有効な理由には、電話がロックされている間も、コア機能 (運動追跡アプリなど) が続行することや、バックグラウンド エージェントでサポートされない方式で、ロック状態でもオーディオを再生することなどがあります。

重要な注重要な注:

Windows Phone OS 7.1 を対象にしたアプリの場合。アプリケーションの再開を高速化するには、アプリケーションのアイドル検出を無効にしないでください。無効にすると、パフォーマンスやアプリケーションの状態の保持が向上せず、アプリケーションのバッテリー消費が早くなり、ユーザーの操作性が低下します。

Windows Phone OS 7.1 に移植するすべての Windows Phone OS 7.0 アプリケーションでは、上記の機能がアプリケーションの要件を満たさない場合を除き、アイドル状態の検出を無効にすることはやめるよう強くお勧めします。

アプリケーションのアイドル検出を無効にする Silverlight アプリケーションのチェックリスト

ロック画面でも動作するように Silverlight for Windows Phone アプリケーションでアプリケーションのアイドル検出を無効にする場合は、ロック画面になっている間のアプリケーションの電力消費を抑えるために、次の作業を実行する必要があります。

  1. アプリケーションのルートの PhoneApplicationFrame オブジェクトの Obscured イベント ハンドラーを実装します。このイベントは、ロック画面になった場合や、着信通話など他の動作によって実行中のアプリケーションのフレームが不明確になった場合に発生します。Obscured イベント ハンドラーで次の手順を実行します。

  2. System.Threading.Timer.Dispose および DispatcherTimer.Stop を使用して、すべてのアクティブなタイマーを停止します。

  3. Storyboard.Pause または Storyboard.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 イベント ハンドラーで Source プロパティを null に設定してから、Unobscured イベントで前の値を復元して、ロック画面になっている間に MediaElement がリソースを消費しないようにする必要があります。

  • ロック画面になっている間、加速度センサーはデータを返しません。

  • ApplicationIdleDetectionMode は、PhoneApplicationFrame オブジェクトが初期化されるまで設定できません。

  • UserIdleDetectionMode または ApplicationIdleDetectionMode を無効にする際には、必ず前もってユーザーに本当に無効にしてもよいかどうかを確認します。ユーザーが常にこうした動作を望んでいるとは限りません。

  • 現在のリリースでは、アプリケーションのアイドル検出を無効にした後で、単独のアプリケーション インスタンスでアイドル検出を有効にすることはできません。このような処理を行うと、例外がスローされます。今後のリリースでは、この処理がサポートされる可能性があります。その場合、アイドル検出が必要なくなった場合や所定の例外をキャッチした場合に、アプリケーションでアプリケーションのアイドル検出を無効にすることを選択することができます。次のコード スニペットは、この処理の実装例です。

            // 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 に設定します。ユーザーのアイドル検出を有効にすると、ユーザーがアイドル状態になったときに、オペレーティング システムは消費電力の少ない状態に移行します。このプロパティを無効にすると、オペレーティング システムはこのサービスを実行しなくなります。ユーザーが実際に画面やハードウェア ボタンを操作していない場合でも、アプリケーションの実行を継続する必要がある場合には、このプロパティを使用してユーザーのアイドル検出を無効にします。例のシナリオには、入力に加速度計を使用する Turn-by-Turn ナビゲーション アプリケーションやゲームが含まれています。

この機能の使用には注意が必要です。ユーザーのアイドル検出を無効にするアプリケーションは、ユーザーが電話を使用していない場合でも継続して実行され、バッテリーの電力を消費し続けます。必要に応じて、ユーザーのアイドル検出を無効にするアプリケーションでアイドル検出の専用フォームを実装し、UserIdleDetectionMode を有効にすることをお勧めします。たとえば、加速度計ベースのゲームの場合、加速度計が一定期間動作なしを示した場合に、ユーザーのアイドル検出を有効にすることができます。

現在のリリースでは、デバイスの設定ページで指定されたデバイスのロック タイムアウト時間内に画面またはハードウェア ボタンに触れなかった場合、オペレーティング システムはユーザーがアイドル状態であると判断します。ユーザーのアイドル状態を検出する条件は、今後変更される可能性があります。

表示: