2012年11月12日

Application does not run in backgroundについて

「ホームボタンを押してアプリを閉じたら再度ログイン画面から始まるようにしてほしい」
という要望があったので、プロジェクト設定の Application does not run in background を YES にしてアプリを作成しました。アプリ内でログイン画面に戻る遷移を作成するのが難しかったので、バックグラウンド動作をさせずにアプリを終了させることで、次回は必ずログイン画面が表示されることを期待したわけです。

ところが、電源ボタンを押してスリープモードに入った後、スリープを解除したときログイン画面が表示されず、前回の画面からそのまま使用できることがわかりました。電源ボタンを押したり、自動スリープ機能によってスリープモードに入るときは ApplicationWillResignActive が呼ばれることが分かりましたので、ここに exit(1); を入れて終了するようにしてみました。

※このアプリはAppStoreを通さずに、エンタープライズで配信されるアプリなのでAppleによる審査を受けないことになっています。AppStoreに登録するアプリでは状況が異なると思いますのでご注意ください。

すると、電源ボタンを押してスリープに入ったときはちゃんと終了されるようになりましたが、ホームボタンをダブルクリックでタスク切り替え画面を表示しようとするとアプリ画面がパッと消えてしまったり、5本指でアプリを閉じるときにアニメーションせずにパッと消えてしまうようになってしまいました。

そこで、スリープ時や終了時に呼び出される delegate を調べてみました。

[1]Application does not run in background = NO のとき(標準設定)

起動
didFinishLaunchingWithOptions → applicationDidBecomeActive

ホームボタンを押してバックグラウンドに入れる
applicationWillResignActive → applicationDidEnterBackground(2)

アイコンをタップ(再起動)
applicationWillEnterForeground → applicationDidBecomeActive

ホームダブルクリック
applicationWillResignActive

タスク選択から復帰
applicationDidBecomeActive

電源ボタンを押してロック
applicationWillResignActive → applicationDidEnterBackground(1)

ロックから復帰
applicationWillEnterForeground → applicationDidBecomeActive

5本指で閉じる
applicationWillResignActive → applicationDidEnterBackground

[2]Application does not run in background = YES の場合

起動
didFinishLaunchingWithOptions → applicationDidBecoemActive

ホームボタンを押してバックグラウンドに入れる
applicationDidEnterBackground(2) → applicationWillTerminate

アイコンをタップ(再起動)
didFinishLaunchingWithOptions → applicationDidBecomeActive

ホームボタンをダブルクリック
applicationWillResignAcgive

タスク選択から復帰
applicationDidBecomeActive

電源ボタンを押してロック
applicationWillResignActive

ロックから復帰
applicationDidBecomeActive

5本指で閉じる
applicationWillResignActive → applicationDidEnterBackground(2) → applicationWillTerminate
posted by はるこち at 13:14| Comment(0) | TrackBack(0) | iOSアプリ開発 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック

×

この広告は90日以上新しい記事の投稿がないブログに表示されております。