iphone - 当应用程序最小化时,performSelectorInBackground 不起作用

标签 iphone ios xcode ipad cocoa

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

-(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 - 当应用程序最小化时,performSelectorInBackground 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13216418/

相关文章:

ios - Xcode Autolayout - 在横向 View 中使 subview 变小

javascript - 如何用 mousemove 替换 mouseover?

ios - 在不使用自动布局或制作新的 xib 的情况下从 iPhone 5 调整 iPhone 4 的大小

ios - 在 iOS 上使用 Grabba 从军事 CAC 读取 CHUID?

ios - Xcode - 从 NSDate 属性为 UIDatePicker 设置自定义日期

iphone - 我做的是将分贝从 -120 - 0 转换为 0 - 120 的正确做法吗

ios - NSError localizedDescription 总是返回英文错误信息

ios - `UTF16Index()` 或 `UTF16Index.init(encodedOffset:)` 用于 Xcode 8/9 支持

iphone - 未显示游戏中心邀请

ios - 如何将操作设置为搜索的取消按钮