What's the difference between Background App Refresh in iOS 7 and multitasking in iOS 6?

iOS 4 and greater supported multitasking for some specific use cases:

  • A program needing a limited amount of time to finish a task (such as uploading a file) and can be suspended after that. It would not be woken up until the user went back to the app.

  • Playing audible content to the user while in the background, such as Pandora.

  • Recording audio while in the background

  • Keeping the user informed of their location, such as a navigation app

  • VoIP apps like Skype

  • Newstand apps which update content occasionally

  • Communicating with plugged in accessories (added in iOS 5)

  • Apps which communicate with Bluetooth devices (added in iOS 6)

iOS 7 adds two additional use cases for multitasking.

  • A program can register that it wants to download small sets of information regularly. For example, it could download twitter updates regularly. This new API allows you to specify that you'd like to be woken up to download information every so often. For instance, a program could say it wants to download information after it's been asleep at least fifteen minutes. The system will then try to find a time where it can wake up as many apps at once to do their work. Minimizing the number of times the device wakes up will help it save battery.

  • A program can register to be woken to download content if it receives a remote notification. The idea is that it can download the content and be ready to display it if you go into the app.


I actually went to the WWDC session on this, so I have a little bit of insight on the subject. To my understanding, in iOS 7:

  • The app tells the system if it wants to use background app refresh.
  • If the app wants to use the feature, the system analyzes your usage patterns for that app (you open it every morning around 7, once an hour, on third Tuesdays, etc.),
  • After the system thinks it has your pattern for the app figured out, it gives the app an amount of time right before it thinks you are going to open the app.

When would this be useful? For apps with dynamic, updating content. For example:

  • Twitter
  • Facebook
  • A Stack Exchange app
  • A news app
  • An RSS reader
  • etc.

Bassically, any app with content that updates often would benefit from this feature.

As a user, it means that when you open an app after the system figures out your usage patterns, you are going to see very recent content - instead of content still cached from the last time you opened the app.

Also, developers love this feature - at one point, there were several developers around Tim Cook thanking him for such a feature, and trying to make sure that is wouldn't go away.