Objective c 在ios 7.1和ios 8.0中运行时,应用程序在睡眠模式下崩溃

Objective c 在ios 7.1和ios 8.0中运行时,应用程序在睡眠模式下崩溃,objective-c,crash,ios8,voip,pjsip,Objective C,Crash,Ios8,Voip,Pjsip,当应用程序处于睡眠模式时,我正在检查xcode中的日志。我正在使用基于voip的应用程序。我已经办理了有关voip的所有手续。我可以让应用程序保持睡眠模式超过20分钟。但在我断开设备和系统的连接后,我已经在睡眠模式下运行了应用程序。在3-4分钟内,应用程序崩溃。我已签入设备日志。 它看起来像 id:xxx xxx xx。。。姓名:由 SwyxOTT,来自-[应用程序输入背景状态]流程: permittedBackgroundDuration:180.000000原因:finishTask所有者

当应用程序处于睡眠模式时,我正在检查xcode中的日志。我正在使用基于voip的应用程序。我已经办理了有关voip的所有手续。我可以让应用程序保持睡眠模式超过20分钟。但在我断开设备和系统的连接后,我已经在睡眠模式下运行了应用程序。在3-4分钟内,应用程序崩溃。我已签入设备日志。 它看起来像

id:xxx xxx xx。。。姓名:由 SwyxOTT,来自-[应用程序输入背景状态]流程: permittedBackgroundDuration:180.000000原因:finishTask所有者 pid:289预防暂停预防休眠预防暂停休眠

我正在使用keepalive timeout函数。您可以看到下面的函数。我使用的是UDP连接,PJSIP2.2.1

[self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
                [[UIApplication sharedApplication] setKeepAliveTimeout:KEEP_ALIVE_INTERVAL handler: ^{

[self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];

                }];
有人知道这个问题吗?请告诉我。

试试这个

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UIApplication sharedApplication].idleTimerDisabled=YES;
}

此崩溃是调用
-beginBackgroundTaskWithExpirationHandler:
而没有匹配的
-endBackgroundTask:
的结果。至少,您应该在过期处理程序中结束后台任务,如下所示:

__block UIBackgroundTaskIdentifier backgroundTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
    [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskID];
    backgroundTaskID = UIBackgroundTaskInvalid;
}];
资料来源:


这不会修复他的崩溃,也不会在屏幕关闭时让他的应用程序保持活动状态。它所做的只是防止iOS自动变暗,最终关闭屏幕。Per:
应禁用空闲计时器的唯一应用程序是映射应用程序、游戏或程序,在这些应用程序中,当用户交互最少时,应用程序需要继续显示内容。