About multitasking and the iPhone
Tuesday, 21 July 2009
Over the weekend I read an article comparing Symbian, Android, Palm WebOS and the iPhone OS. Apart from some obvious mistakes it was an interesting read and it got me thinking about multitasking. The iPhone OS is not a true multitasking OS – at least that is what the article leads you to believe.
The iPhone does multitask
First of all I want to dispel the myth that the iPhone OS does not support multitasking. The origin of this common mistake is that Apple does not allow third party developers to use multitasking. That does not mean that the operating system does not support multitasking, it is just a limitation for third party applications. In fact many of the bundled apps multitask without any problems.
Take for example the e-mail app. It checks for e-mail even if it is not active. I can play games or browse the internet and still get mail. The same thing applies to the phone app. I can talk to somebody on the phone while looking up some data from an e-mail.
The iPhone is not a computer
Secondly I think to focus on multitasking as a feature for end users is misguided. A phone is not a computer and is used differently. The low level architecture may be very similar, but the workflow from an end-users perspective is very different. You don’t have multiple windows from multiple apps on a desktop. The screen is simply too small. Instead all the apps are full screen and don’t share any screen real estate with others. If we are talking about multitasking on a computer we are talking about something completely different then when we are talking about a phone.
To get a good workflow on a phone you simply need to have a good way to quickly switch between apps and you should be able to resume working in that app where you left off. Technically this does not require any real multitasking at all. It just requires fast loading times and some extra work for the developer to save and reload the state of the app.
I want to be able to write an e-mail, quickly look up something on the web, copy it, return to my e-mail and paste it. True multitasking allows this, but the iPhone will do it too. You can quickly switch between apps – by using the home button and launching the other app. And more importantly, if you leave your new e-mail and do something else, the next time you open your e-mail app, you are right back where you left off.
From a users perspective this is multitasking. The technical implementation is irrelevant. That is something the developers have to deal with.
But what about third party apps?
As I said before, Apple does not allow third party developers to use multitasking in their own apps. For most apps this is not an issue. They fit perfectly in a workflow where apps are running in sequence, and not simultaneously. For a seamless experience you only need to make sure they launch quickly, save their application state when the app quits and restores the state when the app launches again.
There are apps that do not fit in this workflow. Take for example an instant message app which needs to have a constant connection to a server. If you want an IM app to be really useful, you need to be able to quit the app, do something else and return to app in the same state. This isn’t really a big problem. The app could simply reconnect when it relaunches and fetch all the information you missed while you were away. I’m not saying this isn’t a nuisance for developers, all I am saying that for users the difference is not noticeable.
But what about letting you know a new instant message has arrived? Just like you want to know when a new e-mail or text message has arrived, you also want to know when the person you are chatting with has sent a new IM message. As a user I simply want the same workflow and I don’t really care about the actual implementation.
Apple allows third party developers to use Apple’s servers for sending push notifications. The server to which the app connects to can simply send a notification if an update is available. The notification is passed on to the iPhone and shown to the user. You can simply update the badge on the icon, just like Apple’s own applications or even show a dialog allowing users to quickly return to the IM app.
Push notifications are a perfect solution for most apps. It allows you to keep the workflow that users expect without relying on multitasking and keeping the connection to the server open.
I’m sure there are some apps that are simply not suitable for push notifications. In fact, the SSH client I use on my own iPhone is probably one of them. For those cases I’d like to see some individual exceptions to the “no multitasking” rule, but only as a last resort. If the workflow is just as good with push notifications I want to use push notifications over multitasking any time.
What is wrong with multitasking?
Nothing by definition, but your phone is quite different from that powerful computer you have on your desk. The phone is limited in processing power, has limited memory, is sometimes limited by a low bandwidth connection and most importantly running on a tiny battery that always seems to run out of power.
Not only would running multiple apps make your phone run more sluggish, you also increase your battery usage. If you don’t have to run multiple apps at the same time you can save on system resources. The same also applies to the network. If you have a couple of background apps constantly chatting to different servers in the background you have less bandwidth available for surfing and sending e-mail.
It all comes down to priorities. The user should always come first. The most important things are the workflow, speed and the battery usage. For most apps the workflow isn’t tied to any specific implementation of multitasking, which leaves us with speed and battery usage.
What is best for speed and battery usage…? No multitasking. And if developers have to jump through some additional hoops to preserve the workflow, so be it.