0

我有一些网络请求,application:didFinishLaunchingWithOptions:方法中有 15 秒超时。我发现了以下奇怪的情况。

T1:应用按home键进入后台
T2:应用收到静默推送并执行didFinishLaunchingWithOptions:方法,然后发送请求
T3(> T2 + 15s):用户点击应用图标。T2 中的所有请求都会立即超时。

我的问题是为什么didFinishLaunchingWithOptions在那种情况下触发以及如何调试(重现这种情况,因为以上都在日志中)。

4

3 回答 3

1

didFinishLaunchingWithOptions如果您的应用程序被挂起或终止并且您收到通知,则会调用它。您的应用程序可能在后台崩溃,并且didFinishLaunchingWithOptions正在调用这种方式。

要调试该方案,请执行以下操作。

  1. 点击目标并选择Edit Scheme 在此处输入图像描述

  2. 选择启动到Wait for executable to be launched 在此处输入图像描述

  3. 运行应用程序。

    在此处输入图像描述

现在您可以添加断点didFinishLaunchingWithOptions并向您的设备发送通知。一旦设备收到通知,您就可以进行调试。

于 2017-08-21T04:56:29.437 回答
0

您可以检查应用程序状态以确定应用程序在收到通知时是否从后台启动:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    if ( application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground ) { 
        //opened from a push notification when the app was on background
     } 
}

编辑::

这里没有什么要调试的,它是预期的功能。

如果你想以不同的方式处理它,你可以寻找

UIApplicationLaunchOptionsLocalNotificationKey

在启动选项内部,并在从通知启动应用程序时执行您需要的任何工作。

于 2017-08-21T04:20:23.393 回答
0

无声推送可以将暂停的应用程序(由于内存紧张已被iOS系统正确杀死,而不是用户手动杀死)启动到后台。在这种情况下,应用程序的生命周期变为:

  1. application:willFinishLaunchingWithOptions:
  2. application:didFinishLaunchingWithOptions:
  3. applicationDidEnterBackground:

Apple 文档:关于后台执行序列

于 2021-01-16T08:05:53.917 回答