ios – 应用程序在使用BKProcessAssertion进行远程推送时崩溃

我整合了最新版本的Google AnalyticsSDK.我在我的应用程序中使用静通知.
所以我需要一点时间来完成后台任务(大约30秒).
我看到许多崩溃与允许的时间有关.
My App[3114] has active assertions beyond permitted time: 
{(
    <BKProcessAssertion: 0x15699c00> identifier: Background Content Fetching (15) process: MyApp [3114] permittedBackgroundDuration: 30.000000 reason: backgroundContentFetching owner   
    pid:3101 preventSuspend  preventThrottleDownUI  preventIdleSleep  preventSuspendOnSleep 
)}

我看到应用程序崩溃了[GAI threadMain]上的以下堆栈:

Thread 2:
0   libsystem_kernel.dylib          0x3b47ca58 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x3b47c854 mach_msg + 44
2   CoreFoundation                  0x3074c896 __CFRunLoopServiceMachPort + 150
3   CoreFoundation                  0x3074afbc __CFRunLoopRun + 780
4   CoreFoundation                  0x306b5f0a CFRunLoopRunSpecific + 518
5   CoreFoundation                  0x306b5cee CFRunLoopRunInMode + 102
6   Foundation                      0x310a81e6 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 250
7   Foundation                      0x310f909c -[NSRunLoop(NSRunLoop) run] + 76
8   MyApp                           0x0016df5c +[GAI threadMain:] + 60
9   Foundation                      0x3116aa5a __NSThread__main__ + 1058
10  libsystem_pthread.dylib         0x3b4f8916 _pthread_body + 138
11  libsystem_pthread.dylib         0x3b4f8886 _pthread_start + 98
12  libsystem_pthread.dylib         0x3b4f6aa0 thread_start + 4

我认为崩溃与Google Analytics有关,我尝试在远程推送时关闭Google Analytics,如下所示:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(BackgroundFetchResultBlock)completionHandler {
  ...
  [GAI sharedInstance].optOut = YES;

但它没有帮助.

解决方法

请参阅 this SO answer.简而言之,问题是您的后台任务的运行时间超过了允许的时间.自iOS6起,允许的后台时间显着缩短;您可能需要重新审视您的设计并进行调整.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...