在哪里只更新一次通知小部件的 UI
Posted
技术标签:
【中文标题】在哪里只更新一次通知小部件的 UI【英文标题】:Where to update the UI of a notification widget just once 【发布时间】:2015-01-02 03:06:50 【问题描述】:在我的今日通知中心扩展/小部件中,每次激活通知中心时,我都需要更新部分 UI。在使用通知中心时,它永远不需要更新,也不需要在后台更新。我应该将该代码放在什么方法中?
viewDidLoad
和 viewWillAppear
在每次显示时都会被调用,例如,如果您向上和向下滚动,它们会再次被调用,所以这太频繁了。
widgetPerformUpdateWithCompletionHandler
在第一次显示之前根本不会被调用(至少在 ios 8.2 beta 中是这样),并且只要 iOS 想要更新 UI,即使它在后台,也会自动调用此方法这也不合适。
loadView
只被调用一次,除非从内存中删除小部件,否则永远不会再次调用。因此,如果您打开通知中心并查看小部件,然后关闭通知中心并稍后重新打开它,它可能不会再次调用该方法,具体取决于它是否已从内存中清除。
【问题讨论】:
【参考方案1】:我只会使用viewDidLoad
而不必担心可能会出现多次调用。除非该方法需要很长时间才能运行,否则没有理由不这样做。 [如果它确实需要很长时间才能运行,那么你今天的扩展将会很糟糕,所以修复它。]
如果出于某种原因您只希望它发生一次,请将BOOL
ivar 添加到类中。在initWithCoder:
中将其设置为YES
然后在viewDidLoad
中检查该值。如果是YES
,请进行更新并将值设置为NO
。如果已经是NO
,请跳过更新。
【讨论】:
滚动时它似乎已完全从内存中删除,因此存储变量以跟踪加载状态并没有任何好处。它用快照做了一些有趣的事情。因此,在他们导航通知中心时似乎无法避免再次加载它,我想这没问题。以上是关于在哪里只更新一次通知小部件的 UI的主要内容,如果未能解决你的问题,请参考以下文章
当返回不同的小部件时,返回不同 StatefulWidgets 的方法不更新
我的有状态小部件不会更新 ui,即使我正在调用 setState 并将正确的值传递给小部件类