如何确定是否启动应用程序以执行后台提取

Soh*_*aib 4 iphone objective-c ios ios7 xcode5

当OS启动应用程序进行后台获取时,我观察到的序列就是这个

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Run Code Online (Sandbox Code Playgroud)

然后

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
Run Code Online (Sandbox Code Playgroud)

didFinishLaunching我试图确定是否启动应用程序进行后台提取,因为我需要禁用一些功能来加速应用程序加载.UIApplication不公开任何属性来确定这一点.

我注意到UIApplication_applicationFlags哪个isHandlingBackgroundContentFetchboolean对于Background Fetch设置为true但是它的@package内部并且无法访问.

小智 9

对不起,这不是您问题的直接答案,但是您可以通过在应用程序代理中的以下方法之间划分应用程序启动逻辑来实现相同的结果吗?

1)这两个场景共有的任何应用启动逻辑都在这里:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Run Code Online (Sandbox Code Playgroud)

2)正常的发射行为在这里:

- (void)applicationDidBecomeActive:(UIApplication *)application
Run Code Online (Sandbox Code Playgroud)

3)后台获取启动行为在这里(#2中的缩小版本):

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
Run Code Online (Sandbox Code Playgroud)