Я опробовал различные варианты фоновой обработки (образцы xamarin, статьи в блогах xamarin, различные источники), но мне хотелось бы получить некоторые разъяснения о плюсах и минусах каждого из них, а также о том, устарели ли они или устарели.
В моем случае это приложение (wifi, на территории клиента), которое должно периодически запрашивать у сервера новые данные, или pu sh собирает данные на сервер, как только у него есть соединение (оно должно продолжать собирать данные, если соединение не установлено. доступно, но pu sh к серверу, как только он подключится).
Я хочу, чтобы этот syn c был в фоновом режиме для пользователя, который тем временем может продолжать работать. Я бы хотел, чтобы pu sh (при наличии данных) выполнялся каждые 1 или 2 минуты, чтобы я мог просто создавать задачу в фоновом режиме с бесконечным временем, которое проверяет каждые 1/2 минуты.
Я сделал несколько базовых c примеров для тестирования:
1) с помощью LongRunningTaskService: Service
2) с использованием Firebase.JobDispatcher
3) с использованием WorkManager (но запланированные задания не могут быть менее 15 минут)
4) глядя на Shiny, но в настоящее время возникают проблемы с интеграцией с Prism (но я думаю, я заставлю это работать) (но не понимаю, если это так какая обертка?)
Какое решение, по вашему мнению, подходит для моего варианта использования? Во всех 4 решениях данные должны передаваться, когда приложение находится на переднем плане или в фоновом режиме (верно?)
В случае, если мне нужно получить данные sh только тогда, когда приложение находится на переднем плане, будет ли это неправильно начинать задание в классе приложений?
ОБНОВЛЕНИЕ
Попробовал это в OnInitialized () приложения.cs:
Task.Factory.StartNew(async () =>
{
while (true)
{
await BackgroundTasks.TestPushDataRepeat();
await Task.Delay(60000);
}
}
, TaskCreationOptions.LongRunning);
Работает каждую минуту, когда приложение находится на переднем плане (и не заблокировать пользовательский интерфейс), но неожиданно работает также, когда приложение находится в фоновом режиме (в моем случае это лишний плюс). Не будучи сервисом, я подумал, что он должен был зависнуть, почему это так?
Я пытаюсь лучше понять / разделить, как TPL работает с Xamarin на Android и как Android backgrounding (services / работники et c) работает, чтобы увидеть, есть ли у этого решения недостатки.