【问题标题】:performSelectorInBackground not working when App is minimized应用程序最小化时 performSelectorInBackground 不起作用
【发布时间】:2012-10-24 08:42:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone ios xcode ipad cocoa


    【解决方案1】:

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

    【讨论】:

    • 我应该在 .h 上声明 bgTask 吗?
    • 不,它是在函数中本地声明的
    猜你喜欢
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多