2017-01-30 41 views
4

我想知道远程设备调用的后台任务的局限性。我在微软文档中发现的所有内容都是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操作关闭)

我Toast通知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; 
     } 

然后我创建一个连接并发送了一些数据从这个后台任务从另一个设备(使用罗马APIs)

这一次,它没有停止30秒之前。我的循环是100迭代,我得到了敬酒指示后台任务没有停止,是能够运行〜500秒

但是,这是我的循环,它可能还有一个更长的循环更持续更多的

这是预期的行为?从远程设备调用的AppService后台任务的确切限制是什么?

更新:似乎远程应用程序(谁调用此后台任务)需要保持打开状态。 (可能是因为连接对象应该保持活着?)。如果关闭它,后台应用程序服务将在几秒钟后终止。

回答

5

这是预期的行为?从远程设备调用的AppService后台任务的确切限制是什么?

是的。应用服务的生命周期很长。它不限于30秒。如果调用的应用程序被暂停,应用程序赞助的应用程序服务将被终止。它也没有内存限制,但如果机器资源本身不足,可能会导致启动失败或服务终止。

你可以得到从视频更多细节Channel9的:App-to-App Communication: Building a Web of Apps

App-to-App Communication

+0

所以在手机上的应用程序服务将保留没有时间限制的开放,只要从PC调用者的应用程序保持打开状态,对不对? (除非电话因资源不足而终止服务) –

+0

@MahdiGhiasi是的。 –