1

即使用户最小化并开始在 ios 设备上处理其他内容,我也试图让应用程序在后台任务中运行,但我的方法只有在应用程序在屏幕上处于活动状态时才会被命中。我在这里遗漏了一些明显的东西吗?

-(void) viewDidAppear:(BOOL)animated
{
  [self performSelectorInBackground:@selector(RunMethodEvenWhenMinimized) withObject:nil];
}

-(void)RunMethodEvenWhenMinimized
{
    while(YES)
    {
        //My Code
        sleep(10);
    }
}
4

1 回答 1

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);
    }
}
于 2012-11-04T07:33:12.407 回答