gpt4 book ai didi

ios - 如何判断 iOS Today Widget 是否正在后台更新?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:56:34 24 4
gpt4 key购买 nike

我有一个 iOS Today Widget,它会进行昂贵的 API 调用(昂贵的原因是调用得越多,我付的钱就越多)。如果我在我的小部件中实现 widgetPerformUpdateWithCompletionHandler,那么该小部件每天可以在后台更新几次,而无需用户查看他们的通知中心。

在一个应用程序中,application:didFinishLaunchingWithOptions 的选项字典中有一个键值对,它告诉您该应用程序是否正在启动后台,但我找不到任何类似的小部件.还有在 UIApplication 中获取 applicationState 的调用,这在小部件中也不可用。

那么,在我的小部件中是否有任何可靠的方法可以知道系统正在后台更新我的小部件并且用户没有查看他们的通知中心以避免不必要的 API 调用?当用户确实查看小部件时,我可以接受内容不是完全最新的,因为我可以在加载后非常快速地更新它。

我一直在尝试找到一个 hacky 解决方案,比如在后台更新小部件时与 View 或窗口不同的东西,但还没有找到任何东西。我注意到偶尔在后台初始化小部件时窗口框架的高度为零,但情况似乎并非总是如此。

我也知道,如果我不实现 widgetPerformUpdateWithCompletionHandler,那么我的小部件就不会在后台更新,这是一个可能的解决方案,但我正在寻找一种方法来吃蛋糕也是。

如果有人有任何其他想法,我会洗耳恭听。谢谢。

最佳答案

如果您只是计划调试并了解它被调用的频率,您可以在设备上使用一些日志记录(甚至可能在每次调用 widgetPerformUpdateWithCompletionHandler 时触发某种分析事件通知,在以便调解这种情况是否经常发生)。

减少请求数量的主动解决方案的一个示例是对请求进行时间限制,如果 widgetPerformUpdateWithCompletionHandlerx 分钟/小时/等运行一次以上,您不会调用 API,而只是调用没有新数据的 completionBlock

最后一个对 API 调用有更严格限制的例子可能是在今天的扩展中完全避免它们(就像你说的那样)。这意味着 API 调用只会在实际应用程序启动时完成,并且响应会持续存在(您可以在应用程序和 Today's extension 之间有一个共享容器 - 只是一个文件夹或者更复杂的东西,比如 Core Data 的 sqlite 存储) 并始终从共享容器中检索数据以更新 Today's extension UI。

关于ios - 如何判断 iOS Today Widget 是否正在后台更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38383594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com