Ios 如何在应用程序进入后台或被终止时运行计时器
在我的应用程序中,我有一个Ios 如何在应用程序进入后台或被终止时运行计时器,ios,objective-c,nstimer,appdelegate,Ios,Objective C,Nstimer,Appdelegate,在我的应用程序中,我有一个NSTimer,还有一个选择器-(void)timer count。我还有一个整数intcountnum,它每0.01秒增加1(CountNum=CountNum+1) 我想让计时器恢复,因为应用程序已终止或已进入后台。如何操作?用户退出应用程序时,可以使用NSuserdefaults保存countNum。只需将其调用到APPDELEGATE函数-(void)application将终止:(UIApplication*)application{ NSUserDefaul
NSTimer
,还有一个选择器-(void)timer count
。我还有一个整数intcountnum
,它每0.01秒增加1(CountNum=CountNum+1
)
我想让计时器恢复,因为应用程序已终止或已进入后台。如何操作?用户退出应用程序时,可以使用NSuserdefaults保存countNum。只需将其调用到APPDELEGATE函数
-(void)application将终止:(UIApplication*)application{
NSUserDefault *defaults = [NSUser Defaults standardUserDefaults];
[defaults setInteger: countNum forKeys:@"ANY_KEY_HERE"];
[defaults synchronise];
上面的代码将保存您的countNum,但您必须在用户终止或进入后台时保存它
当用户进入前台时,您可以调用以检索countNum
NSUserDefault *defaults = [NSUser Defaults standardUserDefaults];
yourCountNum = [default getIntegerForKeys: @"ANY_KEY_HERE"];
有几点想法:
NSTimer
不是正确的解决方案(尤其是如果您每秒触发100次)。捕获开始时间,然后当您想要确定经过了多少时间时,您可以在将来的任何时间点获取当前时间并将其与开始时间进行比较
这种方法的美妙之处在于,你不再关心执行此过程的频率。如果你正在更新UI,你可以每秒调用60次。如果应用程序位于后台,则在应用程序返回前台之前,你无需执行任何操作(只需将启动时间保存在永久性存储中,例如NSUserDefaults
,然后在应用程序再次启动时再次检索即可)
总之,通过从“计数器”方法转移到“比较当前时间与开始时间”方法,您可以将UI与计时器分离。不用说,一旦完成了这一点,当应用程序离开前台时,您根本不需要计时器NSUserDefaults
,然后在应用程序恢复时加载并更新计数
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithDouble:[[NSDate date] timeIntervalSince1970]] forKey:@"start_time"];
NSNumber *start = [[NSUserDefaults standardUserDefaults] objectForKey:@"start_time"];
countNum = ceil([[NSDate date] timeIntervalSince1970] * 100) - ceil([start doubleValue] * 100);
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithDouble:[[NSDate date] timeIntervalSince1970]] forKey:@"start_time"];
NSNumber *start = [[NSUserDefaults standardUserDefaults] objectForKey:@"start_time"];
countNum = ceil([[NSDate date] timeIntervalSince1970] * 100) - ceil([start doubleValue] * 100);