在后台暂停订阅 UI 更新并在前台重新启动?
Suspend subscription for UI updates in the background and restart it on foreground?
我有很多更新 UI 的订阅,但我想在应用进入后台时暂停它们,因为它们仍在触发和更新我的视图控制器的部分内容。
处理此问题以注意后台内存和不必要的 UI 更新的最佳方法是什么?
我想这取决于您的应用程序在后台执行的操作。
也许是:
- 是不是
timer
/interval
一直在走。
- 尚未返回或已连接到 WebSocket 的
Observable
网络请求。
- 一个
Observable
正在侦听系统事件,例如屏幕方向改变。
根据您关心的 Observable
,您可能希望以不同的方式处理它。对于网络请求的情况,您可能想要取消它,或者可能取消它然后在前台重新启动它。如果是像方向改变这样的系统事件,你可能只想在前台获取当前值。
无论如何,我不得不问,你为什么这么关心内存?我会说,让 iOS 处理系统内存问题。如果它决定终止您的应用程序,您的 Disposable
s 应该自行正确清理(如果您正确使用 DisposeBag
s)。然后,您应该只关心您的应用保持足够的状态,以便它可以从中断的地方继续(在正确的页面上等)。我不建议尝试代表 iOS 进行过度优化。只要 iOS 允许,就让您的应用保留 运行。您的用户可能只是跳到另一个应用程序一秒钟左右。
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
并了解所有可能的状态,例如 'Active' 和 'Inactive',但这应该会让您朝着正确的方向前进
https://developer.apple.com/reference/uikit/uiapplicationdelegate
我有很多更新 UI 的订阅,但我想在应用进入后台时暂停它们,因为它们仍在触发和更新我的视图控制器的部分内容。
处理此问题以注意后台内存和不必要的 UI 更新的最佳方法是什么?
我想这取决于您的应用程序在后台执行的操作。
也许是:
- 是不是
timer
/interval
一直在走。 - 尚未返回或已连接到 WebSocket 的
Observable
网络请求。 - 一个
Observable
正在侦听系统事件,例如屏幕方向改变。
根据您关心的 Observable
,您可能希望以不同的方式处理它。对于网络请求的情况,您可能想要取消它,或者可能取消它然后在前台重新启动它。如果是像方向改变这样的系统事件,你可能只想在前台获取当前值。
无论如何,我不得不问,你为什么这么关心内存?我会说,让 iOS 处理系统内存问题。如果它决定终止您的应用程序,您的 Disposable
s 应该自行正确清理(如果您正确使用 DisposeBag
s)。然后,您应该只关心您的应用保持足够的状态,以便它可以从中断的地方继续(在正确的页面上等)。我不建议尝试代表 iOS 进行过度优化。只要 iOS 允许,就让您的应用保留 运行。您的用户可能只是跳到另一个应用程序一秒钟左右。
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
并了解所有可能的状态,例如 'Active' 和 'Inactive',但这应该会让您朝着正确的方向前进
https://developer.apple.com/reference/uikit/uiapplicationdelegate