Yes, I know if I wish my app to be responsive to users' multitasking actions, such as switch to another app, I should deal with
- (void)applicationWillResignActive:(UIApplication *)application - (void)applicationDidBecomeActive:(UIApplication *)application
What if my app is doing a quite-long time consuming operation (like downloading a big file) and the user causes my app to enter the background? Will that operation automatically be suspended and resumed when the user comes back to my app?
What exactly will happen behind the scene when my app enters the background or resumes in the foreground?
What if when users let my app go to the background my app's execution is just in the middle of a method?
For e.g., my app is doing
for (int i = 1 to 10000K) { do some calculation; }
When i== 500K, user switches to another app. What happens to the for-loop in my app?
It will be resumed when the application is brought back to the foreground. However, in the latter case you should still be prepared for your application to be terminated at any time while it's in the background by cleaning things up on your way to the background.
No, there is no specific time defined for this.
The answer is simply 600 seconds (10 minutes), reason is provided by the article above.
For iOS Devices If Background refresh is greyed out in the ON position, go To Settings App - > General - > Background App Refresh - > Turn on the option for the system, and then you can turn on / off by app.
From the iOS App Programming Guide:
Your app delegate’s
applicationDidEnterBackground:
method has approximately 5 seconds to finish any tasks and return. In practice, this method should return as quickly as possible. If the method does not return before time runs out, your app is killed and purged from memory. If you still need more time to perform tasks, call thebeginBackgroundTaskWithExpirationHandler:
method to request background execution time and then start any long-running tasks in a secondary thread. Regardless of whether you start any background tasks, theapplicationDidEnterBackground:
method must still exit within 5 seconds.
If the long-running operation you describe above is on the main thread and it takes longer than 5 seconds to finish after your application heads to the background, your application will be killed. The main thread will be blocked and you won't have a chance to return from -applicationDidEnterBackground:
in time.
If your task is running on a background thread (and it really should be, if it's taking long to execute), that thread appears to be paused if the application returns from -applicationDidEnterBackground:
(according to the discussion in this answer). It will be resumed when the application is brought back to the foreground.
However, in the latter case you should still be prepared for your application to be terminated at any time while it's in the background by cleaning things up on your way to the background.
If you are doing some operation which might consume time and you don't want to kill it then you can extend the time for your operation by executing in UIBackground Task i
{ UIBackgroundTaskIdentifier taskId = 0; taskId = [application beginBackgroundTaskWithExpirationHandler:^{ taskId = UIBackgroundTaskInvalid; }]; // Execute long process. This process will have 10 mins even if your app goes in background mode. }
The block argument called "handler" is what will happen when the background task expire (10min). Here is a link to the documentation
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With