If you're a computer software company right now, this is pretty much the only option you have. Sadly, the truth is, it's true, most people are morons who can barely get the wherewithal to remember to breathe regularly. This is fine for Apple if Apple's SDK provides a default method that tells the app to essentially "Save All State and Quit". I.e,. phone call comes in, OS tells app "That's it, time's up, save all and quit". By the time you've reacted as a user, the software has saved and quit, so it all appears seamless. Maybe the OS masks it all with a fancy Core Animation tween from the app to the next app ...
The next part is that the startup of the application checks the save state and reloads it, so that it appears to the user that nothing has changed.
On the other hand, my 512KB Amiga 500 back in the day multitasked multiple applications and laughed in your face (well, software got slower as you ran more). The vast majority of CPU cycles these days is used by media manipulation, XML manipulation and other things. Apple's issue is that media, etc, takes up loads of RAM, and that's what they don't have to spare in the iPhone. Far better the Quit App, Run Game (and get 100% performance), Quit Game, Run App and Reload State as if the app was never quit.
And I argue that is how all software should run, mobile or desktop (as regards the quit, save, restore behaviour, not having to quit when switching software, that would be silly on the desktop (unless you hadn't run it for a while, but the desktop will just page it out, which is the desktop option for this type of software). However some applications should be allowed to listen "Launch Listeners" that will listen for incoming information, then launch the application if required. These listeners should also be allowed to keep connections alive. However they should be small, and use a very small proportion of CPU, and the active task should be able to tell the OS how to treat these things - i.e,. QUEUE UNTIL I QUIT, or INTERRUPT ME. Or whatever.