#import "AppDelegate.h"
@interface AppDelegate ()
@property (nonatomic, unsafe_unretained) UIBackgroundTaskIdentifier backgroundTaskIdentifier;
@property(nonatomic,assign)NSInteger tep;
@property (nonatomic, strong) NSTimer *myTimer;
@end
- (void)applicationDidEnterBackground:(UIApplication *)application {
_tep = 0;
self.backgroundTaskIdentifier =[application beginBackgroundTaskWithExpirationHandler:^( void) {
[self endBackgroundTask];
}];
// 模拟一个Long-Running Task
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:3.0f
target:self
selector:@selector(timerMethod:)
userInfo:nil
repeats:YES];
repeats:YES];
}
- (void) endBackgroundTask{
dispatch_queue_t mainQueue = dispatch_get_main_queue();
AppDelegate *weakSelf = self;
dispatch_async(mainQueue, ^(void) {
AppDelegate *strongSelf = weakSelf;
if (strongSelf != nil){
[strongSelf.myTimer invalidate];// 停止定时器
// 标记指定的后台任务完成
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskIdentifier];
// 销毁后台任务标识符
strongSelf.backgroundTaskIdentifier = UIBackgroundTaskInvalid;
}
});
}
// 模拟的一个 Long-Running Task 方法
- (void) timerMethod:(NSTimer *)paramSender{
_tep ++;
// backgroundTimeRemaining 属性包含了程序留给的我们的时间
NSTimeInterval backgroundTimeRemaining =[[UIApplication sharedApplication] backgroundTimeRemaining];
if (backgroundTimeRemaining == DBL_MAX){
// NSLog(@"Background Time Remaining = Undetermined %f",backgroundTimeRemaining);
NSLog(@"后台还在执行........ 这里是定时器里面..............3 秒一次");
//可以在这里持续发送请求和其他操作
if (_tep % 5 == 0) {
NSLog(@"..............一次");
}
} else {
NSLog(@"Background Time Remaining = %.02f Seconds", backgroundTimeRemaining);
}
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[self endBackgroundTask];
}
iOS程序 在后台不被挂起
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 最近新开一个项目,要使用WebSocket 在后台保持连接。大家都知道,在iOS平台上,由于苹果的后台机制,会有以...
- http://blog.csdn.net/u013756604/article/details/54967711苹...
- http://www.starming.com/index.php?v=index&view=69
- 三种方式使得iOS程序即使在关闭或崩溃的情况下也能够在后台持续进行一些任务,比如更新程序界面快照,下载文件等。这三...