【问题标题】:Application starts from Home Screen if app remains in the background for more than 30 seconds instead of showing the screen when it went to background如果应用程序在后台停留超过 30 秒而不是在进入后台时显示屏幕,则应用程序从主屏幕启动
【发布时间】:2021-06-16 06:48:03
【问题描述】:

我的 iOS 应用程序是一种消息应用程序,因此用户可以发送音频、视频、图像等。当用户输入消息并且应用程序进入后台超过 30 秒时,应用程序从主屏幕启动,所有这些消息,一切会迷路。在 30 秒之前,应用程序在其进入后台的确切位置启动。那么如何在30秒后也这样做,至少我应该保持这种状态30分钟。

在 iOS 13+ 中使用后台进程和计划任务会是一个好方法吗?

我特别不想在后台做任何事情,但是当应用程序在 30 分钟内从后台转到前台时,我想保持这种状态。

【问题讨论】:

  • “至少我应该保持这个状态30分钟。”然后,当您进入后台时,您需要使用更少的内存和其他资源。看门狗会因为你是记忆猪而杀了你。
  • 当我进入后台时,我没有运行任何后台进程,但是如何在 iOS 13+ 中运行应用程序 30 分钟,根据 iOS 13+ 条款应用程序不会运行超过 30后台秒数

标签: ios objective-c background-process ios13


【解决方案1】:

消息消失

好吧,首先,为什么所有的消息都丢失了?如果您尝试制作类似 snapchat 的体验,其中消息在您看到它们后消失,那很好,但否则可能值得使用 CoreData 为这些消息添加本地存储。

原因

主要问题,过了一会儿,iOS 将把一个应用程序转移到sleep,也就是说,在这种情况下,它会删除你应用程序中的所有临时数据,这意味着当你重新打开它时,它将从一开始,它这样做是为了节省内存。

解决方案

有几种方法可以解决这个问题,你可以使用State Restoration

对于初学者来说,虽然这可能非常棘手,因为它的文档非常稀少。

另一种选择是将最后一个屏幕保存在 UserDefaults 中,然后当应用重新启动时,您可以使用该值推送用户所在的最后一个屏幕。对于这两种解决方案,尽管您需要一种方法来持久化消息并重新获取它们(数据库)CoreData 可能是您最好的选择

我个人认为状态恢复是最好的选择,尤其是因为这听起来正是您想要做的:

但是当应用在 30 分钟内从后台转到前台时,我想保持这种状态。

【讨论】:

  • 通过使用状态恢复,看起来我们需要添加所有控制器以及我们需要保留哪些数据,在这种情况下,如果控制器超过 10 个以上,我们需要添加所有控制器?是真的吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
相关资源
最近更新 更多