アプリの中断

先日書いた記事の補足。


microsoftのサイトによると、中断というのはosによるプロセス/スレッドのスケジューリングの対象外になることだそうだ。
プログラムからすれば時が止まるのと同義。
先日の記事に書いた、スレッドがフォアグラウンドとかバックグラウンドとか関係ない。
OnSuspendingを抜けるとすべてのスレッドがフリーズすることになるね。


microsoftのサイトによると、ほとんどのアプリではResumeの時にすることはないそうだが、ホントか?
中断した後、再開されずにそのまま終了されることもあることを考えると、ファイルやネットワークなどのI/O処理はOnSuspendingで後始末しなければいけないのでは?
そうすると再開した時にはそれらの準備が必要になる気がするんだが・・・
いつ強制終了されても良くて、再開の時はまた最初からやり直せば済むような処理なら何も気にしなくてもいいんだろうけど。
それともファイルハンドルとか開きっぱなしで終了しても問題ないんだろか?


OnSuspendingには制限があって、できれば2秒、長くても5秒以内に終わらなければハングアップとみなされて強制終了されてしまう。
バックグラウンドで時間のかかる処理をしているからといってそうそう待てはしない。
そうなるとバックグラウンドタスクに求められるのは、任意のタイミングで(アプリの終了も考慮した)中断、再開ができる仕組みということになるが、きっちり作りこむのは大変そうだ・・・


言わずもがなではあるが、UIスレッドで時間のかかる処理をしてはいけない。
確かButton.Clickなどのイベントハンドラは5秒以内に終わらなければそれはそれでハングアップとみなされる・・・はず。