RunMethodEvenWhenMinimized

RunMethodEvenWhenMinimized

我试图使该应用程序在后台运行,即使用户最小化并开始在ios设备上进行其他工作,但我的方法只有在该应用程序在屏幕上处于 Activity 状态时才会被击中。我在这里错过明显的东西吗?

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

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

最佳答案

问题是您似乎使后台处理和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);
    }
}

关于iphone - 最小化App时performSelectorInBackground不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13216418/

10-09 08:52