Why cannot System Status run in the background like Facebook or other apps?
iOS doesn't provide a true background execution like any desktop operating system, but only specific-purpose background execution modes. The reason for this is battery saving so misbehaving apps won't discharge your device while running in the background.
The background execution modes are the following:
- audio—The app plays audible content to the user while in the background. (This content includes streaming audio or video content using AirPlay.)
- location—The app keeps users informed of their location, even while it is running in the background.
- voip—The app provides the ability for the user to make phone calls using an Internet connection.
- newsstand-content—The app is a Newsstand app that downloads and processes magazine or newspaper content in the background.
- external-accessory—The app works with a hardware accessory that needs to deliver updates on a regular schedule through the External Accessory framework.
- bluetooth-central—The app works with a Bluetooth accessory that needs to deliver updates on a regular schedule through the Core Bluetooth framework.
- bluetooth-peripheral—The app supports Bluetooth communication in peripheral mode through the Core Bluetooth framework.
- fetch - The app regularly downloads and processes small amounts of content from the network.
- remote-notification - The app’s response to a push notification includes optionally downloading content related to the notification. The purpose of downloading the content in the background is to incorporate it and be able to present it immediately when the user responds to the push notification.
If the location mode is used in a satellite-precision mode, the app is updated quite frequently with new location data and could perform some additional operations (like measuring CPU, memory, etc. in the case of System Status). The problem is that the battery usage really high in this mode so the battery would last for a few hours only. With less precise location updates the update is made only when e.g. cell towers are changed but again, this is not usable for System Status as people would probably not run between cell towers to get background app updates.
The only "true" all-time background execution mode is the "audio" one but Apple will reject any app which isn't an audio player and requests this mode. In the other modes, the app is suspended almost all the time and iOS wakes it up only on special occasions (the interval depends on the iOS state but can be something like 15 minutes or even more). After that, the app has only a few seconds after which it is suspended by iOS again.
This works fine for applications like Facebook or Twitter which update their content in the background this way but for applications like System Status, such a background execution is useless - it needs to monitor CPU, battery or memory every second, not every 15 minutes or when iOS decides it's time.