在哪里只更新一次通知小部件的 UI

Posted

技术标签:

【中文标题】在哪里只更新一次通知小部件的 UI【英文标题】:Where to update the UI of a notification widget just once 【发布时间】:2015-01-02 03:06:50 【问题描述】:

在我的今日通知中心扩展/小部件中,每次激活通知中心时,我都需要更新部分 UI。在使用通知中心时,它永远不需要更新,也不需要在后台更新。我应该将该代码放在什么方法中?

viewDidLoadviewWillAppear 在每次显示时都会被调用,例如,如果您向上和向下滚动,它们会再次被调用,所以这太频繁了。

widgetPerformUpdateWithCompletionHandler 在第一次显示之前根本不会被调用(至少在 ios 8.2 beta 中是这样),并且只要 iOS 想要更新 UI,即使它在后台,也会自动调用此方法这也不合适。

loadView 只被调用一次,除非从内存中删除小部件,否则永远不会再次调用。因此,如果您打开通知中心并查看小部件,然后关闭通知中心并稍后重新打开它,它可能不会再次调用该方法,具体取决于它是否已从内存中清除。

【问题讨论】:

【参考方案1】:

我只会使用viewDidLoad 而不必担心可能会出现多次调用。除非该方法需要很长时间才能运行,否则没有理由不这样做。 [如果它确实需要很长时间才能运行,那么你今天的扩展将会很糟糕,所以修复它。]

如果出于某种原因您只希望它发生一次,请将BOOL ivar 添加到类中。在initWithCoder: 中将其设置为YES 然后在viewDidLoad 中检查该值。如果是YES,请进行更新并将值设置为NO。如果已经是NO,请跳过更新。

【讨论】:

滚动时它似乎已完全从内存中删除,因此存储变量以跟踪加载状态并没有任何好处。它用快照做了一些有趣的事情。因此,在他们导航通知中心时似乎无法避免再次加载它,我想这没问题。

以上是关于在哪里只更新一次通知小部件的 UI的主要内容,如果未能解决你的问题,请参考以下文章

如何在通知中心频繁更新今日小部件?

当返回不同的小部件时,返回不同 StatefulWidgets 的方法不更新

我的有状态小部件不会更新 ui,即使我正在调用 setState 并将正确的值传递给小部件类

Qt Designer - 只生成一个带有多个小部件的 .ui 文件

无法使用颤振 Bloc 模式更新小部件外部的 UI

Google翻译小部件出现两次