Мне было интересно, каковы ограничения фоновой задачи, вызываемые удаленным устройством. Все, что я нашел в документации Microsoft, было общим ограничением фоновой задачи, которая составляет 30 секунд.Ограничения фоновой задачи службы удаленного приложения в UWP
Но мой простой тест показывает, что это не так для приложения службы вызывается из другого устройства. (Я не уверен, о регулярных услугах приложений, хотя я не включил их в моем тесте.)
Вот мой метод тестирования:
Я ставлю этот код OnBackgroundActivated
из приложения и зарегистрировал TimeTrigger
фоновую задачу в ,
for (int i = 0; i < 100; i++)
{
Common.ToastFunctions.SendToast((i * 5).ToString() + " seconds");
await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(5));
}
(И я получил отсрочку, так задача не будет получать неожиданно закрыт из-за await
операций)
Я получил уведомление тоста за 20-25 секунд и ничего после этого. Таким образом, процесс был убит до 30 секунд, что соответствует официальной документации.
Тогда я положил тот же код в RequestReceived
случае моей AppServiceConnection
, и этот код в OnBackgroundActivated
(который в основном устанавливает RequestReceived
событие и получает отсрочку:
this._backgroundTaskDeferral = args.TaskInstance.GetDeferral();
args.TaskInstance.Canceled += OnTaskCanceled;
var details = args.TaskInstance.TriggerDetails as AppServiceTriggerDetails;
if (details?.Name == "com.ganjine") //Remote Activation
{
_appServiceconnection = details.AppServiceConnection;
_appServiceconnection.RequestReceived += OnRequestReceived;
_appServiceconnection.ServiceClosed += AppServiceconnection_ServiceClosed;
}
Затем я создал соединение и послал данные в эту фоновую задачу с другого устройства (с использованием API Рима)
На этот раз это не остановилось до 30 секунд. Моя петля была 100
итераций, и я получил тосты, указывающие, что фоновая задача не остановилась и была возможность запускать ~ 500 секунд.
Но это была моя петля, она могла бы также иметь еще больше с более длинным циклом.
Это ожидаемое поведение? Каково точное ограничение фоновых задач AppService, вызываемых с удаленного устройства?
Обновление: похоже, это необходимо для удаленных приложений (кто звонит в эту фоновое задание), чтобы оставаться открытым. (возможно, потому, что объект соединения должен оставаться в живых?). Если я закрою его, служба фонового приложения будет прекращена через несколько секунд.
Так приложение служба по телефону будет оставаться открытой без ограничения времени до тех пор, как приложение вызывающего абонента с ПК остается открытым, не так ли? (За исключением случаев, когда телефон прекращает услугу за недостаточные ресурсы) –
@MahdiGhiasi Да. –