如何在用户退出时暂停我的应用程序,并在他们重新进入应用程序时恢复它?

Posted

技术标签:

【中文标题】如何在用户退出时暂停我的应用程序,并在他们重新进入应用程序时恢复它?【英文标题】:how do I pause my app when the user exits, and resume it when they reenter the app? 【发布时间】:2018-04-01 23:38:47 【问题描述】:

我希望我的应用能够在用户单击主页时运行我的暂停功能。当我退出应用程序时,它会暂停,但是当我再次进入应用程序时运行视图确实加载功能。有谁知道如何让视图加载功能仅在视图终止前第一次加载时运行?

这是我的暂停功能:

func pauseGame322() 
    ThreeTime = 3
    CountdownUntillGameLabel.text = String(ThreeTime)
    if PlayButton.isHidden == true &&
        ContinueButton.isHidden == true
        timer.invalidate()
        timer10.invalidate()
        TotalSecondsForPause.isHidden = false
        PauseView.isHidden = false
        UnpauseButton.isHidden = false
        TotalSecondsForPause.text = String(time)
    
 

【问题讨论】:

某处,你初始化了你的 viewController,可能 viewDidAppear 被调用了。 【参考方案1】:

从 App Delegate 中的 applicationWillResignActive(_:) 调用您的暂停函数(重点是我的):

您应该使用此方法来暂停正在进行的任务、禁用计时器并降低 OpenGL ES 帧速率。 游戏应使用此方法暂停游戏。处于非活动状态的应用在等待转换为活动或后台状态时应该做最少的工作。

如果您需要访问当前视图控制器,请关注this question。但是在这里更新 UI 是没有意义的。您的应用即将进入后台,用户不会看到任何 UI 更改。当用户返回时,您会在 applicationWillBecomeActive(_:) 中显示暂停菜单。

【讨论】:

【参考方案2】:

你不能限制viewDidLoad的调用。每次初始化 ViewController 时,都会调用 viewDidLoad。要处理这种情况,您可以做的是,将您的代码放在一个单独的方法中,并在第一次执行检查后从 viewDidLoad 调用该方法。要知道这是不是第一次,您可以简单地在 UserDefaults 中放置一个标志变量。

此外,当您说“用户存在”时,它可能有不同的含义。您是说用户杀死了应用程序,还是说用户将应用程序置于后台?对于第一种情况,您应该将第一次检查放在 applicationDidFinishLaunching 方法中,而对于第二种情况(即背景),从 applicationWillEnterBackground 调用暂停函数,然后播放来自 applicationDidEnterForeground

尝试以更有效的方式使用应用程序的生命周期方法。

【讨论】:

以上是关于如何在用户退出时暂停我的应用程序,并在他们重新进入应用程序时恢复它?的主要内容,如果未能解决你的问题,请参考以下文章

当用户退出我的 iOS 应用程序时,下次他们尝试使用 Facebook 登录时,他们应该必须重新输入他们的登录凭据

应用程序进入/离开后台时保存和加载数据

退出/暂停应用程序时如何暂停背景音乐服务?

当用户单击主页按钮时暂停 iOS 应用程序游戏

如何在游戏状态为暂停时停止游戏的播放列表,并在游戏完成暂停状态后重新播放? JavaScript

当应用程序进入和退出后台时更新ios中的计时器