My background task takes a long time to complete, and the OS is just killing it. I'm trying to sync my contacts online, here's what I'm doing:
Get all contacts from phonebook (takes ~1 second)
Upload them to a server (~2 seconds)
Retrieve all contacts from server (~2-3 seconds)
Delete all contacts from ContactStore(ContactStore.DeleteAsync sometimes takes 1 minute to complete)
Create a ContactStore and import all contacts )(~1-2 minutes for 1000 contacts)
I have ~100 contacts and it's working well, but I wanted to test with ~1000 contacts and it doesn't complete every time. I'm using a MaintenanceTrigger, but I think it's still too much for a background task, but I need a confirmation for this. MaintenanceTrigger tasks should be allowed to do more resource intensive tasks, so why is the OS killing my background task?
Take a look at this link: https://msdn.microsoft.com/en-us/library/windows/apps/hh202942(v=vs.105).aspx
Resource intensive tasks are constrained to a duration of 10 minutes.
The following constraints must be met before the task is started. If the device stop fulfilling these constraints the agent is terminated immediately.
Besides this there are also a memory cap of respectively 11mb and 20mb for low/high end devices.
From your description above the most likely scenario IMO is the memory cap being hit. Maybe this post can help you look into the memory usage of your background task: How to get memory available or used in C#
Key changes to memory limits starting in Windows Phone 8.1 include (found here):
Finally, my task got canceled with the reason ExecutionTimeExceeded, so this is the problem. It seems that trying to import ~1000 contacts in the ContactStore takes ~12 minutes, which is too long for a background task. I'll have to make the user to open the app and do the import. Thank you for your help.
erm... may be silly but...
"Background tasks that use a maintenance trigger run only when the system is connected to AC power." Taken from MSDN
Could it be plugged into the mains when it works?, and not plugged in when it doesn't work?
EDIT: Are you considering how busy the phone is when you try to 'sync' contacts? Are you forcing the app to allways run in the background via Battery Saver?
You could do something like this to see how busy your phone is... or it could be the battery saver halting your app if download size etc limits are reached...
Taken from here...
var result = await BackgroundExecutionManager.RequestAccessAsync();
if (result == BackgroundAccessStatus.Denied)
{
// Handle this if it is important for your app.
}
"If the result is denied the phone thinks it has too much background task active. In that case you can prompt your users to go the Battery saver application and force allow your app to run in the background even if the phone don´t want to..."
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