WidgetKit小部件不允许每三秒刷新一次时间线



我创建了一个小部件,希望每三秒更新一次。

我有以下代码:

struct WidgetModel : TimelineEntry
{
var date: Date
var data: [Data]
}
func getTimeline(in context: Context, completion: @escaping (Timeline<WidgetModel>) -> Void)
{
let controller = DataController()
controller.refresh()

let nextRefresh = Calendar.current.date(byAdding: .second, value: 3, to: Date())!
let model = WidgetModel(date: nextRefresh, data: controller.data)

let timeline = Timeline(entries: [model], policy: .atEnd)

completion(timeline)
}

但是,这三秒将被忽略。模拟器总是显示下一次刷新将在五分钟后进行。我还试着用.after代替.atEnd,但没有任何效果。五分钟是最小值还是与模拟器有关?

WWDC Meet WidgetKit"小工具不是每秒一次的操作…"https://developer.apple.com/videos/play/wwdc2020-10028/?time=1099

WidgetKit的设计不会影响用户的设备性能。它通过最小化刷新和URLSession请求来实现这一点。苹果使用有关小工具使用和可见性的指标来决定允许您的应用程序进行多少处理。不支持基于秒的刷新。

您需要提前创建一个包含小部件所有视图的时间线。在苹果的WWDC视频中,他们建议你提前创建一整天的时间线。创建时间线后,您可以使用.atEnd或.After策略请求新的时间线。如果你的主应用程序发生了变化,你可以要求刷新时间线。

最新更新