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