AsyncSocket 在 iPad 的睡眠模式下崩溃

Posted

技术标签:

【中文标题】AsyncSocket 在 iPad 的睡眠模式下崩溃【英文标题】:AsyncSocket crash on sleep mode for iPad 【发布时间】:2014-01-24 14:20:23 【问题描述】:

我正在将 robbiehanson/CocoaAsyncSocket 用于异步套接字,当我的 iPad 进入后台状态时,我断开并关闭所有端口,但有时当 iPad 从睡眠中醒来时它崩溃了,当 mac 进入时与模拟器相同睡眠模式。一旦我将崩溃日志作为 [AsyncSocket close] 无法识别的实例发送到选择器。

我无法找到解决方案,任何人都可以帮助我解决这个问题。以下是我的断开连接代码。

- (void) enterBackground


  if (self.discoveryUdpSocket!=nil)
 
    self.discoveryUdpSocket.delegate = nil;
    [self.discoveryUdpSocket close];
 

  self.discoveryUdpSocket.delegate = nil;
  self.discoveryUdpSocket = nil;


【问题讨论】:

【参考方案1】:

您是否尝试过延长进入后台模式的时间以让套接字框架完成其工作?

我的意思是在应用程序委托中添加一个方法:

-(void)applicationDidEnterBackground:(UIApplication *)application 
        UIApplication *app = [UIApplication sharedApplication];
        __block UIBackgroundTaskIdentifier bgTask = 0;
        bgTask = [app beginBackgroundTaskWithExpirationHandler:^
            NSLog(@"Times up!");
            [application endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        ];
        // Let the async socket to complete its job and finally close the connection
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
            NSLog(@"Finishing job and closing async socket, time remaining=%f", [app backgroundTimeRemaining]);
            // Calling your background routine
            [self enterBackground];
            [app endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        );

这是在应用暂停之前完成重要工作的好方法。您最多有 180 秒。

【讨论】:

我应该在套接字关闭方法之前还是之后添加它? 添加了调用您的方法“enterBackground”的代码。希望应该会奏效。 应用崩溃时显示日志输出 我已在问题中添加了崩溃报告 @Prernachavan,感谢您的报告,可惜没用,请象征性地看一下,即这里Symbolicating an ios crash log或Overview of iOS Crash Reporting

以上是关于AsyncSocket 在 iPad 的睡眠模式下崩溃的主要内容,如果未能解决你的问题,请参考以下文章

睡眠模式是啥?

如何在睡眠模式下唤醒 Android Wear?

在睡眠/休眠模式下启动 VSTS Hosted Build 代理

Android FusedLocationproviderApi requestLocationUpdates 在深度睡眠模式下未运行 pendingIntent

iOS startMonitoringForRegion 在睡眠模式下不起作用(黑屏)

怎样在睡眠模式下保持Xshell连接