在iPhone上运行的后台任务(background task running on iphone)

2019-10-29 03:28发布

我有我使用,以保持我的应用程序留在背景状态,它工作得很好在iOS 5.1模拟器但并不表现在实际设备上的运行方式的一些测试代码。

现在我已经知道我必须按照规定要求,所以我必须设置“背景模式”到VoIP和位置。

在我委托的applicationDidEnterBackground方法我打电话以下功能,我称之为“doBackgroundActivity()”要求时间的应用程序以完成在后台需要长时间运行的任务:

-(void) threadedMethod{    
while(true){
    NSLog(@"looping");            
    [self showLocalNotification:@"This notification will come every 2 min. if the app is running in background. Close it!"];        
    [NSThread sleepForTimeInterval: (5)];        // 60 sec = 1 min
}

}

    -(void) doBackgroundActivity{
        self->_backgroundTask = [ [UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
                [[UIApplication sharedApplication] endBackgroundTask: self->_backgroundTask];
                self->_backgroundTask = UIBackgroundTaskInvalid;
            }
        ];


        [self threadedMethod];



[[UIApplication sharedApplication] endBackgroundTask:self->_backgroundTask];
    self->_backgroundTask = UIBackgroundTaskInvalid;
}

正如你看到的,doBackgroundAcitivity()只是调用threadedMethod()和所有做运行一个无限循环,它发送一个本地通知每5秒左右。

现在,当我运行它,并最大限度地减少应用程序的模拟器,我看到了一个通知,每5秒左右。 该应用程序会保持在后台运行,甚至当我运行其他应用程序,我看到我的应用程序发送通知。

但是,这是不会发生的设备上。 它看起来像该操作系统杀死应用程序只是后的第一个通知是发送和我没有看到,我希望以后看到更多的后续通知?

有没有别的东西,我需要做的,以保持在后台运行的应用程序?

Answer 1:

如果你正在寻找做的是呈现给用户的通知,而你的应用程序被关闭,你应该使用UILocalNotifications 。

您可以设置当通知应该火,以及它是否应该重复,并且重复之间的时间量。

作为一个侧面说明,我不建议在循环中使用睡眠(),因为它停止从根本上做任何事情的线程,是不好的,就是想用该线程的任何其他任务时的代码就是这样执行控制。 相反,你应该使用NSTimers,并控制在其上执行代码的时间的其他方式。



文章来源: background task running on iphone