iOS锁屏或者后台计时器定时解决方法

2016-08-29  本文已影响1952人  husky_duang

本文所讲为其中之一:iOS程序进入后台后十分钟之内就会被系统kill掉,怎么解决呢?我想要程序进入后台后仍然运行计时功能,否则就无法达到考试的目的,之后在网上查阅了相关资料最后终于找到答案,其精髓就是:利用苹果给出的三种类型的程序可以保持在后台运行:音频播放类,位置更新类,另外一个记不太清楚了,我利用了苹果给出的音频播放类的这个“特权”来满足我程序上的要求,详细步骤如下:

方案一《目前这个方法如果项目中没有音频播放的话是禁止上架的,慎用》


方案二

当程序进入后台时,计时器就会暂时停止,当重新进入程序时,计时器又会重新开始,有时候,我们需要在程序进入后台时,计时器依然能够计时,所以,就想到了一种解决方案,利用进入后台和前台的时间差来让计时器完美计时。
首先在app delegate.m中有几个方法,这里我们用的是一下2个方法

//当程序进入后台的时候调用
-(void)applicationWillResignActive:(UIApplication *)application;
//当程序进入前台的时候调用
-(void)applicationDidBecomeActive:(UIApplication *)application;

所以当程序进入后台的时候,我们可以注册一个通知,这个通知用来告诉对应的VC“程序已经进入后台,记录当前的系统时间”,
- (void)applicationWillResignActive:(UIApplication *)application{

[[NSNotificationCenter defaultCenter] postNotificationName:@"程序进入后台" object:nil];

}

同样在程序再次进入前台的时候记录当前的时间
- (void)applicationDidBecomeActive:(UIApplication *)application{

    [[NSNotificationCenter defaultCenter] postNotificationName:@"程序进入前台" object:nil];

}

在对应的VC.m中接收通知,先声明一个全局的变量,NSDate * goBackgroundDate;

-(void)viewWillAppear:(BOOL)animated{

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appGoBackgroud) name:@"程序进入后台" object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appGoForegroud) name:@"程序进入前台" object:nil];

}

- (void)appGoBackgroud{

goBackgroundDate = [NSDate date];

}

- (void)appGoForegroud{

NSTimeInterval  timeGone = [[NSDate date] timeIntervalSinceDate:goBackgroundDate];

time = timeGone + time;

 }

- (void)dealloc{

 [[NSNotificationCenter defaultCenter]removeObserver:self];

}

time为你自己定义的时间变量,timeGone为时间间隔。

上一篇下一篇

猜你喜欢

热点阅读