【问题标题】:onResume/onPause on iOS applicationiOS 应用程序上的 onResume/onPause
【发布时间】:2015-04-11 06:20:14
【问题描述】:

在 Android 上,当我编写应用程序时,我需要实现 onResume/onPause 以使我的活动进入后台并从前台返回。如果我需要如何为 iOS 做同样的事情,我已经用谷歌搜索了。但我找不到任何有用的东西。你能告诉我我需要做什么来处理我的 iOS 应用程序进入后台并返回到前台吗?

谢谢。

【问题讨论】:

  • 我希望能解决这个问题,看看我的答案是否正确。

标签: ios


【解决方案1】:

在 Swift 中你可以使用

    NotificationCenter.default.addObserver(self, selector: #selector(onPause), name:
        UIApplication.willResignActiveNotification, object: nil)
    
    NotificationCenter.default.addObserver(self, selector: #selector(onResume), name:
        UIApplication.willEnterForegroundNotification, object: nil)

@objc func onPause() {
    
}

@objc func onResume() {

}

请注意,在实践中,我发现将UIApplication.willEnterForegroundNotification 替换为UIApplication.didBecomeActiveNotification 效果更好,因为如果您单击主页按钮两次以打开iOS 的“打开应用程序”屏幕,然后立即单击该应用程序,也会触发onResume集中注意力。

【讨论】:

  • 这是正确的答案,每次从后台放置/恢复 ViewController 时都会调用 onPause 和 onResume。谢谢
【解决方案2】:

你正在寻找

override func viewWillDisappear(animated: Bool) {}

用于暂停

override func viewWillAppear(animated: Bool) {}

为 onResume

其他答案是指应用程序生命周期回调,而不是控制器(Android 中的 Activity)回调。

【讨论】:

  • 这根本不正确。 OP 明确询问“我需要做什么来处理我的 iOS 应用程序进入后台并返回前台?”您引用的两种方法不对应于应用程序的 BACK/FORG,而是任何视图控制器的根视图生命周期,这是完全不同的事情。
  • 也许您应该查看有关具体方法及其作用的 Android 文档。 onResume 和 onPause 与活动相关,而不是与应用程序生命周期相关。问题中还提到了活动。因此,如果这是语义问题,那就是 2 对 1。为什么不检查您的答案?
  • 为了清楚起见,Android 的 onResume 会在每次 Activity 进入前台时被调用,即使在来回切换应用程序或关闭和打开屏幕时也是如此。另一方面,iOS viewDidAppear 仅在控制器视图第一次出现在屏幕上时被调用一次。
  • viewDidAppear 只运行一次,但 android 中的 onResume 每次进入活动时都会运行。
  • 如果您希望“活动进入后台并从前台返回”的 Android onResume/onPause 等效项,这是正确的答案,这不一定与应用程序生命周期是一对一的.
【解决方案3】:

有一个专门的类接收这些事件的委托回调(来自应用程序实例本身),通常称为 XXXApplicationDelegate。

您需要为应用程序生命周期实现委托方法。

- (void)applicationWillResignActive:(UIApplication *)application {
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
}

- (void)applicationWillTerminate:(UIApplication *)application {
}

【讨论】:

  • 这个问题是指控制器生命周期而不是应用程序生命周期。
  • 我猜最接近onPause/onResume 是,例如,从applicationDidEnterBackground/applicationWillEnterForeground 发布notifications 并从控制器接收它们。
【解决方案4】:

您想查看Apple documentation 应用程序生命周期。具体来说,您对application:didFinishLaunchingWithOptions:applicationDidBecomeActive:applicationDidEnterBackground 感兴趣。

【讨论】:

  • 这个问题是指控制器生命周期而不是应用程序生命周期
  • 多次发布同一评论并不能使其更正确。
猜你喜欢
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 2017-11-04
相关资源
最近更新 更多