iOS 定时器后台运行
2016-05-30 11:11
489 查看
最近再做一个类似于“驾考宝典”的iOS应用,当然作为考试计时的功能肯定不会少,开发期间也是遇到各种各样的小问题,本文所讲为其中之一:iOS程序进入后台后十分钟之内就会被系统kill掉,怎么解决呢?我想要程序进入后台后仍然运行计时功能,否则就无法达到考试的目的,之后在网上查阅了相关资料最后终于找到答案,其精髓就是:利用苹果给出的三种类型的程序可以保持在后台运行:音频播放类,位置更新类,蓝牙,我利用了苹果给出的音频播放类的这个“特权”来满足我程序上的要求,详细步骤如下:
1、步骤一:在Info.plist中,添加"Required background modes"键,value为:App plays audio
步骤二:
步骤三:将以下代码添加到appDelegate文件中的- (void)applicationDidEnterBackground:(UIApplication *)application函数,也可添加到在具体类中注册的应用进入后台后的通知方法
完成以上步骤你会发现,程序进入后台后仍可运行定时器!
1、步骤一:在Info.plist中,添加"Required background modes"键,value为:App plays audio
步骤二:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. NSError *setCategoryErr = nil; NSError *activationErr = nil; [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryErr]; [[AVAudioSession sharedInstance] setActive: YES error: &activationErr]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; }
步骤三:将以下代码添加到appDelegate文件中的- (void)applicationDidEnterBackground:(UIApplication *)application函数,也可添加到在具体类中注册的应用进入后台后的通知方法
- (void)applicationDidEnterBackground:(UIApplication *)application{ UIApplication* app = [UIApplication sharedApplication]; __block UIBackgroundTaskIdentifier bgTask; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid) { bgTask = UIBackgroundTaskInvalid; } }); }]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid) { bgTask = UIBackgroundTaskInvalid; } }); }); }
完成以上步骤你会发现,程序进入后台后仍可运行定时器!
相关文章推荐
- iOS-TabBar中间凸起点击完全有反应
- Label 设置行间距 和 title格式
- clipsToBounds & masksToBounds
- iOS开开发 post 的方式提交 中文字符串 后台显示乱码
- iOS 多线程篇2—创建线程
- iOS中字符串的用法,看这里就够了(详细)
- iOS 多线程之NSOperation
- ios中json解析出现的null问题
- iOS开发沙盒机制文件操作
- iOS在多台Mac上合作开发,共用一个账号和证书
- iOS开发之沙盒(sandbox)机制
- iOS中点击移动,使得手机屏幕的颜色随机变化
- iOS 扫码登录
- iOS证书配置常见错误
- iOS helper
- iOS之 FBMemoryProfiler FB的循环引用检测工具
- iOS 多线程篇1—多线程简单介绍
- iOS 笔试题
- iOS-TWRProgressView
- iOS 给TextView添加placeholder.