Hello Readers, CoolMonkTechie heartily welcomes you in this article.
In this article, we will learn about how to prepare UI to run in the background in iOS. We will discuss how to prepare our app to be suspended.
A famous quote about Learning is :
” You don’t understand anything until you learn it more than one way. “
So Let’s begin.
Apps move to the background state for many reasons. When the user exits a foreground app, that app moves to the background state briefly before UIKit suspends it. The system may also launch an app directly into the background state, or move a suspended app into the background, and give it time to perform important tasks.
When our app is in the background, it should do as little as possible, and preferably nothing. If our app was previously in the foreground, use the background transition to stop tasks and release any shared resources. If our app enters the background to process an important event, process the event and exit as quickly as possible.
All state transitions result in UIKit sending notifications to the appropriate delegate object:
- In iOS 13 and later—A
- In iOS 12 and earlier—The
We can support both types of delegate objects, but UIKit always uses scene delegate objects when they are available. UIKit notifies only the scene delegate associated with the specific scene that is entering the background.
Quiet App upon Deactivation
The system deactivates apps for several reasons. When the user exits the foreground app, the system deactivates that app immediately before moving it to the background. The system also deactivates apps when it needs to interrupt them temporarily—for example, to display system alerts. In the case of a system panel, the system reactivates the app when the user dismisses the panel.
During deactivation, UIKit calls one of the following methods of our app:
- For apps that support scenes—The
sceneWillResignActive(_:)method of the appropriate scene delegate object.
- For all other apps—The
applicationWillResignActive(_:)method of the app delegate object.
Use deactivation to preserve the user’s data and put our app in a quiet state by pausing all major work; specifically:
- Save user data to disk and close any open files.
- Suspend dispatch and operation queues.
- Don’t schedule any new tasks for execution.
- Invalidate any active timers.
- Pause gameplay automatically.
- Don’t commit any new Metal work to be processed.
- Don’t commit any new OpenGL commands.
Release Resources upon Entering the Background
When our app transitions to the background, release memory and free up any shared resources our app is holding. For an app transitioning from the foreground to the background, freeing up memory is especially important. The foreground has priority over memory and other system resources, and the system terminates background apps as needed to make those resources available. Even if our app wasn’t in the foreground, perform checks to ensure that it consumes as few resources as possible.
Upon entering the background, UIKit calls one of the following methods of our app:
- For apps that support scenes—The
sceneDidEnterBackground(_:)method of the appropriate scene delegate object.
- For all other apps—The
applicationDidEnterBackground(_:)method of the app delegate object.
During a background transition, perform as many of the following tasks as makes sense for our app:
- Discard any images or media that we read directly from files.
- Discard any large, in-memory objects that we can recreate or reload from disk.
- Release access to the camera and other shared hardware resources.
- Hide sensitive information (such as passwords) in our app’s user interface.
- Dismiss alerts and other temporary interfaces.
- Close connections to any shared system databases.
- Unregister from Bonjour services and close any listening sockets associated with them.
- Ensure that all Metal command buffers have been scheduled.
- Ensure that all OpenGL commands, we previously submitted have finished.
We don’t need to discard named images that we loaded from our app’s asset catalog. Similarly, we don’t need to release objects that adopt the
NSDiscardableContent protocol or that we manage using an
NSCache object. The system automatically handles the cleanup of those objects.
Make sure our app is not holding any shared system resources when it transitions to the background. If it continues accessing resources like the camera or a shared system database after transitioning to the background, the system terminates our app to free up that resource. If we use a system framework to access a resource, check the framework’s documentation for guidelines about what to do.
Prepare UI for the App Snapshot
After our app enters the background and our delegate method returns, UIKit takes a snapshot of our app’s current user interface. The system displays the resulting image in the app switcher. It also displays the image temporarily when bringing our app back to the foreground.
Our app’s UI must not contain any sensitive user information, such as passwords or credit card numbers. If our interface contains such information, remove it from our views when entering the background. Also, dismiss alerts, temporary interfaces, and system view controllers that obscure our app’s content. The snapshot represents our app’s interface and should be recognizable to users. When our app returns to the foreground, we can restore data and views as appropriate.
For apps that support state preservation and restoration, the system begins the preservation process shortly after our delegate method returns. Removing sensitive data also prevents that information from being saved in our app’s preservation archive.
Respond to Important Events in the Background
Apps don’t normally receive any extra execution time after they enter the background. However, UIKit does grant execution time to apps that support any of the following time-sensitive capabilities:
- Audio communication using AirPlay, or Picture in Picture video.
- Location-sensitive services for users.
- Voice over IP.
- Communication with an external accessory.
- Communication with Bluetooth LE accessories, or conversion of the device into a Bluetooth LE accessory.
- Regular updates from a server.
- Support for Apple Push Notification service (APNs).
Enable the Background Modes capability in Xcode if our app supports background features.
That’s all about in this article.
In this article, We understood how to prepare UI to run in the background in iOS. We also discussed how to prepare our app to be suspended.
Thanks for reading ! I hope you enjoyed and learned about UI Preparation concepts during background in iOS. Reading is one thing, but the only way to master it is to do it yourself.
Please follow and subscribe us on this blog and and support us in any way possible. Also like and share the article with others for spread valuable knowledge.
If you have any comments, questions, or think I missed something, feel free to leave them below in the comment box.
Thanks again Reading. HAPPY READING !!😊😊😊