【发布时间】:2017-04-25 16:43:12
【问题描述】:
我目前正在完成活动本身的所有工作,但这似乎不是首选方式,因为在几分钟不活动后代码不会在手机上执行。事件声明如下:
public PlaybackModel()
{
...
queue.CurrentItemChanged += async (o, ea) =>
{
var res = ScrobbleHelper.TrySend(ea.OldItem);
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.High, () =>
{
var bg = App.Ref.IsBackground;
currentItem = o.CurrentItem;
});
};
...
}
此事件似乎有 5 种可能的结果:
- 当应用在前台时,scrobble 可以正常工作;
- 当应用在后台运行且屏幕打开(用户正在执行其他操作)时,scrobble 可以正常工作;
- 最近关闭屏幕时(当关闭屏幕后不久发送请求时),scrobble 工作正常
- scrobble 无法发送,因此它会在屏幕关闭超过一分钟时被缓存(似乎互联网连接被切断,因此 scrobble 被缓存在本地);
- 如果屏幕长时间关闭,代码根本不会执行。
考虑到这一点,我正在考虑使用带有ApplicationTrigger 的进程内后台任务来调用scrobbler,但我不确定我该怎么做。
一方面,这是唯一可以在没有应用程序在前台运行的情况下执行代码的事情,但另一方面,如果代码本身没有被事件处理程序调用,我不确定任务是否会被触发。
UWP 的任何其他 API 或功能可以在这种情况下提供帮助吗?如果没有,我该如何执行后台任务以达到最大效率?
谢谢!
【问题讨论】:
-
首先触发事件的是什么?想知道是否有任何背景触发器适用于您的场景。这样,您的应用程序可以正常挂起,并且系统会在触发器触发时唤醒您的代码。 docs.microsoft.com/en-us/uwp/api/…
-
此事件由this Microsoft API 触发。我正在使用 MediaPlayer 类来播放音乐。我如何调用这些背景触发器,从哪里以及如何将所有内容联系在一起?
标签: c# .net background event-handling uwp