0
Windows Phoneのバックグラウ  ンドエージェントについて   Metro スタイルへ続く…
Twitter: @kabakiyo(かばちゅ~)ブログ:遅咲きのエンジニアWindows Phone
アジェンダバックグラウンドエージェントの概要バックグラウンドエージェントの実装方法
バックグラウンドエージェントとはWindows Phoneでフォアグランドで動くアプリは一つだけ。バッググラウンドでも処理をするために搭載された機能がバックグラウンドエージェント。一部のバックグラウンドの機能がWindowsPhone OS 7...
バックグラウンドでできることオーディオの再生アプリケーションが終了していても音楽を再生することができるタスクの実行定期的な間隔で処理を実行できるファイル転送ファイルのダウンロードやアップロードの最中にアプリケーションが閉じられても継続的に処理す...
バックグラウンドでできないこと     いっぱい!    \(*T▽T*)/
バックグラウンドでできないことカメラセンサー(加速度、コンパス、ジャイロ)ブラウザLauncherとChooserXnaナビゲーションクリップボード…       Windows Phone のバックグラウンド エージェントのサポートされない ...
バックグラウンド処理の実装の種類ScheduledTaskAgentタスクを処理するエージェント                            AgentはバックグラウAudioPlayerAgent            ンドでの処理...
ScheduledTaskAgentAudioPlayerAgentAudioStreamingAgentBackgroundTransferServiceAlarm、Reminder各エージェントの説明
ScheduledTaskAgent
役割                       ScheduledTaskAgent 任意の処理をバックグラウンドで行うことが できる バックグラウンドの処理の実行を制御するた めに2つのタスクが存在する 定期的に処理を実行するPeriodi...
制約              ScheduledTaskAgent メモリの上限は6MB 2週間ごとに再スケジュールが必要 2回連続でクラッシュすると登録が解除さ れる
PeriodicTaskについて   ScheduledTaskAgent  定期的な間隔で小さな処理を行うのに向い  ている  例えばデバイスの位置の更新
PeriodicTaskの制約    ScheduledTaskAgent  30分間隔で実行                  30分  最大で10分のずれ  25秒間実行  バッテリーセーブモードでは実行できない  かも  デバイスで決めら...
ResourceInsentiveTask           ScheduledTaskAgent               あんなこと    そんなこと        できます!  ある程度の長い時間(10分)処理できる  タスク  例え...
ResourceInsentiveTaskの制約   ScheduledTaskAgent 条件は非常に厳しいので実行されないケースも  時間は10分  外部電源が必要  携帯のネットワークでは実行されない  バッテリーの電力が90%以上  ロ...
使い方               ScheduledTaskAgent使い方は簡単 既存のプロジェクトにタスクエージェント プロジェクトを追加 参照に追加するのを忘れずに! アプリ側にタスクを登録するコードを追加 バックグラウンドで処理するコ...
アプリケーション側の実装                                 ScheduledTaskAgent// すでに登録してあるタスクを削除するvar task = ScheduledActionService.Find(...
バックグラウンド側の実装                                       ScheduledTaskAgent// クラスは自動で生成されるpublic class ScheduledAgent : Schedule...
アーキテクチャ                                      ScheduledTaskAgentアプリケーション                            システム・ScheduledActionSer...
AudioPlayerAgent
役割                   AudioPlayerAgent オーディオ専用のバックグラウンドエージェ ント 再生・次の曲・一時停止、などのイベントを 受けて曲を再生したり次の曲を選曲する イベントの発行者は二人 アプリケーション...
制約                AudioPlayerAgent 30秒以内で処理 最大で15MBのメモリ制限 ただしデバッグ実行中は無制限
使い方                 AudioPlayerAgent 既存のプロジェクトにオーディオファイル 再生エージェントを追加 参照に追加するのを忘れずに! アプリケーション側からイベント発生 バックグラウンド側でイベント処理
アプリケーション側の実装                                               AudioPlayerAgent// 再生ボタンをクリックしたときprivate void playButton_Click(...
アプリケーション側の実装                                                 AudioPlayerAgent// コンストラクタでイベントを設定BackgroundAudioPlayer.Insta...
バックグラウンド側の実装             AudioPlayerAgent OnUserActionの実装 OnPlayStateChangedの実装 OnErrorの実装
OnUserActionの実装                                                                 AudioPlayerAgent ユーザーの操作によって発生したイベントに対応する処...
OnPlayStateChangedの実装                                                         AudioPlayerAgent プレイヤーの状態に変更があったときの処理を実装する p...
OnErrorの実装                                        AudioPlayerAgentダウンロードに失敗したときなどのためのエラー処理を実装するprotected override void OnE...
アーキテクチャ                                      AudioPlayerAgentアプリケーション                          システムBackgroundAudioPlayer.I...
AudioStreamingAgent
役割                  AudioStreamingAgent ストリーミング専用のエージェント Windows Phoneでは対応していない形式の ファイルを再生するのに利用するらしい…
制約                     AudioStreamingAgent 時間は無制限 最大で15MBのメモリ制限 ただしデバッグ実行中は無制限 MediaElementとの同居は不可
使い方                                                        AudioStreamingAgentAudioPlayerAgentの実装も必要!AudioPlayerAgentはユーザー...
アーキテクチャ                                          AudioStreamingAgentアプリケーション                              システム・BackgroundA...
BackgroundTransferService
役割                           BackgroundTransferService バックグラウンドでのファイルのアップ ロードとダウンロードが可能 1つのファイルに対し1つの BackgroundTransferRe...
制約                       BackgroundTransferService HTTP、HTTPSのみ対応 FTPは未対応 ファイルの基点は、”/shared/transfers” HTTPヘッダの予約 If-Modif...
ファイルサイズの制限             BackgroundTransferServiceアップロード 5MBまでダウンロード 接続     外部電源   制限 3G     ー      20MB WiFi   なし     100MB
リクエストの制限         BackgroundTransferService アプリ内では5個まで デバイス内では500個まで デバイス内で同時転送は2個まで HTTPのヘッダー数は15個まで HTTPのヘッダーサイズは各16KBまで
ネットワークの制限            BackgroundTransferService 2G、EDGE、Standard GPRSはNG 3G以上はNG 5 MB より大きいファイルの場合、サー バー側で content-length ヘ...
転送速度の制限                BackgroundTransferServiceネットワーク       最低データ速度3G           50KbpsWi-Fi/ USB   100Kbps
使い方                                     BackgroundTransferService1.   BackgroundTransferRequestを生成     var request = new B...
アーキテクチャ                                       BackgroundTransferServiceアプリケーション                                システム・Backgr...
Alarm・Reminder
役割                    Alarm・Reminder 指定した時刻に通知してくれ る 定期的に指定することも可 AlarmとRemainderの2つ Alarmは指定した時刻に音楽 を鳴らす目覚まし時計のよう な用途 Rem...
制約                                                                      Alarm・Reminder 登録できる数はアプリケーション内で50 個まで for (int i ...
実装サンプル(Alarm)                                     Alarm・ReminderString name = System.Guid.NewGuid().ToString();Alarm alarm...
実装サンプル(Reminder)                                  Alarm・ReminderString name = System.Guid.NewGuid().ToString();Reminder re...
アーキテクチャ                                                Alarm・Reminderフォアグラウンド                                システム         ...
デバッグの方法 タスクが実行されるタイミングを待ってら れない! 指定した時間(今からの時間で指定)に実 行するLaunchForTestがあるScheduledActionService.LaunchForTest(   task.Name,...
注意 ServiceにAddしたものは自分でRemoveし なければならない 制限が厳しいので制限に引っかかりそうな 処理には必ずtry-catchで例外を受け止める こと バックグラウンドの定義は WPAppManifest.xmlに記述してある
気になるところ テスターはどうやってテストしてるんだろ う?30分待つの?たくさんタスクを登録 して例外が出るときのチェックはしてるの だろうか?
参考 Windows Phone のバックグラウンド エージェントの概要  http://msdn.microsoft.com/ja-jp/library/hh202942(v=vs.92).aspx Windows Phone のバックグラウ...
ご清聴ありがとうございました。
Upcoming SlideShare
Loading in...5
×

Windows phoneのバックグラウンドエージェントについて

1,408

Published on

2012.06.10 Community Open Dayで発表した資料

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,408
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Windows phoneのバックグラウンドエージェントについて"

  1. 1. Windows Phoneのバックグラウ ンドエージェントについて Metro スタイルへ続く…
  2. 2. Twitter: @kabakiyo(かばちゅ~)ブログ:遅咲きのエンジニアWindows Phone
  3. 3. アジェンダバックグラウンドエージェントの概要バックグラウンドエージェントの実装方法
  4. 4. バックグラウンドエージェントとはWindows Phoneでフォアグランドで動くアプリは一つだけ。バッググラウンドでも処理をするために搭載された機能がバックグラウンドエージェント。一部のバックグラウンドの機能がWindowsPhone OS 7.0から組み込まれてはいたが、開発者が扱えるようになったのはWindowsPhone OS 7.1から、と思われる。
  5. 5. バックグラウンドでできることオーディオの再生アプリケーションが終了していても音楽を再生することができるタスクの実行定期的な間隔で処理を実行できるファイル転送ファイルのダウンロードやアップロードの最中にアプリケーションが閉じられても継続的に処理するアラームなどの通知指定した時刻にユーザーに通知する
  6. 6. バックグラウンドでできないこと いっぱい! \(*T▽T*)/
  7. 7. バックグラウンドでできないことカメラセンサー(加速度、コンパス、ジャイロ)ブラウザLauncherとChooserXnaナビゲーションクリップボード… Windows Phone のバックグラウンド エージェントのサポートされない API http://msdn.microsoft.com/ja-jp/library/hh202962(v=vs.92).aspx
  8. 8. バックグラウンド処理の実装の種類ScheduledTaskAgentタスクを処理するエージェント AgentはバックグラウAudioPlayerAgent ンドでの処理を行うクオーディオプレイヤー専用のエージェント ラスAudioStreamingAgentストリーミング専用のエージェントBackgroundTransferServiceファイル転送用のAPI ServiceはバックグラAlarm、Reminder ウンドへの処理の授受 を行うクラス指定した時刻に通知するAPI
  9. 9. ScheduledTaskAgentAudioPlayerAgentAudioStreamingAgentBackgroundTransferServiceAlarm、Reminder各エージェントの説明
  10. 10. ScheduledTaskAgent
  11. 11. 役割 ScheduledTaskAgent 任意の処理をバックグラウンドで行うことが できる バックグラウンドの処理の実行を制御するた めに2つのタスクが存在する 定期的に処理を実行するPeriodicTask 長時間処理を行うResourceInsentiveTask 最もプログラマーにとって融通の効くエー ジェント
  12. 12. 制約 ScheduledTaskAgent メモリの上限は6MB 2週間ごとに再スケジュールが必要 2回連続でクラッシュすると登録が解除さ れる
  13. 13. PeriodicTaskについて ScheduledTaskAgent 定期的な間隔で小さな処理を行うのに向い ている 例えばデバイスの位置の更新
  14. 14. PeriodicTaskの制約 ScheduledTaskAgent 30分間隔で実行 30分 最大で10分のずれ 25秒間実行 バッテリーセーブモードでは実行できない かも デバイスで決められた数(最低6個)まで 登録できる
  15. 15. ResourceInsentiveTask ScheduledTaskAgent あんなこと そんなこと できます! ある程度の長い時間(10分)処理できる タスク 例えばデータをすべて同期するなどの処理 に向いている 制約が厳しいので実行されないケースも想 定する必要がある 利用するケースとしては寝ている間に実行 する
  16. 16. ResourceInsentiveTaskの制約 ScheduledTaskAgent 条件は非常に厳しいので実行されないケースも 時間は10分 外部電源が必要 携帯のネットワークでは実行されない バッテリーの電力が90%以上 ロック画面 通話中はNG 途中から携帯のネットワークに変更できな い
  17. 17. 使い方 ScheduledTaskAgent使い方は簡単 既存のプロジェクトにタスクエージェント プロジェクトを追加 参照に追加するのを忘れずに! アプリ側にタスクを登録するコードを追加 バックグラウンドで処理するコードを追加
  18. 18. アプリケーション側の実装 ScheduledTaskAgent// すでに登録してあるタスクを削除するvar task = ScheduledActionService.Find(“タスク名”) as PeriodicTask;if (task != null){ ScheduledActionService.Remove(task);}// 新しいタスクの登録task = new PeriodicTask(“タスク名”);task.Description = “バックグラウンドタスクに表示される文字列”;ScheduledActionService.Add(task);
  19. 19. バックグラウンド側の実装 ScheduledTaskAgent// クラスは自動で生成されるpublic class ScheduledAgent : ScheduledTaskAgent{ protected override void OnInvoke(ScheduledTask task) { // ここでバックグラウンドでの処理を記述する … // 最後に成功したらNotifyComplete、失敗したらAbortを呼ぶ NotifyComplete(); // or Abort(); }}
  20. 20. アーキテクチャ ScheduledTaskAgentアプリケーション システム・ScheduledActionService Add(PeriodicTask) 1.登録 Task Add(ResourceInsentiveTask) Task・ScheduledAction.IsScheduled 4.確認 ScheduledActionはTaskの基底クラスエージェント(ScheduledTaskAgent) 2.呼び出し OnInvoke(task) { Task別に処理 3.結果を返す NotifyComplete() or Abort() }
  21. 21. AudioPlayerAgent
  22. 22. 役割 AudioPlayerAgent オーディオ専用のバックグラウンドエージェ ント 再生・次の曲・一時停止、などのイベントを 受けて曲を再生したり次の曲を選曲する イベントの発行者は二人 アプリケーションから操作する BackgroundAudioPlayer ハードウェアから操作する Universal Volume Control (UVC)
  23. 23. 制約 AudioPlayerAgent 30秒以内で処理 最大で15MBのメモリ制限 ただしデバッグ実行中は無制限
  24. 24. 使い方 AudioPlayerAgent 既存のプロジェクトにオーディオファイル 再生エージェントを追加 参照に追加するのを忘れずに! アプリケーション側からイベント発生 バックグラウンド側でイベント処理
  25. 25. アプリケーション側の実装 AudioPlayerAgent// 再生ボタンをクリックしたときprivate void playButton_Click(object sender, RoutedEventArgs e){ // 再生中の時は停止、停止しているときは再生する if (PlayState.Playing == BackgroundAudioPlayer.Instance.PlayerState) { BackgroundAudioPlayer.Instance.Pause(); } else { BackgroundAudioPlayer.Instance.Play(); }}
  26. 26. アプリケーション側の実装 AudioPlayerAgent// コンストラクタでイベントを設定BackgroundAudioPlayer.Instance.PlayStateChanged += newEventHandler(Instance_PlayStateChanged)// 状態が変化したときのイベントvoid Instance_PlayStateChanged(object sender, EventArgs e){ switch (BackgroundAudioPlayer.Instance.PlayerState) { case PlayState.Paused: break; case PlayState.Playing: break; }}
  27. 27. バックグラウンド側の実装 AudioPlayerAgent OnUserActionの実装 OnPlayStateChangedの実装 OnErrorの実装
  28. 28. OnUserActionの実装 AudioPlayerAgent ユーザーの操作によって発生したイベントに対応する処理を実装する protected override void OnUserAction( BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { // 再生 case UserAction.Play: break; // 一時停止 case UserAction.Pause: break; // << 前の曲へ case UserAction.SkipPrevious: break; // >> 次の曲へ case UserAction.SkipNext: break; } NotifyComplete(); }
  29. 29. OnPlayStateChangedの実装 AudioPlayerAgent プレイヤーの状態に変更があったときの処理を実装する protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState) { switch (playState) { // トラックが終了 case PlayState.TrackEnded: PlayNextTrack(player); // 次の再生する曲へ break; // 再生の準備ができている case PlayState.TrackReady: // The track to play is set in the PlayTrack method. player.Play(); // 再生する break; } NotifyComplete(); }
  30. 30. OnErrorの実装 AudioPlayerAgentダウンロードに失敗したときなどのためのエラー処理を実装するprotected override void OnError(BackgroundAudioPlayer player, AudioTrack track,Exception error, bool isFatal){ if (isFatal) { Abort(); } else { NotifyComplete(); }}
  31. 31. アーキテクチャ AudioPlayerAgentアプリケーション システムBackgroundAudioPlayer.Instance Play 1.イベント登録 Zune Media Queue Pause SkipNext event PlayStateChanged 4.イベント通知 UIの更新 エージェント(AudioPlayerAgent) • OnUserAction 2.呼び出し • OnPlayStateChanged • OnError 3.結果を返す NotifyComplete() or Abort()
  32. 32. AudioStreamingAgent
  33. 33. 役割 AudioStreamingAgent ストリーミング専用のエージェント Windows Phoneでは対応していない形式の ファイルを再生するのに利用するらしい…
  34. 34. 制約 AudioStreamingAgent 時間は無制限 最大で15MBのメモリ制限 ただしデバッグ実行中は無制限 MediaElementとの同居は不可
  35. 35. 使い方 AudioStreamingAgentAudioPlayerAgentの実装も必要!AudioPlayerAgentはユーザーの操作への応答に必要。 既存のプロジェクトにオーディオストリーミング エージェントを追加 参照に追加するのを忘れずに! Uriをnullに設定す ることで アプリケーション側からイベント発生 AudioStreaminAge BackgroundAudioPlayer.Instance.Track = ntを呼び出す new AudioTrack(null, "title", null, null, null); バックグラウンド側でイベント処理 OnBeginStreamingの処理を追加
  36. 36. アーキテクチャ AudioStreamingAgentアプリケーション システム・BackgroundAudioPlayer.Instance 1.登録 .Track = new AudioTrack(null, … Zune Media Queue event PlayStateChanged 6.完了通知 エージェント(AudioStreamingAgent) 2.呼び出し • OnBeginStreaming MediaStreamSourceをセットする 3.完了 エージェント(AudioPlayerAgent) • OnUserAction 4.再生開始 • OnPlayStateChanged • OnError 5.再生完了 NotifyComplete() or Abort()
  37. 37. BackgroundTransferService
  38. 38. 役割 BackgroundTransferService バックグラウンドでのファイルのアップ ロードとダウンロードが可能 1つのファイルに対し1つの BackgroundTransferRequest ファイルの転送は BackgroundTransferService が担当
  39. 39. 制約 BackgroundTransferService HTTP、HTTPSのみ対応 FTPは未対応 ファイルの基点は、”/shared/transfers” HTTPヘッダの予約 If-Modified-Since If-None-Match If-Range Range Unless-Modified-Since
  40. 40. ファイルサイズの制限 BackgroundTransferServiceアップロード 5MBまでダウンロード 接続 外部電源 制限 3G ー 20MB WiFi なし 100MB
  41. 41. リクエストの制限 BackgroundTransferService アプリ内では5個まで デバイス内では500個まで デバイス内で同時転送は2個まで HTTPのヘッダー数は15個まで HTTPのヘッダーサイズは各16KBまで
  42. 42. ネットワークの制限 BackgroundTransferService 2G、EDGE、Standard GPRSはNG 3G以上はNG 5 MB より大きいファイルの場合、サー バー側で content-length ヘッダーが必要 5 MB より大きいファイルの場合、サー バー側で範囲ヘッダーが必要
  43. 43. 転送速度の制限 BackgroundTransferServiceネットワーク 最低データ速度3G 50KbpsWi-Fi/ USB 100Kbps
  44. 44. 使い方 BackgroundTransferService1. BackgroundTransferRequestを生成 var request = new BackgroundTransferRequest(uri);2. Requestに対しもろもろの設定(ダウンロー ドの場合) request.Method = “GET”; request.DownloadLocation = “保存する場所”; request.TransferPreferences = 転送の条件;3. BackgroundTransferServideに追加 BackgroundTransferService.Add(request);
  45. 45. アーキテクチャ BackgroundTransferServiceアプリケーション システム・BackgroundTransferService ・BackgroundTransferRequest event TransferProgressChanged event TransferStatusChanged 2.状態の変化を通知 Completed Add(request) Upload or Download 1.登録 Remove(request) 3.終了したら削除
  46. 46. Alarm・Reminder
  47. 47. 役割 Alarm・Reminder 指定した時刻に通知してくれ る 定期的に指定することも可 AlarmとRemainderの2つ Alarmは指定した時刻に音楽 を鳴らす目覚まし時計のよう な用途 Reminderは友達との約束や仕 事の予定などのスケジュール を目的とした用途
  48. 48. 制約 Alarm・Reminder 登録できる数はアプリケーション内で50 個まで for (int i = 0; i < 50; i++) { name = System.Guid.NewGuid().ToString(); Alarm alarm = new Alarm(name); alarm.Content = "コンテンツ"; alarm.Sound = new Uri("/Ringtones/music.mp3", UriKind.Relative); alarm.BeginTime = beginTime; alarm.ExpirationTime = expirationTime; alarm.RecurrenceType = recurrence; ScheduledActionService.Add(alarm); } 51個目で例外 InvalidOperationException!
  49. 49. 実装サンプル(Alarm) Alarm・ReminderString name = System.Guid.NewGuid().ToString();Alarm alarm = new Alarm(name);alarm.Content = “コンテンツ”;alarm.RecurrenceType = [毎日|毎週|毎月|月末|毎年];alarm.Sound = new Uri(“音楽ファイル", UriKind.Relative);alarm.BeginTime = 開始時間;alarm.ExpirationTime = 期限;ScheduledActionService.Add(alarm);
  50. 50. 実装サンプル(Reminder) Alarm・ReminderString name = System.Guid.NewGuid().ToString();Reminder reminder = new Reminder(name);reminder.Title = “タイトル”;reminder.Content =“コンテンツ”;reminder.RecurrenceType = [毎日|毎週|毎月|月末|毎年];reminder.BeginTime = 開始時間;reminder.ExpirationTime = 期限;reminder.NavigationUri = ナビゲート先;ScheduledActionService.Add(reminder);
  51. 51. アーキテクチャ Alarm・Reminderフォアグラウンド システム 2.通知 Alarm Reminder アプリケーション ・ScheduledActionService 1.登録 Add(Alarm or Reminder) Remove(Alarm or Reminder) 3.必要がなくなったら削除
  52. 52. デバッグの方法 タスクが実行されるタイミングを待ってら れない! 指定した時間(今からの時間で指定)に実 行するLaunchForTestがあるScheduledActionService.LaunchForTest( task.Name, TimeSpan.FromSeconds(20));
  53. 53. 注意 ServiceにAddしたものは自分でRemoveし なければならない 制限が厳しいので制限に引っかかりそうな 処理には必ずtry-catchで例外を受け止める こと バックグラウンドの定義は WPAppManifest.xmlに記述してある
  54. 54. 気になるところ テスターはどうやってテストしてるんだろ う?30分待つの?たくさんタスクを登録 して例外が出るときのチェックはしてるの だろうか?
  55. 55. 参考 Windows Phone のバックグラウンド エージェントの概要 http://msdn.microsoft.com/ja-jp/library/hh202942(v=vs.92).aspx Windows Phone のバックグラウンド オーディオの概要 http://msdn.microsoft.com/ja-jp/library/hh394039(v=vs.92) Streaming Audio in Windows Phone http://msdn.microsoft.com/en-us/magazine/hh852599.aspx Windows Phone のバックグラウンド ファイル転送の概要 http://msdn.microsoft.com/ja-jp/library/hh202955(v=vs.92) Developing for 256-MB Devices http://msdn.microsoft.com/en-us/library/hh855081(v=vs.92) Windows Phone のアラームとリマインダーの概要 http://msdn.microsoft.com/ja-jp/library/hh202946(v=vs.92) Windows Phone のマルチタスキング http://msdn.microsoft.com/ja-jp/library/hh202866(v=vs.92).aspx Windows Phone のバックグラウンド エージェントのベスト プラクティス http://msdn.microsoft.com/ja-jp/library/hh202944(v=vs.92)
  56. 56. ご清聴ありがとうございました。
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×