恢复应用程序状态时显示不确定的活动指示器?

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?

如何在 tableView 加载时显示活动指示器?

Android ListView 在向下滚动时显示不正确的内容,然后在向上滚动时显示正确的内容

Java FileInputStream.read() 打印时显示不需要的字符