确定iOS应用程序已关闭或已在后台运行的时间。
确定iOS应用程序关闭或处于后台的时间长度的原因是为了在应用程序回到前台时计算出这段时间的差异。解决方法是在应用程序进入后台时将时间保存在NSUserDefaults中,然后在应用程序回到前台时获取保存的时间,并计算出时间差。
然而,需要注意的是,应用程序可能会在没有调用applicationDidEnterBackground:的情况下崩溃。用户也可以在不让应用程序进入后台的情况下终止应用程序。因此,需要考虑这些情况。总体上,C_X的方法仍然有效,因为你将查看最后一个值(它将更旧),但是需要记住这些情况。如果你将"进入后台的时间"作为其他事情(比如最后一次与服务器通信的时间)的代理,我建议跟踪你真正关心的事情,而不是进入后台的时间。
此外,还可以参考一个关于各种方法何时被调用的有用提示:stackoverflow.com/questions/3712979/…
确定iOS应用程序已经关闭或者在后台运行了多长时间的问题的出现原因是为了跟踪应用程序在后台或者被关闭的时间,解决方法是通过保存时间到NSUserDefaults中,并在应用程序重新启动时使用这些时间。以下是一个示例代码:
在应用程序进入后台时保存时间:
- (void)applicationDidEnterBackground:(UIApplication *)application { NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init]; [dateFormat setDateFormat:@"MM/dd/yyyy HH:mm:ss"]; NSString *backGroundTime = [dateFormat stringFromDate:[NSDate date]]; [[NSUserDefaults standardUserDefaults]setValue:backGroundTime forKey:@"backGroundTime"]; }
在应用程序进入前台时计算时间差:
- (void)applicationWillEnterForeground:(UIApplication *)application { NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init]; [dateFormat setDateFormat:@"MM/dd/yyyy HH:mm:ss"]; NSString *foreGroundTime = [dateFormat stringFromDate:[NSDate date]]; NSString *backGroundTime = [[NSUserDefaults standardUserDefaults]valueForKey:@"backGroundTime"]; [self minCalculation_backgroundtime:backGroundTime forgroundTime:foreGroundTime]; }
计算时间差的方法:
-(void)minCalculation_backgroundtime:(NSString *)backgroundTime forgroundTime:(NSString *)foreGroundTime { NSDateFormatter *dateformat = [[NSDateFormatter alloc]init]; [dateformat setDateFormat:@"MM/dd/yyyy HH:mm:ss"]; NSDate *lastDate = [dateformat dateFromString:foreGroundTime]; NSDate *todaysDate = [dateformat dateFromString:backgroundTime]; NSTimeInterval lastDiff = [lastDate timeIntervalSinceNow]; NSTimeInterval todaysDiff = [todaysDate timeIntervalSinceNow]; NSTimeInterval dateDiff = lastDiff - todaysDiff; int min = dateDiff/60; NSLog(@"Good to see you after %i minutes",min); }
某些情况下可以只保存时间间隔而不是格式化后的日期,这样可以减少代码量。还某些情况下可以直接保存NSDate对象而不需要转换为时间间隔。