7

バックグラウンド タスク(エージェントではありません)を使用する WP8.1 SL アプリを開発しています。

私のタスクは TimerTrigger によってトリガーされます - 30 分ごとに 1 回 (Windows Phone の最小間隔だと思いますよね?)。それは多くの作業を行っており、何らかの理由で中断されることがあります。つまり、途中で停止します。何が起こっているのかをログに記録し、タスクの作業が基本的に毎回同じであるため、それが途中であることを知る方法です。

昨日、アプリを自分のデバイスに展開して新しいアプローチをテストしましたが、すべてが正常に機能していました。バックグラウンド タスクは、開始されるたびにすべてを実行していました。魅力的に機能しました。今日、私のデバイスはソフト リセットが必要だったので、それを行いました (何も機能していませんでした。WP8.1 にアップデートしてから時々発生します)。その瞬間から、前のアプローチと同様に、バックグラウンド タスクは毎回途中で中断されます。

これを引き起こす可能性のあるアイデアはありますか?私はそれがソフトリセットに関連している可能性があると考えています.なぜなら-それ以前の成功率は100%、その後は0%だからです.

私がこれまでに試したこと:

  • エラーをログに記録し、すべてに try-catch を使用し、UnobservedException イベントとタスクの Canceled イベントをサブスクライブし、中断カウントをログに記録していますが、これらはどれも役に立ちません。エラーは出ていないようで、中断も中止もされていません。

  • 現在のメモリ使用量を時々記録していますが、約 16 ~ 17MB です。私のデバイスでは、制限は 30MB のはずなので、それは問題ではないと思います。

  • 可能な限り RequestAccessAsync を呼び出しています。1回で十分だと思いましたが、そのソフトリセットの問題から、問題の原因であるかどうかを確認するために、1〜2か所に配置することにしました。そうではないか、少なくともこれで問題は解決しませんでした。

よくわからないこと:

  • タスクが消費した CPU 時間を確認する方法がわかりません。そうするための良い/信頼できる方法が見つかりません。また、タスクが途中で停止する理由を説明する情報が見つからない場合もあれば、正常に機能する場合もあります。

バックグラウンド タスクが途中で停止することがある理由はありますか? アプリを修正/改善する方法を決定するのに本当に苦労していますが、それはまったく機能します。

ありがとう。

4

1 に答える 1

13

それで、私は自分の問題が何であるかを見つけたと思います。

まず第一に、バックグラウンド タスクは制限を超える大量の CPU 時間を必要としたため、途中で強制終了されていました。

時々動作していた理由は、私がテストしていたデバイスがアプリをデバッグ中 (またはデバッガーが接続されている) として扱うことがあったためです。この場合、CPU 時間の制限は取り除かれます。

そのため、アプリをアンインストールしてリリースと再デプロイで再構築し、デバッガーを接続せずに起動しても、デバイスは制約を適用していませんでした。これは、デプロイ後に少なくとも 1 回 (またはおそらく初めて) デバッガーを使用してアプリを起動した場合にのみ発生します。デバイスを再起動する (電源をオフにしてからオンにする) と、これが修正されます。

アプリの同じビルドを使用してテストしている間、そのバックグラウンド タスクは、あるデバイスでは40 分間実行され、別のデバイスではわずか 3 ~ 4 秒間実行されました。最初のデバイスを再起動した後、バックグラウンド タスクが正常に動作し始めました (わずか数秒間実行されました)。

したがって、CPU の制約についてバックグラウンド タスクをテストする場合は、次のようにします。

  1. エミュレーターではなく、デバイスでテストする必要があります。
  2. アプリがインストールされている場合は、アプリをアンインストールします。
  3. デバイスを再起動します。
  4. アプリのリリース ビルドをデプロイします。
  5. バックグラウンド タスクを登録できるようにアプリを実行してから、アプリを閉じます。
  6. バックグラウンド タスクが呼び出されるまで待ちます。(TimeZoneChanged や UserPresent など、強制できるトリガーを追加して、すばやくテストできるようにすることができます。)

PSこれは完璧な答えではないかもしれませんが、これらは私の観察であり、私の問題を解決するのに役立ちました. これは、CPU 時間をテストするために私が見つけた最良の方法であり、完璧とはほど遠いものです。だから、誰かがより良いアイデアを持っているなら、それらを共有してください.

于 2014-07-09T12:39:23.433 に答える