2017-01-30 10 views
4

Мне было интересно, каковы ограничения фоновой задачи, вызываемые удаленным устройством. Все, что я нашел в документации 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, вызываемых с удаленного устройства?

Обновление: похоже, это необходимо для удаленных приложений (кто звонит в эту фоновое задание), чтобы оставаться открытым. (возможно, потому, что объект соединения должен оставаться в живых?). Если я закрою его, служба фонового приложения будет прекращена через несколько секунд.

ответ

5

Это ожидаемое поведение? Каково точное ограничение фоновых задач AppService, вызываемых с удаленного устройства?

Да. Служба приложений имеет длительный жизненный цикл. Он не ограничивается 30 секундами. Если вызывающее приложение приостановлено, приложения, спонсируемые приложением, будут прекращены. Он также не имеет предела памяти, но если ресурсов самого устройства недостаточно, это может привести к сбою в запуске или прекращению обслуживания.

Вы можете получить более подробную информацию из видео на Channel9: App-to-App Communication: Building a Web of Apps

App-to-App Communication

+0

Так приложение служба по телефону будет оставаться открытой без ограничения времени до тех пор, как приложение вызывающего абонента с ПК остается открытым, не так ли? (За исключением случаев, когда телефон прекращает услугу за недостаточные ресурсы) –

+0

@MahdiGhiasi Да. –