何时调用 WCSession 对象上的 activateSession()
When to call activateSession() on WCSession object
我想知道什么时候会在手表和 iOS 设备上的 WCSession 对象上调用 activateSession()。
文档中说:
在调用任何与会话相关的方法之前,始终分配一个委托并激活您的会话。在发送消息或获取有关连接状态的信息之前,必须配置和激活会话。
起初以为我把我的代码用于初始化会话:
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
在 viewDidLoad 在 iOS 设备上和在 willActivate 在手表端。
有效... 但我认为这不是一个好的解决方案。
我还不太熟悉应用程序生命周期,但据我了解,每次打开应用程序时都会调用它们。
每次打开其中一个应用程序时是否会导致 "reconnect"?
在哪里放置该代码比较合适?
当您将 WCSession
代码放入 viewDidLoad
和 willActivate
时,它不仅会在应用程序打开时被调用,而且每次显示包含代码的视图控制器时都会被调用。所以那不是一个理想的地方。
放置此代码的最佳位置是您应用 AppDelegate
中的 application:didFinishLaunchingWithOptions
和手表扩展 ExtensionDelegate
中的 applicationDidFinishLaunching
您可以将所有会话处理放入一个单例中 class,如这个很棒的 tutorial by @NatashaTheRobot 中所建议的。
这样,会话只会在应用程序保存在内存中时创建一次。
编辑
正如 ccjensen 在他的评论中指出的那样,如果您将连接用于 Complication、Notification 或 Glance 更新您必须在 ExtensionDelegate 的 init
方法中激活会话。 applicationDidFinishLaunching
在这些情况下不会被调用。
我想知道什么时候会在手表和 iOS 设备上的 WCSession 对象上调用 activateSession()。
文档中说:
在调用任何与会话相关的方法之前,始终分配一个委托并激活您的会话。在发送消息或获取有关连接状态的信息之前,必须配置和激活会话。
起初以为我把我的代码用于初始化会话:
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
在 viewDidLoad 在 iOS 设备上和在 willActivate 在手表端。
有效... 但我认为这不是一个好的解决方案。 我还不太熟悉应用程序生命周期,但据我了解,每次打开应用程序时都会调用它们。
每次打开其中一个应用程序时是否会导致 "reconnect"?
在哪里放置该代码比较合适?
当您将 WCSession
代码放入 viewDidLoad
和 willActivate
时,它不仅会在应用程序打开时被调用,而且每次显示包含代码的视图控制器时都会被调用。所以那不是一个理想的地方。
放置此代码的最佳位置是您应用 AppDelegate
中的 application:didFinishLaunchingWithOptions
和手表扩展 ExtensionDelegate
applicationDidFinishLaunching
您可以将所有会话处理放入一个单例中 class,如这个很棒的 tutorial by @NatashaTheRobot 中所建议的。
这样,会话只会在应用程序保存在内存中时创建一次。
编辑
正如 ccjensen 在他的评论中指出的那样,如果您将连接用于 Complication、Notification 或 Glance 更新您必须在 ExtensionDelegate 的 init
方法中激活会话。 applicationDidFinishLaunching
在这些情况下不会被调用。