标签: widgetcenter

为什么即使包含应用程序在前台,iOS 小部件也不会及时刷新

我对iOS widget刷新机制做了一些研究:

\n

1 前台包含app,widget刷新不受限制

\n

阅读苹果开发人员文档,我了解到小部件刷新是由 WidgetKit 预算控制的。正如它所说:

\n
\n

对于用户经常查看的小部件,每日预算通常包括 40 到 70 次刷新

\n
\n

但在以下情况下,重新加载不会计入 widget\xe2\x80\x99s 预算:

\n
    \n
  • 包含应用程序的 widget\xe2\x80\x99s 位于前台。
  • \n
  • 包含应用程序的 widget\xe2\x80\x99s 有一个活动的音频或导航会话。
  • \n
  • 系统区域设置发生变化。
  • \n
  • 动态类型或辅助功能设置发生变化。
  • \n
\n

2 我们可以使用WidgetCenter.shared.reloadTimelines包含应用程序来刷新小部件

\n

同一个医生说:

\n
\n

在上面的游戏小部件示例中,如果应用程序收到一条推送通知,表明队友已给角色提供治疗药水,则应用程序可以告诉 WidgetKit 重新加载时间线并更新小部件\xe2\x80\x99s 内容。

\n
\n

3 我已经看到了一些很棒的实现

\n

当我收到朋友发来的帖子时, LiveIn之类的应用程序通过及时刷新小部件为我提供了流畅的用户体验(只要包含的应用程序位于前台,我猜他们可以通过后台刷新来改进这一点)。

\n

该产品不受每日 40 到 70 次刷新预算限制的限制,并且我在包含应用程序和小部件的图片显示之间有一点延迟(小到可以忽略)。

\n

4 但我还是被困在这里

\n

但是,当我尝试使用上述 API 构建应用程序WidgetCenter.shared.reloadTimelines或通知小部件使用UserDefaultsWidgetCenter.shared.reloadAllTimelines中存储的数据刷新时,我的小部件没有及时响应 API 调用。有时,可能会卡住10分钟以上,这与我上面提到的产品相差甚远,这是一个可怕的情况。 …

widget ios swift widgetcenter

7
推荐指数
1
解决办法
3794
查看次数

WidgetKit getCurrentConfigurations 返回错误的小部件配置列表

我添加了具有配置意图的小部件扩展。出于记录目的,我尝试记录应用程序用户拥有的小部件数量

 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

swift widgetkit ios14 widgetcenter

5
推荐指数
1
解决办法
2153
查看次数

标签 统计

swift ×2

widgetcenter ×2

ios ×1

ios14 ×1

widget ×1

widgetkit ×1