我对iOS widget刷新机制做了一些研究:
\n阅读苹果开发人员文档,我了解到小部件刷新是由 WidgetKit 预算控制的。正如它所说:
\n\n\n对于用户经常查看的小部件,每日预算通常包括 40 到 70 次刷新
\n
但在以下情况下,重新加载不会计入 widget\xe2\x80\x99s 预算:
\nWidgetCenter.shared.reloadTimelines包含应用程序来刷新小部件同一个医生说:
\n\n\n在上面的游戏小部件示例中,如果应用程序收到一条推送通知,表明队友已给角色提供治疗药水,则应用程序可以告诉 WidgetKit 重新加载时间线并更新小部件\xe2\x80\x99s 内容。
\n
当我收到朋友发来的帖子时, LiveIn之类的应用程序通过及时刷新小部件为我提供了流畅的用户体验(只要包含的应用程序位于前台,我猜他们可以通过后台刷新来改进这一点)。
\n该产品不受每日 40 到 70 次刷新预算限制的限制,并且我在包含应用程序和小部件的图片显示之间有一点延迟(小到可以忽略)。
\n但是,当我尝试使用上述 API 构建应用程序WidgetCenter.shared.reloadTimelines或通知小部件使用UserDefaultsWidgetCenter.shared.reloadAllTimelines中存储的数据刷新时,我的小部件没有及时响应 API 调用。有时,可能会卡住10分钟以上,这与我上面提到的产品相差甚远,这是一个可怕的情况。 …
我添加了具有配置意图的小部件扩展。出于记录目的,我尝试记录应用程序用户拥有的小部件数量
WidgetCenter.shared.getCurrentConfigurations { results in
guard let widgets = try? results.get() else { return }
..<log widgets.count>...
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我得到了所有小部件中曾经使用过的所有配置意图的完整列表,而不是实际的 [WidgetInfo]。
即我屏幕上有 2 个小部件,而WidgetCenter声称我有 9 个当前配置。关于如何计算小部件有更好的想法吗?
iOS 14 Beta 8(iPhone 和模拟器)和 Xcode 12 Beta 6