How iOS Multitasking Really Works

There’s been some heated discussion in the blogosphere about the misconception of the iOS multitasking bar. Most iOS users are under the impression that apps can drain battery life and hog system resources when left in the multitasking bar, but a developer by the name of Fraser Speirs has attempted to clear the air.

You don’t need to manually manage the iOS multitasking bar because the apps you see after double tapping the Home button are not actually “running.” In fact, it’s better to think of the multitasking bar as something like a browser history, not a task manager.

In his blog post, Speirs comments on the fact that Apple Store Geniuses have helped spread misinformation about the iOS multitasking bar for a long time. I’ve personally been told by Geniuses that I should remove apps from my iPhone’s multitasking bar to free up system resources and conserve battery life. This advice couldn’t be farther from the truth. The multitasking bar is nothing more than a glorified reference tool for the user to switch between recently-opened apps.

The proof is that you can reboot your iPhone and still have all of your recently-opened apps in the multitasking bar. There have been jailbreak tweaks that attempt to only show you the apps that are truly running in the background, but the typical user should never have to worry about such a thing.

For the most part, you should never have to touch your multitasking bar. When you press the Home button and leave an app, that app is basically put to bed. 9 times out of 10, any closed app will not continue to sit in the background draining the life out of your iOS device. There are, however, a few exceptions.

It’s helpful to categorize the different ways that iOS handles its apps. Speirs has done that for us:

  • Not running – the app has been terminated or has not been launched.
  • Inactive – the app is in the foreground but not receiving events (for example, the user has locked the device with the app active)
  • Active – the normal state of “in use” for an app
  • Background – the app is no longer on-screen but is still executing code
  • Suspended – the app is still resident in memory but is not executing code

There’s really no point in making this more complicated than it has to be, so I’ll get to the point. According to Speirs, Inactive and Active aren’t part of this discussion at all. I’m guessing that this because an Active app is all but frozen when your lock your iOS device. Whatever the reason, moving on.

Technically, all apps get only 5 seconds in the Background state. This is when you exit an app with the Home button. iOS gives each app a very limited window to clean itself up before it’s moved to the Suspended state. From there, a Suspended app remains in the device’s onboard memory so that it can be quickly launched again (sort of like how Mac OS X Lion handles apps now). Contrary to popular belief, the Suspended state does not use your device’s system resources or battery life. If there are too many apps in the Suspended state, iOS is smart enough to purge unnecessary suspensions and move apps to the “Not running” state.

Where it gets tricky is when apps request special permissions to run in the Background state for 10 minutes instead of 5 seconds. Speirs uses Instacast as an example. Instacast can tell iOS that downloading podcasts is a “background task,” meaning that iOS gives Instacast an extra 10 minutes to finish its download in the background. Once that 10 minutes is up, the app is forced into the Suspended state.

There are certain apps, like Mail, that will continue to run in the background. Audio, GPS, VoIP, Newsstand, and accessory/peripheral apps will all run in the background until they complete their task. From personal experience, Mail can be one of the biggest iOS system hogs. The app is continually fetching new emails for you, and each call out requires battery and CPU cycles. Unfortunately, the only way to make sure that Mail is having a minimal impact on your battery is to kill the app altogether when you’re not using it i. You can set Mail to only fetch email sporadically (every few hours, etc.), but for most people that defeats the purpose of having an email client on a smartphone. You want your email as soon as possible.

An excellent, third-party example of such a circumstance is the early days of the Skype iOS app. When it was first introduced, Skype’s app would single-handedly drain battery life into oblivion. After many updates, Skype’s app is now smart enough to handle itself pretty well.

All apps that require constant background activity to function properly (Maps, for example) should be written well enough to know when to stop using your device’s resources. Once Instacast finishes playing a podcast in the background, it should move itself to the Suspended state. The only time you should ever have to actually kill an app in the multitasking bar is when an app is not behaving properly. And when that does happen it’s the app’s fault, not iOS’s.

Bottom line: If you try to manually manage your iOS multitasking bar, you’re wasting your time. If Apple Store employees try to tell you otherwise, kindly correct them.