恢复应用程序状态时显示不确定的活动指示器?
Posted
技术标签:
【中文标题】恢复应用程序状态时显示不确定的活动指示器?【英文标题】:Display Indeterminate Activity indicator while app state is restored? 【发布时间】:2017-03-24 22:27:13 【问题描述】:我的应用中有应用状态保存和恢复功能。恢复占用大量 CPU 资源,在支持的最旧设备上,恢复应用状态最多需要 5 秒,因此我想在恢复应用状态时显示一个活动指示器。
在正在恢复的视图控制器中我已经尝试过:
override public func decodeRestorableStateWithCoder(coder: NSCoder)
showActivityIndicator()
//just creates and adds UIActivityIndicatorView to view controller's view
...
override public func applicationFinishedRestoringState()
hideActivityIndicator()
我还尝试将其添加到 App Delegate 中的 UIWindow
:
func application(application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool
showActivityIndicator()
但是在这两种情况下都没有显示活动指示器。我猜该应用在恢复时不会更新其视图状态。
有没有人设法在恢复应用状态时显示活动指示器,如果有,怎么办?
【问题讨论】:
【参考方案1】:如果您的恢复过程是在主线程上执行的,那么可能是没有显示活动指示器的原因。
尝试在后台线程上执行恢复过程。
【讨论】:
【参考方案2】:在状态恢复期间,您看到的不是应用的视图,而是在状态保留时拍摄的 UI 快照图像。因此,您在恢复期间对视图所做的任何更改(包括活动指示器)都不会被看到。
作为状态保存过程的一部分,UIKit 会捕获您应用的用户界面并将其存储在图像文件中。当您的应用重新启动时,系统会显示此快照图像来代替您应用的默认启动图像,以保留您的应用仍在运行的概念。
(来自:Documentation for ignoreSnapshotOnNextApplicationLaunch())
相反,您可以使用 UIApplicationWillResignActive 通知捕捉应用程序进入后台,然后对视图进行更改,以便它们保留在稍后将在恢复时出现的快照中。这对于执行诸如禁用按钮之类的操作很有用,以便用户可以看到他们在恢复期间无法与应用程序交互。然后在应用程序再次完全活动时根据需要重新启用这些按钮。但是,如果您在此处添加活动指示器,它将不会动画。
或者,您可以使用上面链接的 ignoreSnapshotOnNextApplicationLaunch() 在状态恢复期间显示您的启动屏幕,以让您的用户清楚他们无法交互 - 然后,当恢复完成时,这将淡入您恢复的视图。
【讨论】:
以上是关于恢复应用程序状态时显示不确定的活动指示器?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter HTTP 响应在 Flutter web 上测试时显示完整响应,但在 Android 设备上测试时显示不完整
微信小程序原生组件cover-view内当文字超出宽度时显示不全
请问怎么解决servlet编译时显示不存在mybean.date?