我有很多订阅更新了用户界面,但我想在应用程序进入后台时暂停它们,因为它们仍在触发和更新我的视图控制器的部分内容。
处理此问题的最佳方法是在背景中意识到内存和不必要的UI更新?
答案 0 :(得分:0)
我想这取决于你的应用在后台做了什么。
也许是:
timer
/ interval
。Observable
。Observable
。根据您关注的Observable
,您可能希望以不同方式处理它。对于网络请求的情况,您可能希望取消它,或者可能取消它,然后在前台重新启动它。如果它是一个类似方向更改的系统事件,您可能只想在前台获取当前值。
无论如何,我不得不问,你为什么如此关注记忆?我会说,让iOS处理系统内存问题。如果它决定终止您的应用,则应自行清理Disposable
(如果您正确使用DisposeBag
s)。然后,你应该只关心你的应用程序保持足够的状态,以便它可以从它停止的地方(在正确的页面上等)。我不建议代表iOS过度优化。只要iOS允许,让您的应用继续运行。您的用户可能只是跳过另一个应用程序只需一秒钟。
答案 1 :(得分:0)
UIApplicationDelegate
(即你的AppDelegate.swift)有一些值得实施的有用方法,可以让你接近你想要的东西
尝试实施这些:
func applicationDidEnterBackground(application: UIApplication) {
// Do something to notify your services to unsubscribe
}
func applicationWillEnterForeground(application: UIApplication) {
// Do something to resubscribe for notification and also catch up for anything you missed while in the background
}
可能值得更多地阅读UIApplicationDelegate
以及了解所有可能的状态,例如“主动”和“非活动”,但这应该让你朝着正确的方向前进
https://developer.apple.com/reference/uikit/uiapplicationdelegate