先日の記事(Application does not run in backgroundについて)の内容を図にしました。
Application does not run in background を YES にすると、大まかに言って2つの違いがあるようです。
(1)閉じるとバックグラウンドに入らずTerminateされる(5本指ジェスチャーで閉じるのも同じ)
バックグラウンドでの実行を禁止しているので、想像通りの挙動です。
(2)ロック状態になると非アクティブになるだけ
この点について把握していなかったので今回苦労してしまいました。
ホームボタンを押したらアプリが終了するという挙動にしたかったので、Application does not run in background を YES にしていましたが、そのためスリープボタンを押してロックされたことの検出ができなくなっていました。
Application does not run in background が NO(標準設定)の場合は、ロックされるとバックグラウンドに入り(applicationDidEnterBackgroundが呼ばれ)、しかも[UIApplication sharedApplication].applicationState が UIApplicationStateInactive になります。
しかし、YES になっているとバックグラウンドに入らないため applicationDidEnterBackground が呼ばれず、applicationWillResignActive が呼ばれるだけです。そのため、ホームボタンダブルクリックのタスク切り替えと見分けがつきません。
このあたりについて調べた結果を、図にしました。
左側が Application does not run in background = NO(標準設定)の場合、右側が YES の場合です。
起動
ホームボタンを押してバックグラウンドに入れる
アイコンをタップ(再起動)
ホームをダブルクリックしてタスク選択を表示
タスク選択から復帰
電源ボタンを押してロック
ロックから復帰
5本指で閉じる
カテゴリー: アプリ開発(iOS/Android)
0件のコメント