Ios NSTimer没有';设备锁定时无法工作
我有一个应用程序,我想在后台工作的每一次,只有当用户关闭(终止)它失败(如每日警报)。我的代码是: AppDelegate:Ios NSTimer没有';设备锁定时无法工作,ios,objective-c,Ios,Objective C,我有一个应用程序,我想在后台工作的每一次,只有当用户关闭(终止)它失败(如每日警报)。我的代码是: AppDelegate: - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { backgroundUpdateTask = 0; return YES; } -
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
backgroundUpdateTask = 0;
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application{
}
- (void)applicationDidEnterBackground:(UIApplication *)application{
backgroundUpdateTask = [[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:^{
[self endBackgroundUpdateTask];
}];
if (application.applicationIconBadgeNumber > 0) {
application.applicationIconBadgeNumber = 0;
}
}
- (void)applicationWillEnterForeground:(UIApplication *)application{
[self endBackgroundUpdateTask];
if (application.applicationIconBadgeNumber > 0) {
application.applicationIconBadgeNumber = 0;
}
}
- (void)applicationDidBecomeActive:(UIApplication *)application{
lte = [[NSUserDefaults standardUserDefaults] valueForKey:@"LTE"];
if (lte == nil) {
[Utility GetNewNotification:lte];
lte = [[[notifyDic objectForKey: @"Notification"]valueForKey:@"LTE"]valueForKey:@"text"];
[[NSUserDefaults standardUserDefaults] setValue:lte forKey:@"LTE"];
}
}
- (void)applicationWillTerminate:(UIApplication *)application{
}
- (void)endBackgroundUpdateTask{
[[UIApplication sharedApplication]endBackgroundTask:backgroundUpdateTask];
backgroundUpdateTask = UIBackgroundTaskInvalid;
}
和视图控制器:
@implementation ViewController
{
NSTimer *myTimer;
int counter;
}
-(void)CheckTimer{
if(counter == 0){
counter = 60;
NSString* lte = [[NSUserDefaults standardUserDefaults] valueForKey:@"LTE"];
[Utility GetNewNotification:lte];
}
else {
counter --;
//do your video playing work here
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
/// Counter for get new notification
counter = 60;
myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(CheckTimer) userInfo:nil repeats:YES];
}
我希望每60秒触发一次,服务调用一次。但180秒后,应用程序转到后台计时器关闭。如果设备处于锁定状态,计时器也会关闭。要在后台运行代码,请参阅此链接:- 注意事项:-
@Darshan Mothreja的回答是正确的。如果您想在后台运行代码,那么实际执行操作的时间有限。在该时间到期后,在应用程序返回前台之前,您是运气不佳的 根据您试图完成的任务,您可能希望查看AppDelegate中的生命周期方法 你可能会想看看这个方法:
- (void)applicationDidBecomeActive:(UIApplication *)application;
并向其添加更多更新代码。这将允许您在应用程序返回前台时更新内容或获取新数据 由于iOS 7.1,您可以在后台运行这3分钟,或者如果您愿意,您可以使用
[[UIApplicationsharedApplication]beginBackgroundTaskWithExpirationHandler:^{}]
在iOS上运行10分钟。您可能想了解更多关于后台执行如何在iOS上工作的信息(扰流板警报:Apple).听起来你好像想要某种通知?正如holex已经写的,你最好阅读apple文档,了解后台执行的工作原理和后台模式。如果你的应用程序不符合特定的类别列表,你不能。请注意,您最终选择的类别将成为苹果审查团队审查的一部分。所以,如果你的应用程序不需要位置,但你将其标记为背景位置,它可能会被拒绝。一些电池杀手应用程序。使用推送通知不是更好吗?