如果我在PerformFetch中有一个函数在iOS中进行后台提取。
我终于"终于" PerformFetch中的语句。当后台提取到期时,finally块也会调用。 或者它将直接进入ExpirationHandler块以在操作系统杀死应用程序之前进行清理
答案 0 :(得分:0)
在后台中调用PerformFetch
(application:performFetchWithCompletionHandler:
)时,您有大约30秒的时间从该方法返回,否则该进程将被终止。
如果终止,您的代码将永远不会使用finally
覆盖进入PerformFetch
阻止,也不会调用WillTerminate
(applicationWillTerminate:
)。由于UIBackgroundFetchResult.Failed
没有返回,因此iOS会将其视为PerformFetch
。
如果您在BeginBackgroundTask
内通过beginBackgroundTaskWithName:expirationHandler:
(PerformFetch
)标记了某段代码的开头,那么是,expirationHandler
是操作系统终止PerformFetch
时调用。