当应用程序进入后台时运行后台线程

时间:2012-05-27 02:35:28

标签: iphone ios background-process nsthread

当应用程序进入后台状态时,我需要在后台安排任务。 我必须这样做才能每x次调用远程服务,然后在远程服务发生某些事件时显示本地通知。 (我知道它看起来像RPN,是的,但由于某种原因,我无法使用PRM)

我试过这段代码:

- (void)applicationDidEnterBackground:(UIApplication *)application{

   [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void){
        remoteServiceCallThread = [[NSThread alloc] initWithTarget:self selector:@selector(doRemoteCall:) object:nil];
        [remoteServiceCallThread start];
   }];
}

- (void)applicationWillEnterForeground:(UIApplication *)application{
    [remoteServiceCallThread cancel];   
}

我把断点放在doRemoteCall选择器中,put不工作。

也许我的方法不是最好的方法。如果你有任何其他黑客来做这个操作,就像我描述的那样,我会接受它。

谢谢。

1 个答案:

答案 0 :(得分:2)

您没有启动该线程,它的初始化代码位于到期处理程序块中,该块将在应用程序关闭并超时之前调用:

  

在应用程序剩余之前不久调用的处理程序   后台时间达到0.您应该使用此处理程序来清理和   标记后台任务的结束。未能结束任务   明确地将导致应用程序的终止。该   在主线程上同步调用handler,从而阻塞了   应用程序暂时暂停应用程序   通知。

如果您的应用不支持其中一种后台模式(gps,音频,voip),则该任务应仅激活10分钟(由iOS驱动)。

如果用户将应用程序带到前台或任务时间结束(当调用处理程序块时),您还需要保留返回的UIBackgroundTaskIdentifier引用以将其标记为已结束