アプリ認定キットに悪戦苦闘 - 事前起動、SuspendingとResumingイベント処理 ― 2016年01月21日 09:21
UWPアプリのテストをひととおり終え、アプリ認定キットを実施、で、嵌まる。

事前起動テストの失敗、と、クラッシュの発生?さて、何が悪い?
アプリの事前起動は、アプリをすぐに使えるように、事前にバックグラウンドで起動しておくもの。そのままでは、App.xaml.csのOnLaunchedから、MainPageのOnNavigatedToまで進み、作り込んだ初期化処理が実行されてしまう。バックグラウンドを想定していない初期化処理があれば、そこでエラーになる。
追っかけていないが、サウンドの処理か、音声認識の処理か、リソースにアクセスする処理か、そのあたりが怪しい。とりあえず、e.PrelaunchedActivatedの状態を調べて、事前起動の際は、初期化処理に進まないようにOnLaunchedの処理を切り上げることで対処。
※アプリの事前起動の説明はこちら。
これで、事前起動のエラーはなくなったが、クラッシュは消えない。ダンプファイルをVSで読み込んで確認すると、0xC000027Bの内部例外が起きている。この例外は厄介そう。
※0xC000027Bの内部例外について
MainPageにSuspendingとResumingのイベントハンドラ(図の赤枠)を追加する前に実行したアプリ認定キットの実施では、エラーが出ていなかったことから、この線で調べてみる。
イベントハンドラを追加したのは、mobile端末で、アプリ実行中にスタートボタンを押してアプリをバックグラウンドに追い出し、復帰させたとき、音声認識が利用できなくなることに対処しようとしたため。いったん、Suspendingで音声認識のリソースを解放し、Resumingで再初期化する。
音声認識まわりで、try...catchの不備を見ていくが、問題なさそう。バックグラウンドでのUI操作が怪しいとみて、UI操作とそれ以外のコードが未分離の部分の整理を進める。結果、別にUI操作は禁止というわけでもない様子。最後に残ったのは、x:Uidで定義した文字列をResourceLoaderで拾ってくる部分。ここの呼び出しを、Resumingのイベントハンドラからは抑止することで、クラッシュを解消。
この手のエラーは、VisualStudioからのデバッグ実行では、引っかからないので難儀。アプリ認証テストを20回近く繰り返す羽目に。おかげでバックグラウンドまわりの経験値は少しばかり向上したかも。ほかにも細かな不具合を見つけることができたのでよしとする。
コメント
トラックバック
このエントリのトラックバックURL: http://c5d5e5.asablo.jp/blog/2016/01/21/7997153/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。