2007年12月31日月曜日

iPhone/iPod touchのサスペンド/レジュームイベント

iPod touchにはサスペンド機能がある。アプリケーションが動いている時にサスペンドすると、動作中のアプリケーションはそのまま動き続ける。アプリケー ションによってはサスペンド中に動き続けるのは無駄なので、サスペンドしている間だけそのアプリケーションを止めるようにしてみた。


サスペンドする直前には、
-[UIApplication applicationWillSuspend]

が呼ばれる。サスペンドの直前に呼ばれるメソッドがあるならサスペンドから復帰した直後に呼ばれるメソッドもあるはず、と思ってUIApplication.hを見てみた。それっぽいのを探していると、
-[UIApplication applicationDidResume]

と いうイベントを発見。さっそく-[UIApplication applicationWillSuspend]でアプリを止めて、-[UIApplication applicationDidResume]で再開するコードを書いてみた。ところが、なぜか-[UIApplication applicationDidResume]が呼ばれない。

理由が分からないので、他に同じようなメソッドはないかとUIApplication.hを探してみると、すぐ近くに
-[UIApplication applicationDidResumeFromUnderLock]

というイベントがあった。
-[UIApplication applicationDidResume]の代わりにこちらを使うと、今度はちゃんと動作。sloginしてtopコマンドで見てみると、ちゃんとサスペンド中はアプリケーションのCPU使用率が0.0%になっていた。すばらしい。


まとめ:

-[UIApplication applicationWillSuspend]
-[UIApplication applicationDidResumeFromUnderLock]を使うことで、
サスペンド中のアプリケーションの挙動を制御できる。

-[UIApplication applicationDidResume]
-[UIApplication applicationDidResumeFromUnderLock]の違いは何?
設定でロックをかけているかどうかで呼ばれるメソッドが異なるのだろうか?
試してみよう。

0 件のコメント: