【问题标题】:Is there a way to know when my app switches from Suspended to another state?有没有办法知道我的应用程序何时从暂停状态切换到另一个状态?
【发布时间】:2016-10-27 15:35:09
【问题描述】:

我的WKWebViews'缓存有时会在用户一段时间未使用我的应用时被清除。

我猜,那是因为 iOS 将我的应用放入 Suspended,然后出现内存不足的情况,因此我的应用被清除了。

我阅读了 Apple 关于 The App Life Cycle - Execution States for Apps 的文档

尤其是描述Suspended 状态的部分:

已暂停 - 应用程序在后台,但未执行代码。系统 将应用程序自动移动到此状态并且之前不通知它们 这样做。挂起时,应用程序仍保留在内存中,但不会 执行任何代码。 当出现内存不足的情况时,系统可能会 清除暂停的应用程序,恕不另行通知,为 前台应用

这里有两个问题:

1) “清除”究竟是什么意思?应用被杀?或者它是否仍然出现在应用选择器上(双击主页按钮时)

2) 在这里我们可以看到,我们无法知道应用程序何时会被暂停。好的。但是如果用户回到应用程序,有没有办法知道应用程序已被暂停?我找不到任何UIAppDelegate 这样做的方法,但可能还有其他解决方案?

【问题讨论】:

    标签: ios


    【解决方案1】:

    Purge - purge 命令强制清空磁盘和内存缓存, 提供类似于状态的“冷磁盘缓冲区缓存” 重启后的操作系统。

    引用自here

    根据文档

    applicationDidEnterBackground:——让您知道您的应用现在 在后台运行,可以随时暂停。

    这是唯一让您知道该方法可能会进入暂停状态的方法

    还有

    application:didFinishLaunchingWithOptions: 现在会让你知道 您的应用程序的启动过程几乎完成,应用程序几乎准备就绪 运行。

    【讨论】:

      【解决方案2】:

      应用在后台但没有执行代码

      我认为 Apple 解释得很好,应用程序仍在内存中,但没有执行后台线程,因为前台应用程序需要更多资源。也许当内存恢复时,如果没有被操作系统杀死,您的应用可以再次执行后台代码。

      当发生内存不足的情况时,您的应用可能会被杀死(清除)。

      那么,有没有办法知道该应用已被暂停?

      当应用从操作系统中被杀死时,下一次启动等于应用完全重新启动。对于此 AppDelegate 不提供实现此目的的方法。当应用程序进入后台时,您可以在 UserDefaults 中设置一个标志,然后对该标志进行一些逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-26
        • 1970-01-01
        • 1970-01-01
        • 2016-10-14
        • 1970-01-01
        相关资源
        最近更新 更多