在 iPhone 应用程序启动时,多早可以调用会话 didReceiveApplicationContext

How early can session didReceiveApplicationContext be called on the iPhone app as it launches

在我的 phone 应用程序中,WCSession 在 AppDelegate 的 didFinishLaunchingWithOptions 方法中激活。手表应用正在向 phone 应用发送 applicationContext。假设 phone 应用程序在本次传输时不是 运行,当稍后启动 phone 应用程序时,对 didReceiveApplicationContext 的调用可以提前多长时间进入 phone应用程序?我不担心延迟或到达多晚。我想知道是否有可能在 rootViewController 的 viewDidLoad 方法运行之前调用。当应用程序在 phone 上启动时,此会话事件能否进入 UIWindow 创建事件和 rootViewController 上的 viewDidLoad 事件之间的某个事件循环?

在我对真实设备上的应用程序进行的测试中,它总是发生在 viewDidLoad 调用之后,但通常发生在 AppDelegate 的 applicationDidBecomeActive.

之前

我正在使用故事板。但是,如果在代码中创建了主视图,我有兴趣了解任何可能的差异。 didReceiveApplicationContext 中的操作也不会触及任何视图或子视图。它只是存储数据并通知任何已注册的视图控制器。

到目前为止,关于缓冲的 applicationContext 何时会在 phone 启动时提供任何明确或隐含的保证。明确地说,我指的是关于事件顺序的任何记录数据(比如,仅在应用程序激活后)。隐含的,我的意思是基于主 运行 循环以及应用程序的开始时间事件的知识的任何逻辑推理,这可以确保在某个阶段之前不会尝试交付发射过程。因此,我将在这里记录下我的观察结果。

当我仅使用 applicationContext 将数据传递给 iPhone 上的非 运行ning 应用程序时,它总是在 viewDidLoad 方法调用后交付在 rootViewController 上,当 phone 应用程序最终启动时。但是,如果我在 sendApplicationContext 之后执行从 watch 到 phone 的 sendMessage,它会按预期唤醒 phone 上的应用程序。此时,缓冲的 applicationContext 有时似乎甚至在加载 rootViewController 的视图之前就已传送到 phone。