UWP中远程应用程序服务后台任务的局限性

5
我想知道远程设备调用的后台任务有哪些限制。在微软的文档中,我只找到了一个通用的后台任务限制,即30秒。

但是我的简单测试表明,当从另一个设备调用应用服务时,并非如此。(我不确定普通的应用服务是否也是如此。我没有在我的测试中包含它们)

这是我的测试方法:

我将这个代码放在一个应用程序的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));
            }

(我得到了延迟,因此任务不会因等待操作而意外关闭)
我收到了20-25秒的烤面包通知,之后什么也没有。因此,在30秒之前,该进程被终止,这符合官方文档。
然后,我将完全相同的代码放在AppServiceConnectionRequestReceived事件中,并将此代码放在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;
        }

然后,我创建了一个连接,并从另一个设备(使用 Rome APIs)向此后台任务发送了一些数据。

这一次,它没有在 30 秒内停止。我的循环是 100 次迭代,我收到了弹窗提示,表明后台任务没有停止,并能够运行约 500 秒

但这只是我的循环,如果有更长的循环,它也可能继续运行得更久

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

更新:看来必须让远程应用程序(调用此后台任务的应用程序)保持打开状态。(可能是因为连接对象必须保持活动状态?)如果我关闭它,后台应用服务将在几秒钟后终止。

1个回答

6
这是预期的行为吗?从远程设备调用AppService后的确切限制是什么?
是的,应用程序服务具有长生命周期,不限于30秒。如果调用应用程序被挂起,则由应用程序赞助的应用程序服务将被终止。它还没有内存限制,但如果机器本身的资源不足,可能会导致启动失败或服务终止。
您可以从channel9上的视频中获取更多详细信息:应用程序间通信:构建一系列应用程序 应用程序间通信

只要PC上的呼叫者应用程序保持打开状态,手机上的应用服务就会一直开放,没有时间限制,对吗?(除非手机因资源不足而终止服务) - Mahdi Ghiasi
@MahdiGhiasi 是的。 - Xie Steven
你们知道为什么我的连接只能持续25-30秒吗?https://dev59.com/t2wUookBPGXWitrZkx21?noredirect=1&lq=1 - Miguel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接