【发布时间】:2014-04-14 09:06:01
【问题描述】:
我想在应用进入后台十秒后执行一项操作,前提是用户在那段时间没有返回应用。
为此,我正在使用以下代码:
-(void)applicationDidEnterBackground:(UIApplication *)application{
UIBackgroundTaskIdentifier __block bgTask = 0;
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self checkSession];
});
}
-(void)checkSession{
sleep(10);
if([[UIApplication sharedApplication] applicationState] != UIApplicationStateActive) {
NSLog(@"Do action after 10 seconds");
}
else{
NSLog(@"Do nothing after 10 seconds");
}
}
问题是,如果用户在后台终止应用程序(通过滑动并关闭它),但在 10 秒过去之前,该操作将不会执行,我会看到这个日志:
<AppDelegate: 0x15557890> ending background task 5
知道在这种情况下如何执行操作吗?
【问题讨论】:
-
你不能。在 10 秒结束后,您要采取的行动是什么?
-
我正在处理用户会话。我将向服务器发送一个事件。仅当用户超过 10 秒未使用该应用程序时,我才想结束会话。
标签: ios iphone background