暂停在后台订阅UI更新并在前台重新启动它?

时间:2016-09-19 22:40:01

标签: ios swift uikit rx-swift

我有很多订阅更新了用户界面,但我想在应用程序进入后台时暂停它们,因为它们仍在触发和更新我的视图控制器的部分内容。

处理此问题的最佳方法是在背景中意识到内存和不必要的UI更新?

2 个答案:

答案 0 :(得分:0)

我想这取决于你的应用在后台做了什么。

也许是:

  • 继续前进是timer / interval
  • 尚未返回或已连接到WebSocket的网络请求的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