none
UWP バックグラウンドタスクの TimeTrigger は InstantGo のスリープ中にも実行されますか? RRS feed

  • 質問

  • 手持ちのWindows10 InstantGoに対応したノート・タブレットで試したのですが、
     ・ノートパソコン(1台評価): スリープ時も TimeTrigger は実行されていた
     ・タブレット(2台評価 どちらもpowercfgではS0ネット接続): スリープ時には TimeTrigger は実行されず、スリープから復帰時にすぐ実行された
     ・Win10Mobile(MADOSMA): スリープ時も TimeTrigger は実行されていた
     という結果になりました。

     念のため、
     ・タブレットモードのオン・オフ
     ・ロックスクリーンに登録・未登録
     ・設定のプライバシーのバックグラウンド実行の許可・不許可
     ・ACに接続・未接続
     ・マニフェストのバックグラウンド コントロールチャネルにチェックオン・オフ
     もテスト条件に含めて評価してみましたが、同じ結果でした。

     ということで、「バックグラウンドタスクでの TimeTrigger は InstantGo のスリープ中にも実行される」ためには、何か他に条件があるのでしょうか?
     たまたま、私のタブレット2台がおかしな挙動をしたのか、それともデバイスによって InstantGo 時の TimeTriggerは動作する・しないが分かれるものなのか、わかりませんでした。
    2016年3月4日 0:50

回答

  • InstantGoにて一定周期でバックグラウンドタスクが有効になりそうな気もしますが、
    タブレットがInstantGo対応されているのは間違いないのですよね。

    試しに、SystemCondition - InternetAvailable を条件に追加した場合はどのような動きになりますか。
    InstantGoのタイミングでバックグラウンドタスクが実行されますでしょうか。

    また、現在のバックグラウンドタスクの実行内容はどのようなものでしょうか。
    可能であれば最小の処理(ログ出力程度)にて検証をお願いします。
    2016年3月4日 1:46
    モデレータ

すべての返信

  • こんにちは。

    TimeTriggerの周期はどの程度ですか?

    2016年3月4日 1:12
    モデレータ
  •  15分で繰り返しありに設定しました。

    2016年3月4日 1:27
  • InstantGoにて一定周期でバックグラウンドタスクが有効になりそうな気もしますが、
    タブレットがInstantGo対応されているのは間違いないのですよね。

    試しに、SystemCondition - InternetAvailable を条件に追加した場合はどのような動きになりますか。
    InstantGoのタイミングでバックグラウンドタスクが実行されますでしょうか。

    また、現在のバックグラウンドタスクの実行内容はどのようなものでしょうか。
    可能であれば最小の処理(ログ出力程度)にて検証をお願いします。
    2016年3月4日 1:46
    モデレータ
  • ありがとうございます。検証してみました。

     結局、私のタブレットたちは、スリープ中のTimeTriggerバックグラウンドタスク内で「NetworkInformation.GetConnectionProfiles」でネットワーク情報を収集すると、try〜catchで囲んでいても「バックグラウンドタスクごと落ちる」という動きになることがわかりました。

     私の自作ログライブラリは、まず上記のネットワーク情報収集を行ったのちにログ記録を行う仕組みであるため、いきなり落ちることから「バックグラウンドタスクそのものが実行されていない!?」と誤解してしまいました。
     ごくシンプルなログ記録に差し替えてテストして、ようやく気がつきました。

     ただ、同じコードがノートやPhoneではスリープ中でも動作するし、スリープ中でさえなければ全てのデバイスで動作するんですよね...ドライバの問題? 
    2016年3月4日 14:14
  • では、InstantGo中のみバックグラウンドタスクでのNetworkInformation.GetConnectionProfilesでタスクが終了してしまうということですね。

    Completedイベントは発生しますか?
    発生する場合、BackgroundTaskCompletedEventArgsのCheckResultで例外の確認はできますか?

    2016年3月4日 16:00
    モデレータ
  •  「スリープ中のバックグラウンドタスク実行エラーからのCompleted」は、発生していないようです。
     スリープから復帰時にいくつかCompletedがまとめて発生するのですが、それらはバックグラウンドタスクが正常に動作したときのものでした。また、CheckResultからcatchできた例外もありませんでした。

     コードからNetworkInformation.GetConnectionProfilesを削除してバックグラウンドタスクを実行すると、だいたい期待通りの時間にバックグラウンドタスクが実行されるのを確認しました。

    2016年3月7日 5:29
  • 追加の掘り下げを私からしてしまっておいて恐縮ですが、
    質問内容が当初と変わってきていることと、当初の問題は解決済みになっているので、
    新しくスレッドを立てたほうが回答がつくかもしれません。

    問題はNetworkInformation.GetConnectionProfilesですね。
    「一部端末のみ」というのがポイントでしょうか…

    2016年3月7日 5:48
    モデレータ
  • いろいろ気付きをいただき感謝しています。

     スレッドタイトルとしては解決しました。ありがとうございました。
    2016年3月7日 6:32