2016-07-24 14 views
0

バックグラウンドタスクを使用してUWPアプリケーションを作成しています。私は実際のアプリケーションが実行中または中断しているときにバックグラウンドを実行したくありません。それを達成するための方法はありますか?私はSystemConditionTypeを見ましたが、何も探していません。アプリケーションがバックグラウンドタスクから実行されていることを確認してください

答えて

5

バックグラウンドタスク(特別なタスクを除く)は別のプロセスで実行されるため、アプリとバックグラウンドタスクの間でメモリが共有されないため、アプリが実行されているかどうかを確認するうまい方法はありません。アプリで

アプリケーションサービス

Create an app serviceを、バックグラウンドタスクでは、サービスに接続しよう:私は正常に実装二つの方法があります。サービスが利用可能な場合は、アプリが実行中であることを意味します。これは、タスクとアプリの間のコミュニケーションが必要なときには好きなものです。

ファイルロック

これはあなただけのアプリが作動しているかどうかを知る必要があり、単純なシナリオでお気に入りの一つです。

  1. アプリが起動するたびに、ローカルのアプリケーションフォルダにファイルを作成/開いて書き込み用に開いて、アプリが実行されている間は開いたままにします。イベントを一時停止すると終了し、再開イベントで再度開きます。
  2. バックグラウンドタスクでは、ファイルを書き込み用に開こうとします。試行が成功した場合は、アプリケーションが実行されていないことを意味します。
  3. バックグラウンドタスクですぐにファイルを閉じます。

注:記念日のアップデートで利用可能で、新しいAPIで 、バックグラウンドタスクはsame process as the appで実行されてもよいです。新しいモデルを使用すると、この問題はもう発生しません。

+0

答えをありがとう。私は、アプリケーションと同じプロセスでバックグラウンドスレッドを実行することを楽しみにしています、それは確かにこのようなものを簡素化します。 – PEK

+0

しかし、第1のアプローチを達成しようとすると、バックグラウンドタスクAppAppviceConnection.OpenAsync()メソッドが発生してUIサービスappサービスに接続しようとすると、デバッグは何も結果を返しません。何か案が? (すべての挿入は、UIプロジェクトのaminfest ..でOKです)すべての設定はOKです。 (Anniversary、Min:Anniversaryの両方でビルドターゲット) – gericooper

+0

@gericooperサービスへの接続を試みる前にtaskInstance.GetDeferral()メソッドを使用してDeferralタスクを取得しますか?それ以外の場合は、非同期メソッド(OpenAsync)が返るのを待機しないため、タスクは終了します。 –

関連する問題