我正在尝试让应用程序在后台运行,即使用户最小化并开始在ios设备上使用其他内容,但只有当应用程序在屏幕上处于活动状态时才会触发我的方法。我错过了一些明显的东西吗?
-(void) viewDidAppear:(BOOL)animated
{
[self performSelectorInBackground:@selector(RunMethodEvenWhenMinimized) withObject:nil];
}
-(void)RunMethodEvenWhenMinimized
{
while(YES)
{
//My Code
sleep(10);
}
}
答案 0 :(得分:3)
问题是您似乎混淆了后台处理和NSObject
的后台线程帮助程序功能。您实际上并没有指定您的方法应该在后台运行,而是它将在不是主线程的线程上运行。建议您使用-[UIApplication beginBackgroundTaskWithExpirationHandler:];
通知系统您的应用程序需要超出它在前台分配的时间来执行方法。完成所有操作后,您的代码最终会看起来像这样:
-(void) viewDidAppear:(BOOL)animated
{
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
bgTask = UIBackgroundTaskInvalid;
}];
[self RunMethodEvenWhenMinimized];
[app endBackgroundTask:bgTask];
}
-(void)RunMethodEvenWhenMinimized
{
while(YES)
{
//My Code
sleep(10);
}
}