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 的睡眠模式下崩溃的主要内容,如果未能解决你的问题,请参考以下文章
在睡眠/休眠模式下启动 VSTS Hosted Build 代理
Android FusedLocationproviderApi requestLocationUpdates 在深度睡眠模式下未运行 pendingIntent