iOS程序进入后台仍运行定时器
2016-01-19 00:00
896 查看
摘要: iOS程序进入后台后十分钟之内就会被系统kill掉,怎么解决呢?我想要程序进入后台后仍然运行计时功能,否则就无法达到考试的目的,之后在网上查阅了相关资料最后终于找到答案,其精髓就是:利用苹果给出的三种类型的程序可以保持在后台运行:音频播放类,位置更新类,另外一个记不太清楚了,
1、步骤一:在Info.plist中,添加"Required background modes"键,value为:App plays audio or streams audio/video using AirPlay
步骤二:在下面方法里边写
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 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];
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;
}
});
});
}
这样就可以完成在后台运行计时器
1、步骤一:在Info.plist中,添加"Required background modes"键,value为:App plays audio or streams audio/video using AirPlay
步骤二:在下面方法里边写
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 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];
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开发系列--定位
- iOS开发系列--地图
- iOS使用NSMutableAttributedString 实现富文本(一行文本里面不同字体大小)
- 一些日常用到的技术,不断积累中
- 蓝懿IOS学习七大手势Touches
- iOS-Code Data多线程的封装详解
- iOS开发——Push Notification(二)
- iPhone通过usb与windows实现通信
- IOS基础 NSString 和 NSMutableString
- iOS开发-Cocoapods安装
- iOS 推送问题 registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later
- iOS之隐藏导航条的下划线
- iOS Xcode个人常用插件
- iOS scrollView下移20像素
- iOS Xcode注释的几种使用方法
- Ios xcode快捷键
- iOS——button&&imageview的学习笔记
- iOS 本地数据持久化 中UserDefault的使用
- iOS 简易无限滚动的图片轮播器 Demo事例
- iOS推送与角标总结