On iOS, it depends. iOS schedules jobs to run when the user generally is about to use your app. It is a pre-emptive task. On Android, roughly every 15mins unless Doze is enabled, but can take several hours before it starts running the first time. Doze will look at things like battery and time of day similar to how iOS does things.