0

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

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

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

4

1 回答 1

0

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

当我只使用applicationContext将数据传递给 iPhone 上的非运行应用程序时,它总是在viewDidLoad上的方法调用之后交付rootViewController,以及当手机应用程序最终启动时。但是,如果我在 a 之后执行sendMessage从手表到手机的操作sendApplicationContext,它将按预期唤醒手机上的应用程序。此时,缓冲的applicationContext内容有时似乎在加载rootViewController.

于 2018-12-02T09:01:25.620 回答