我正在开发一个应用程序,在该应用程序中,当通过主页按钮将其推入后台时,应启动计时器,并且当应用程序返回前台并且计时器已经过一定时间时,应执行某些操作。
我的问题是
- 当我的应用程序进入后台/前台时如何处理事件?
- 有什么特殊的方法或其他技术吗?
非常感谢。
我正在开发一个应用程序,在该应用程序中,当通过主页按钮将其推入后台时,应启动计时器,并且当应用程序返回前台并且计时器已经过一定时间时,应执行某些操作。
我的问题是
非常感谢。
在应用程序的 appDelegate 中,您有一些可以实现的委托方法。
您可以查看 AppDelegate 应遵循的UIApplicationDelegate协议。
当应用程序被推送到后台时,函数 applicationDidEnterBackground: 将被调用。进入前台时调用applicationWillEnterForeground:。
最好不要使用计时器,而是在 applicationDidEnterBackground: 方法中存储一个 NSDate 引用。当您的应用程序进入前台时,您可以使用存储的 NSDate 计算 timeDifference
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
功能。
一个可能的实现可能如下所示:
#define YOUR_TIME_INTERVAL 60*60*5 //i.e. 5 hours
- (void)applicationDidEnterBackground:(UIApplication *)application
{
//... your oder code goes here
NSNumber *timeAppClosed = [NSNumber numberWithDouble:[[NSDate date] timeIntervalSince1970]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults timeAppClosed forKey:@"time.app.closed"];
[defaults synchronize];
}
和
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSNumber *timeAppClosed = [[NSUserDefaults standardUserDefaults] valueForKey:@"time.app.closed"];
if(timeAppClosed == nil)
{
//No time was saved before so it is the first time the user
//opens the app
}
else if([[NSDate date] timeIntervalSinceDate:[NSDate dateWithTimeIntervalSince1970:[timeAppClosed doubleValue]]] > YOUR_TIME_INTERVAL)
{
//Place your code here
}
}