【发布时间】:2015-04-11 06:20:14
【问题描述】:
在 Android 上,当我编写应用程序时,我需要实现 onResume/onPause 以使我的活动进入后台并从前台返回。如果我需要如何为 iOS 做同样的事情,我已经用谷歌搜索了。但我找不到任何有用的东西。你能告诉我我需要做什么来处理我的 iOS 应用程序进入后台并返回到前台吗?
谢谢。
【问题讨论】:
-
我希望能解决这个问题,看看我的答案是否正确。
标签: ios
在 Android 上,当我编写应用程序时,我需要实现 onResume/onPause 以使我的活动进入后台并从前台返回。如果我需要如何为 iOS 做同样的事情,我已经用谷歌搜索了。但我找不到任何有用的东西。你能告诉我我需要做什么来处理我的 iOS 应用程序进入后台并返回到前台吗?
谢谢。
【问题讨论】:
标签: ios
在 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集中注意力。
【讨论】:
你正在寻找
override func viewWillDisappear(animated: Bool) {}
用于暂停
和
override func viewWillAppear(animated: Bool) {}
为 onResume
其他答案是指应用程序生命周期回调,而不是控制器(Android 中的 Activity)回调。
【讨论】:
onResume 会在每次 Activity 进入前台时被调用,即使在来回切换应用程序或关闭和打开屏幕时也是如此。另一方面,iOS viewDidAppear 仅在控制器视图第一次出现在屏幕上时被调用一次。
有一个专门的类接收这些事件的委托回调(来自应用程序实例本身),通常称为 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 并从控制器接收它们。
您想查看Apple documentation 应用程序生命周期。具体来说,您对application:didFinishLaunchingWithOptions:、applicationDidBecomeActive: 和applicationDidEnterBackground 感兴趣。
【讨论】: