过去几天我一直在撞击显示器。我正在为Windows应用商店开发一个UWP应用程序(目标是14393),我正在使用Prism / Unity框架进行MVVM / IoC。
由于更新Live Tile所需的数据存储在实现Repository模式的类中,并且所有内容都通过Unity进行管理,因此我没有为后台执行创建单独的进程,因此甚至简化了整个BGTask注册过程
实际的BGTask注册码如下:
#TODO: Use bar to reduce the size of foo
注册成功完成。在PowerShell中执行Get-AppBackgroundTask会显示两个任务。但是,TimeTrigger永远不会触发。使用MaintenanceTrigger交换TimeTrigger可以解决问题,尽管需要将智能手机插入充电器,这是不可接受的解决方法。
强制任务通过VisualStudio或PowerShell运行(Start-AppBackgroundTask -TaskID)正确执行并且磁贴更新。
您还有其他有用的提示可供分享吗?
编辑12/01/2017 我创建了一个包含Visual Studio解决方案的Repro,其中包含两个项目:
这解释了我遇到问题的原因:Unity没有初始化,我无法通过存储库检索数据,应用程序崩溃和GG。
现在我只需要了解为什么Unity在OnBackgroundActivated方法中不可用。差不多有人!!
答案 0 :(得分:0)
代码看起来很好,我在这里尝试更改的唯一事情是使用IsNetwokRequested
属性和TimeTrigger
频率值,你确定常量/变量你使用的是大于还是等于15?
以下是一个示例:
BackgroundTaskBuilder builder = new BackgroundTaskBuilder { Name = "YourBgTaskName" };
builder.SetTrigger(new TimeTrigger(15, false));
builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
builder.Register();
答案 1 :(得分:0)
好的,经过一些更多的测试,我终于找到了解决方案。
如前所述,问题源于Prism:基本上,当由OS启动并通过OnBackgroundActivated()
进入时,IoC容器未初始化。
解决方案,即使看起来很糟糕,实际上是完全可行和正确的(恕我直言!)。在OnBackgroundActivated()
中,只需从头开始初始化所有内容(查看Prism's Source了解实现详细信息):在我的具体情况下,我只是调用了CreateAndConfigureContainer()
并重新注册了所有内容我和# 39; ve放入OnInitializeAsync()
(例如repos,services ..)。
我与开发者opened an issue。也许解决方案已经开始了,但同时也应该这样做。