iOS アプリがバックグランドに遷移する際の処理方法
について勉強中です。
ドキュメントより学んだ2つの方法と、1つのアイディアを紹介します。
方法1 UIApplicationDelegateのメソッドで処理する
メリット: 一カ所で処理できる。 デメリット: 処理対象のオブジェクトをUIApplicationDelegateが知る必要になり、UIApplicationDelegateがするべき処理以外もしてしまいそう。
- バックグラウンド状態に移行時 UIApplicationDelegate applicationDidEnterBackground:メソッドにデータを保存する処理を実装する。
- フォアグラウンドへの復帰時 UIApplicationDelegate applicationWillEnterForeground:に復元処理を実装する。
方法2 NSNotificationCenterを利用する
メリット: 処理対象のオブジェクトのみで、処理が実装できる。 デメリット: 各々のオブジェクトでNotificationの登録、削除を行うので、全体としての管理が大変。
- バックグランド時 UIApplicationDidEnterBackgroundNotification
- 復帰時 UIApplicationWillEnterForegroundNotification
アイディア方法 StateChangeableというプロトコル
クラス図でのイメージはこんな感じ
StateChangeableというプロトコルで、applicationDidEnterBackground・ applicationWillEnterForegroundのメソッドを定義します。そして、状態遷移を処理したいオブジェクトで、このプロトコルを実装します。アクティブなStateChangeableオブジェクトをUIApplicationDelegateに登録し、実際にUIAppliationDelegateのapplicationDidEnterBackground・ applicationWillEnterForegroundが呼び出された際には、StateChangeableオブジェクトに処理を委譲という方法です。
公式ドキュメント iOS App Programming Guide App States and Multitaskingの整理
- (Required)アプリの状態遷移は適切に処理すること。Managing App State Changes
- (Required)バックグランド状態に移ったら、適切に処理すること。Being a Responsible Background App
- (Recommendation)システムの状態変化を受けるようにNotificationを登録する。Processing Queued Notifications at Wakeup Time
- (Optional)バックグラウンドでも動作するには。Background Execution and Multitasking
Managing App State Changes
アプリの状態の説明と状態遷移が記載されている。
- background状態は、メモリの状態が維持される。設定されていれば、指定時間background状態を維持する。設定されていなければ、即suspended状態に遷移する?
- suspended状態は、デバイスのメモリが不足した場合、アプリのメモリを解放して、not runnning状態に遷移する。
- 起動時の状態遷移とコールバックメソッドの関係
- バックグラウンド時の状態遷移とコールバックメソッドの関係
- 電話呼び出しやAlertのコールバックについて
- Interruptが発生したときにすること
- backgroundに移行したとき
- バックがラウンド時のイメージを準備する?
- データを保存する
- 可能ならメモリを解放する
- 復帰時