我想在我的iOS应用程序中启动一个计时器,当应用程序在后台运行时,当应用程序关闭。计时器必须检查每30分钟有一个新的通知。在计时器函数中,他们调用每30分钟另一个函数showNotification()。我如何做这个计时器,当应用程序不运行/在后台运行时,我必须在哪个地方调用计时器。
5tmbdcev1#
当应用程序不在前台的时候是不可能做一些事情的,有100%的确定性,你可以使用后台获取来周期性地被唤醒,但是你不能控制它什么时候发生。虽然有一些技术上的变通方法,甚至可能有一些蹩脚的解决方案(在后台播放静音音频),但在我看来,您的问题可以在不使用计时器和后台获取的情况下得到解决。只需实现remote notifications。当iOS收到应用的通知时,它会唤醒应用并让它处理一段时间。然后,您可以控制向用户显示哪些通知,还可以在后台加载一些数据。概括地说,您需要:
xlpyo6sf2#
AFAIK没有办法在后台(在生产中)运行180s后的NSTimer。编辑:如果你启用背景模式,你可以得到最多10分钟。你可以了解更多,例如。here。
vaqhlq813#
Write this both methos in your Appdelegate.m file //For Objective c - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self TimerMethod]; } -(void)TimerMethod { //Every 30 minute call the functions _timer=[NSTimer scheduledTimerWithTimeInterval:1800.0f target:self selector:@selector(updateMethod:) userInfo:nil repeats:YES]; } - (void)updateMethod:(NSTimer *)theTimer { NSLog(@"Timer set now"); } //For Swift func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { self.TimerMethod() } func TimerMethod() { var timer = NSTimer.scheduledTimerWithTimeInterval(1800, target: self, selector: "updateMethod", userInfo: nil, repeats: true) } func updateMethod() { print("set timer now") }
vddsk6oq4#
将此代码添加到appdeleage.swift中
var backgroundUpdateTask: UIBackgroundTaskIdentifier = 0 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { return true } func applicationWillResignActive(application: UIApplication) { self.backgroundUpdateTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ self.endBackgroundUpdateTask() }) } func endBackgroundUpdateTask() { UIApplication.sharedApplication().endBackgroundTask(self.backgroundUpdateTask) self.backgroundUpdateTask = UIBackgroundTaskInvalid } func applicationWillEnterForeground(application: UIApplication) { self.endBackgroundUpdateTask() }
4条答案
按热度按时间5tmbdcev1#
当应用程序不在前台的时候是不可能做一些事情的,有100%的确定性,你可以使用后台获取来周期性地被唤醒,但是你不能控制它什么时候发生。
虽然有一些技术上的变通方法,甚至可能有一些蹩脚的解决方案(在后台播放静音音频),但在我看来,您的问题可以在不使用计时器和后台获取的情况下得到解决。
只需实现remote notifications。当iOS收到应用的通知时,它会唤醒应用并让它处理一段时间。然后,您可以控制向用户显示哪些通知,还可以在后台加载一些数据。
概括地说,您需要:
xlpyo6sf2#
AFAIK没有办法在后台(在生产中)运行180s后的NSTimer。
编辑:如果你启用背景模式,你可以得到最多10分钟。你可以了解更多,例如。here。
vaqhlq813#
vddsk6oq4#
将此代码添加到appdeleage.swift中