Disinformation Around Background Processes On iOS

My father got an iPhone 5 this past Christmas. I know he’ll enjoy using it.

How do I know this?

This is usually what happens when my wife and I go back to Jersey to visit my parents:

Me: [lays iPhone on kitchen counter]

Dad: [picks up my iPhone, starts messing with it]

Me: Dad, what are you doing?

Dad: Ha, I figured out your passcode, 1111.

Me: Congratulations, Dad.

Dad: [Continues to swipe and tap around, eventually puts it down]

Dad: Ha, neat stuff.

My dad’s an engineer so by his nature he’s a tinkerer. I know what you’re thinking and no, he hasn’t tried to take his iPhone apart to understand how it works. He knows a lot about computers and technology and he took the time a few weeks ago while I was on the phone with him to “enlighten” me on a “trick” he learned on his iPhone. I was intrigued.

Dad: So Mikey, you got your iPhone handy? Do this: Go to your Home screen. Okay? Now double-click the Home button. Ok, you see all those apps? Now tap and hold on one until they all start shaking. Now you can kill apps that are running in the background and draining your battery.

Mike: Dad, who the hell told you to do this?

Dad: The guys in my IT department recommended I install a task killer app on the Galaxy S3 they gave me. They said these task killer apps let you quit apps running in the background that are draining your battery. Once I discovered this [App Switcher] on my iPhone I figured it worked like the task killer app on my Galaxy.

Mike: No, no, no, Dad. No, you don’t need to do this on iOS. The operating system handles on this for you. And so began the re-education of my father on how background processes work on iOS. I explained to him the App Switcher tray can be thought of as a history of apps you’ve used. It’s not showing you everything running in the background. I explained to him, sure, he might only have 5 items total in his App Switcher, but I have over a dozen in mine. This does not mean over a dozen apps are running in the background on my iPhone.

He understood things after our conversation, but it makes me wonder how many other people are misinformed about how iOS handles resource management?

A few weeks after our conversation, he sent me this scan of a magazine my mother bought him called iPhone Life:

iPhone-Life-Mag-Jan-Feb-2013.gif It’s a bit hard to read, but #2 says:

Shut down background apps. Double-tap the home button to bring up the multitasking bar with the recently used apps. Tap and hold any app icon until it starts wiggling, then close it by tapping the little red button on the top left of the app icon. Sometimes these apps consume power even if they are not being used (especially Location Services).

Now this battery saving advice isn’t 100% false. Apps using Location Services can be a drain on your battery even if they’re not being used. For instance, I love the app Dark Sky. Its key feature is it can tell you, almost down to the minute, when it will start raining where you are. In order to be so accurate, it has to track your location via GPS, regardless of whether you’ve launched the app or not. This eats up some some system resources. Dark Sky is the exception though, not the norm.

Reading through Apple’s Developer site can shed some much-needed light on this whole background process issue. On the page titled, App States and Multitasking, Table 3-1 lists the five states an app can be in: Not Running, Inactive, Active, Background and Suspended.

Let’s look at what “Suspended” is:

The app is in the background but is not executing code. The system moves apps to this state automatically and does not notify them before doing so. While suspended, an app remains in memory but does not execute any code.

When a low-memory condition occurs, the system may purge suspended apps without notice to make more space for the foreground app.

Farther down the page, under the heading, Moving to the Background:

When the user presses the Home button, presses the Sleep/Wake button, or the system launches another app, the foreground app transitions to the inactive state and then to the background state. These transitions result in calls to the app delegate’s applicationWillResignActive: and applicationDidEnterBackground: methods, as shown in Figure 3-5. After returning from the applicationDidEnterBackground: method, most apps move to the suspended state shortly afterward. Apps that request specific background tasks (such as playing music) or that request a little extra execution time from the system may continue to run for a while longer.

To be clear: all apps immediately transition to the inactive state once a user presses the Home button, presses the Sleep/Wake button, or the system launches another app and then they move right to the suspended state unless they request specific background tasks.

This highlights one of the most important differences between “open” platforms like Android and curated ones like iOS. In addition to controlling background processes on iOS, Apple also requires every developer put their app through an approval process where Apple checks for things like unnecessary background processes or malicious, [back doors](http://en.wikipedia.org/wiki/Backdoor_(computing).

On Android, there are no approval processes if you decide to publish your app outside Google Play. If you want to make an Android app, you just do it. This sounds great, but it requires things like task killers to quit resource-hogging apps.

To me, this defeats the purpose of a smartphone.

What can Apple do to dispel the misconception that all the apps in your Task Switcher are running and draining your battery?

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax