IOS – Apps not working properly in background

google-photosiosiphonemultitasking

I have an iPhone 5C with iOS 10, and I have several apps that are supposed to do things in the background – specifically I'm thinking of Google Photos, IFTTT, and Android Wear, although there are might be more that I haven't noticed yet – like FB Messenger, Allo, Duo, Skype, Life360, Hiya, etc…

For example, Google Photos is supposed to auto-backup my camera photos, IFTTT is supposed to perform actions on all newly created reminders and screenshots, and Android Wear is supposed to connect to my LG watch.

On my old Android phone, they just did their thing whether the app was running or not. On iPhone, apparently you have to open the apps, and just leave them running in the background for them to behave.

However, for each of the three I've listed, they seem to only work as expected for a limited time (no idea how much time), before they just stop working. For example, I'll add a reminder, take a photo, or take a screenshot, and the actions don't happen, even though IFTTT and Google Photos show that they are running if I flip through the open apps.

I select the IFTTT or Google Photos app the following day from the open apps list, and immediately the actions kick off. Same for my watch – it'll work for half a day or so, then suddenly refuses to connect until I switch to the Android Wear app on the phone, then it immediately connects.

Background App Refresh is enabled on all of these apps.

This question seems to indicate that these apps should work. If they weren't popular apps, I'd blame the apps themselves, but I doubt Google and IFTTT would leave this big a hole in their products.

Is there another setting I need to look at? Is there maybe some CPU or memory limitation that is blocking these apps that will be resolved with a newer more powerful phone?

Best Answer

Apps shown as "open" but that are not the foreground app are in the Suspended state (described below), with a couple of exceptions. So the apps you are seeing in the app switcher are generally not actively doing anything.

On a general level, these are the states an app can be in on iOS.

Not running: The app has not been launched or was running but was terminated by the system.

Inactive: The app is running in the foreground but is currently not receiving events. (It may be executing other code though.) An app usually stays in this state only briefly as it transitions to a different state.

Active: The app is running in the foreground and is receiving events. This is the normal mode for foreground apps.

Background: The app is in the background and executing code. Most apps enter this state briefly on their way to being suspended. However, an app that requests extra execution time may remain in this state for a period of time. In addition, an app being launched directly into the background enters this state instead of the inactive state. For information about how to execute code while in the background, see Background Execution.

Suspended: 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.

Background Execution is possible, as noted above, but only for specific use cases:

  • Apps that play audible content to the user while in the background, such as a music player app
  • Apps that record audio content while in the background
  • Apps that keep users informed of their location at all times, such as a navigation app
  • Apps that support Voice over Internet Protocol (VoIP)
  • Apps that need to download and process new content regularly
  • Apps that receive regular updates from external accessories

There is one other case, which is downloading in the background. This is a special case, though, because the app itself is still suspended and the download process is handed off to the system, in case the app has to be terminated by the system to reclaim resources.

Specifically with Google Photos, the app would need to be in the Active state, meaning phone unlocked and in the foreground, to find any photos that need to be uploaded. (After it has a list of them, it may be able to pass the actual uploads to the system for Background Execution, but I don't know if that's how it actually operates.)

For IFTTT, it likely has to be in the foreground to execute recipes that rely on iOS-specific things (i.e. Reminders). It might qualify for background execution under "Apps that keep users informed of their location at all times," but maybe not (even though it does have location-based triggers).

The Android Wear app should qualify under "Apps that receive regular updates" for background execution. Since it's working some of the time, it seems to be set up to do that. In the case of that app, I would guess it's being terminated by the system to reclaim resources.

A newer device with more resources would definitely not hurt the situation (especially for Android Wear, I bet), but some of this is just down to the way iOS operates in order to conserve system resources (and consequently, battery life).