I am using DispatchQueue.global(qos: .background).async and DispatchQueue.main.async for firebase token updation. But I feel like the code block written inside DispatchQueue.global(qos: .background).async and DispatchQueue.main.async is not getting executed. What are the best practices for running in background by making sure that the code block gets executed even if app is in background or foreground for a longer period of time or if the device kills the application.
Will DispatchQueue.global(qos: .background).async and DispatchQueue.main.async get cancelled when in background or foreground?
196 Views Asked by Aswin Rathees At
1
There are 1 best solutions below
Related Questions in IOS
- URLSession requesting JSON array from server not working
- Incorrect display of LinearGradientBrush in IOS
- Module not found when building flutter app for IOS
- How to share metadata of an audio url file to a WhatsApp conversation with friends
- Occasional crash at NSURLSessionDataTask dataTaskWithRequest:completionHandler:
- Expo Deep linking on iOS is not working (because of Google sign-in?)
- On iOS, the keyboard does not offer a 6-character SMS code
- Hi, there is an error happened when I build my flutter app, after I'm installing firebase packages occurs that error
- The copy/paste functionalities don't work only on iOS in the Flutter app
- Hide LiveActivityIntent Button from Shortcuts App
- While Running Github Actions Pipeline: No Signing Certificate "iOS Development" found: No "iOS Development" signing certificate matching team ID
- Actionable notification api call not working in background
- Accessibility : Full keyboard access with scroll view in swiftui
- There is a problem with the request entity - You are not allowed to create 'iOS' profile with App ID 'XXXX'
- I am getting "binding has not yet been initialized" error when trying to connect firebase with flutter
Related Questions in SWIFT
- Navigate after logged in with webservice
- URLSession requesting JSON array from server not working
- When using onDrag in SwiftUI on Mac how can I detect when the dragged object has been released anywhere?
- Protect OpenAI key using Firebase function
- How to correct error: "Cannot convert value of type 'MyType.Type' to expected argument type 'Binding<MyType>'"?
- How to share metadata of an audio url file to a WhatsApp conversation with friends
- Using @Bindable with a Observable type in SwiftUI
- How to make a scroll view of 9 images in a forEach loop open on image 6 if image 6 is clicked on from a grid?
- Using MTLPixelFormat.rgba16Float results in random round-off errors
- Search and highlight text of current text in PDFKit Swift
- How is passing a function as a parameter related to escaping autoclosure?
- Actionable notification api call not working in background
- Custom layout occupies all horizontal space
- Is it possible to fix slow CKAsset loading on Cloudkit?
- Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value - MapView.isMyLocationEnabled
Related Questions in GRAND-CENTRAL-DISPATCH
- `assumeIsolated(_:)` fails with DispatchSerialQueue as custom Executor in Actor
- What is the expected behavior if I write the same variable on different DispatchQueue?
- Retrieving data via fetching & websocket... into a single data source. Should I use a serial queue to ensure non-garbage data?
- Change completion for async Task which is "in-progress" (Swift Concurrency)?
- Convert code with GCD to async/await in Swift?
- if self in dispatch_source_set_event_handler need to be weak
- How to stop ongoing dispatch group execution and start new one?
- Exit command line Network.framework app that uses dispatch_main()
- Will DispatchQueue.global(qos: .background).async and DispatchQueue.main.async get cancelled when in background or foreground?
- Proper use of strongSelf / weakSelf in nested dispatch_after blocks
- Does a dispatch group block the main thread in iOS?
- What could cause different output for the same code?
- UITableViewCell image from url is wrong at first load
- What is the difference between these DispatchTime calculations?
- I need to wait for a bunch of network APIs to complete. How do I do that?
Related Questions in DISPATCH-QUEUE
- Why the second doesn't start before the first task is finished? (Concurrent Queue)
- SDWebImage Updates Only First Iteration Even Though Image is Properly Cached
- How to do something on a delay after a button press in Swift but, postpone the delay each time the button is pressed?
- Xcode warning for call to DispatchQueue.main.sync: Call to method 'asd' in closure requires explicit use of 'self' to make capture semantics explicit
- Will DispatchQueue.global(qos: .background).async and DispatchQueue.main.async get cancelled when in background or foreground?
- Why is it "risky" to dispatch work asynchronously on the main thread in SpriteKit?
- CheckIfLocationServicesIsEnabled (Purple Warning) iOS 17.0
- Why can DispatchQueue.main.async be used as an input source for RunLoop.current.run?
- Why is this Swift Readers-Writers code causing deadlock?
- What is the difference between DispatchQueue.global().sync vs main thread
- Wrap async task into DispatchWorkItem in Swift to make it cancellable?
- Swift serial DispatchQueue not executing serially
- Getting error message: “Extra trailing closure passed in call” Swift
- How to cancel all DispatchQueue operations in Swift?
- how to use a construct await sync inside a closure
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
You said:
I would suggest that you introduce some logging to eliminate any ambiguity. Do some tests to confirm whether this code is actually getting reached or not.
Note, when testing background execution, do not do this from the Xcode debugger (as that alters the lifecycle of an app), but rather launch the app independent of the Xcode debugger and observe these logging statements from the macOS Console app.
You can use
Loggerand watch from your macOS Console app (as discussed in WWDC 2020 video Explore logging in Swift).You can request a little more execution time should the user leave the app. See Choosing Background Strategies for Your App, notably the Continue Foreground Work in the Background section. That handles the use-case of a user leaving your app.
Basically, by calling
beginBackgroundTask(withName:expirationHandler:), should the user happen to leave the app, you are requesting that the OS give you a little extra time to complete execution of some task before the app is suspended and execution stops. When you callendBackgroundTask(_:)when your asynchronous work is done, that tells the OS that you are done with your background execution, and the OS should feel free to suspend the app as appropriate. This mechanism only gives you 30 seconds, or so, but it is enough for most asynchronous tasks such as this.This part of the question makes no sense to me: If the app is running in the foreground, then it is just running, and of course anything dispatched via GCD should have a chance to execute. If your dispatched code is really not running, then it must be deadlocked or the like. So, again, confirm whether it ever reaches this dispatched code or not.
If the user force-quits the app, that kills everything. The app is terminated and no execution can proceed.