我发现很多帖子在计算器有关NSTimer
在后台运行。
但是我没有找到任何解决方案。
在我的应用程序,我在后台播放的声音和我设置计时器停止音乐,当它到达该时间。
所以,我需要运行我NSTimer
背景(意思是,当主按钮点击睡觉iPhone)。
我怎样才能做到这一点?
我发现很多帖子在计算器有关NSTimer
在后台运行。
但是我没有找到任何解决方案。
在我的应用程序,我在后台播放的声音和我设置计时器停止音乐,当它到达该时间。
所以,我需要运行我NSTimer
背景(意思是,当主按钮点击睡觉iPhone)。
我怎样才能做到这一点?
// NSTimer run when app in background <br>
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
loop = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(Update) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:loop forMode:NSRunLoopCommonModes];
这就是你想要什么?
计时器只在应用程序中存在。 所以,(除了一个很小的窗口)当您的应用程序发送到后台,定时器不能再火。
(音频继续运行,因为它是由系统播放,而不是由您的应用程序。)
所以你不能使用定时器用于这一目的。
你能做什么 - 通过iPatel的建议 - 是使用本地通知,来代替。 这将简要地唤醒你的应用程序,让你停止播放音乐。
获取表格[此问题]( http://iphonedevsdk.com/forum/iphone-sdk-development/58643-keep-nstimer-running-when-app-is-in-background-multitasking.html )
- (void)btnSetupNotificationClicked:(id)sender
{
UILocalNotification* pOrderCompletedNotification=[[UILocalNotification alloc] init];
if(pOrderCompletedNotification!=nil)
{
[pOrderCompletedNotification setFireDate:[[NSDate alloc] initWithTimeIntervalSinceNow:5.00]];
// [pOrderCompletedNotification setApplicationIconBadgeNumber:1];
[pOrderCompletedNotification setTimeZone:[NSTimeZone systemTimeZone]];
[pOrderCompletedNotification setSoundName:@\"OrderCompleted.m4a\"];
[pOrderCompletedNotification setAlertBody:@\"Order Completed\"];
[pOrderCompletedNotification setAlertAction:nil];
[pOrderCompletedNotification setHasAction:NO];
UIApplication* pApplication=[UIApplication sharedApplication];
if(pApplication!=nil)
{
[pApplication scheduleLocalNotification:pOrderCompletedNotification];
}
else
{
NSLog(@\"Application singleton allocation error.\");
}
[pOrderCompletedNotification release];
[pApplication release];
}
else
{
NSLog(@\"Local notification creation error.\");
} // if
}
随着斯威夫特
let app = UIApplication.sharedApplication()
app.beginBackgroundTaskWithExpirationHandler(nil)
let timer = NSTimer.scheduledTimerWithTimeInterval(1,
target: self,
selector:"DoSomethingFunctions",
userInfo: nil,
repeats: true)
NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
当您运行NSTimer
,该@selector
方法本身将决定无论您想在后台或主线程中运行。
初始设置:
self.scanTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(manageMethod) userInfo:nil repeats:YES]; //@property (nonatomic, strong) NSTimer *scanTimer
如果你想在后台运行:
-(void)manageMethod
{
dispatch_queue_t queue = dispatch_queue_create("com.mysite.thread1",NULL);
dispatch_async(queue,^{
//run in background
});
}