- (void)openCountdown {
// 判断用户有没有登录
if ([OJPNSUserDefaultsTools isLogin]) {
// 如果登录了则一直更新坐标
[OJPNSUserDefaultsTools setIsUpdateLocation:YES];
}
else {
// 没有登录则不更新
[OJPNSUserDefaultsTools setIsUpdateLocation:NO];
}
// NSLog(@"Location_啦啦啦啦--开始更新用户位置了.....");
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), 1.0 * NSEC_PER_SEC, 0);
// 每秒执行一次 总时长10分钟
NSTimeInterval seconds = 10*60.f; //10*60.f;//20;
NSDate *endTime = [NSDate dateWithTimeIntervalSinceNow:seconds];
// 最后期限
dispatch_source_set_event_handler(_timer, ^{
int interval = [endTime timeIntervalSinceNow];
if (interval > 0) {
// 更新倒计时
NSString *timeStr = [NSString stringWithFormat:@"%d秒", interval];
dispatch_async(dispatch_get_main_queue(), ^{
// NSLog(@"Location_距离下次更新用户位置时间还剩%@",timeStr);
});
}
else {
// 倒计时结束,关闭
dispatch_source_cancel(_timer);
dispatch_async(dispatch_get_main_queue(), ^{
// 重复执行 如果当前在更新用户位置信息,则重复执行
if ([OJPNSUserDefaultsTools getIsUpdateLocation]) {
[OJPNSUserDefaultsTools setIsUpdateLocation:NO];
OJPMainTabBarController *mainTabBar = [OJPMainTabBarController shareViewController];
UINavigationController *oneNav = mainTabBar.childViewControllers[0];
OJPNewHomeMapViewController *oneHome = oneNav.viewControllers[0];
[oneHome configLocationManagerRequestUnderway:NO];
}
});
}
});
dispatch_resume(_timer);
}
iOS-后台倒计时
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 由于苹果官方对iOS系统后台任务管控非常严格,所以在iOS系统要实现倒计时进入后台或者切换页面之后依然能保持倒计时...
- Tip:这篇文章笔者还未接触Markdown语言所做笔记。直接复制代码请点击->源代码Copy不报错 前言:前段时...
- 今天因项目需求:软件在后台倒计时,结束后跳到B界面,简单的了解了一下,程序进入后台的几种方法和程序的几种状态 一...