Recently, I was trying to understand what happens when an iOS app goes into the background and then re-emerges later in various ways. It actually wasn’t as straightforward as I thought it would be. This may have already be documented somewhere, but it was a useful educational exercise nonetheless.
The driving reason for exploring the sequence was that I needed to suspend an NSTimer-based process when the app went into the background, and then start it back up when the app returned from suspended animation. Additionally, I needed to refresh a list from a web service when the app emerged, and the issue is that I needed to have it occur just once.
I needed to discover the events that occur and in what order when an app is active in the foreground and the following things happen:
- User presses Home button
- User Locks the device
I was also interested in seeing what happens when the reverse scenarios happen:
- User re-launches app when in background
- User unlocks the device
- Initial launch of the app
Turns out the sequence wasn’t quite what I was expecting — but it was very instructive. The following table illustrates my results. The numbers just indicate sequence of events (what happened first and second).
|Will Resign Active
|Did Become Active
|Did Enter Background
|Will Enter Foreground
|App in FG + Home Button
|App in FG + Lock
|App in BG + Relaunch
|App in FG + Unlock (after locking)
The good thing about creating this table is that it was very helpful in activating and deactivating the NSTimer-based process and also triggering the list refresh when the application submerged and then emerged.
Let me know if anyone is interested in code for this…